J3.x

Het ontwikkelen van een MVC Component - Toevoegen van een view aan de website

From Joomla! Documentation

< J3.x:Developing an MVC Component
This page is a translated version of the page J3.x:Developing an MVC Component/Adding a view to the site part and the translation is 100% complete.

Other languages:
العربية • ‎English • ‎español • ‎français • ‎Nederlands • ‎português do Brasil • ‎русский
Joomla! 
3.x
Handleiding
Het ontwikkelen van een MVC component


Dit is een reeks van artikelen met handleidingen over het ontwikkelen van een Model-View-Controller Component voor Joomla! versieJoomla 3.x.

Begin met de Introductie en navigeer door de artikelen van de reeks door middel van de navigatieknop onderaan of het vak rechts (Artikelen in deze reeks).



Toelichting

  • U kunt de onderstaande stappen volgen om een view (weergave) aan de Hello World! component toe te voegen, of u kunt deze rechtstreeks downloaden archief
  • Terwijl u de stappen van deze handleiding volgt kunt u problemen ondervinden. In dat geval is het nuttig om de Joomla pagina over Hoe uw code te debuggen te lezen.

Toevoegen van een view aan Hello World!

In dit artikel behandelen we hoe een view (weergave) toegevoegd wordt aan een eenvoudige Joomla! component. In dit voorbeeld werken we verder aan de Hello World! component.

Er zijn verschillende manieren om een Joomla! component te updaten. In deze handleiding focussen we ons op optie 2.

1 Voeg de bestanden handmatig toe aan <path_to_joomla>/
2 Update door gebruik te maken van Joomla! extensiebeheer en de originele, niet gecomprimeerde, map die gebruikt werd voor het installeren van de component
3 Update door gebruik te maken van Joomla! extensiebeheer en een updateserver

Om een view toe te voegen dient u te navigeren naar com_helloworld, hetgeen de originele map is die u gemaakt hebt voor de component. Gebruik de bestandsmanager van uw voorkeur om de volgende bestanden te maken of te updaten; voeg, terwijl u de bestanden maakt of update, de broncode toe die u kunt vinden in de Bestandsgegevens.

1 Update: helloworld.php <path_to_com_helloworld>/site/helloworld.php
2 Maak: controller.php <path_to_com_helloworld>/site/controller.php
3 Maak: index.html <path_to_com_helloworld>/site/views/index.html
4 Maak: index.html <path_to_com_helloworld>/site/views/helloworld/index.html
5 Maak: view.html.php <path_to_com_helloworld>/site/views/helloworld/view.html.php
6 Maak: default.php <path_to_com_helloworld>/site/views/helloworld/tmpl/default.php
7 Maak: index.html <path_to_com_helloworld>/site/views/helloworld/tmpl/index.html
8 Update: helloworld.xml <path_to_com_helloworld/helloworld.xml

Updaten van de Hello World! component

Om de Hello World! Component te updaten in de Joomla! website, volgt u dezelfde stappen als voor de originele installatie.


Bestandsgegevens

site/helloworld.php (Note that some browsers may not copy and paste highlighted text correctly into a text editor. If you find this, then please try a different browser).

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

// Get an instance of the controller prefixed by HelloWorld
$controller = JControllerLegacy::getInstance('HelloWorld');

// Perform the Request task
$input = JFactory::getApplication()->input;
$controller->execute($input->getCmd('task'));

// Redirect if set by the controller
$controller->redirect();

site/controller.php

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
/**
 * Hello World Component Controller
 *
 * @since  0.0.1
 */
class HelloWorldController extends JControllerLegacy
{
}

site/views/helloworld/view.html.php

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

/**
 * HTML View class for the HelloWorld Component
 *
 * @since  0.0.1
 */
class HelloWorldViewHelloWorld extends JViewLegacy
{
	/**
	 * Display the Hello World view
	 *
	 * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
	 *
	 * @return  void
	 */
	function display($tpl = null)
	{
		// Assign data to the view
		$this->msg = 'Hello World';

		// Display the view
		parent::display($tpl);
	}
}

site/views/helloworld/tmpl/default.php

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */
 
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
?>
<h1><?php echo $this->msg; ?></h1>

index.html Opmerking - dezelfde code is gebruikt voor alle mappen

<html><body bgcolor="#FFFFFF"></body></html>

helloworld.xml

<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="3.0" method="upgrade">

	<name>Hello World!</name>
	<!-- The following elements are optional and free of formatting constraints -->
	<creationDate>January 2018</creationDate>
	<author>John Doe</author>
	<authorEmail>john.doe@example.org</authorEmail>
	<authorUrl>http://www.example.org</authorUrl>
	<copyright>Copyright Info</copyright>
	<license>License Info</license>
	<!--  The version string is recorded in the components table -->
	<version>0.0.2</version>
	<!-- The description is optional and defaults to the name -->
	<description>Description of the Hello World component ...</description>

	<update> <!-- Runs on update; New since J2.5 -->
		<schemas>
			<schemapath type="mysql">sql/updates/mysql</schemapath>
		</schemas>
	</update>

	<!-- Site Main File Copy Section -->
	<!-- Note the folder attribute: This attribute describes the folder
		to copy FROM in the package to install therefore files copied
		in this section are copied from /site/ in the package -->
	<files folder="site">
		<filename>index.html</filename>
		<filename>helloworld.php</filename>
		<filename>controller.php</filename>
		<folder>views</folder>
	</files>

	<administration>
		<!-- Administration Menu Section -->
		<menu link='index.php?option=com_helloworld'>Hello World!</menu>
		<!-- Administration Main File Copy Section -->
		<!-- Note the folder attribute: This attribute describes the folder
			to copy FROM in the package to install therefore files copied
			in this section are copied from /admin/ in the package -->
		<files folder="admin">
			<!-- Admin Main File Copy Section -->
			<filename>index.html</filename>
			<filename>helloworld.php</filename>
			<!-- SQL files section -->
			<folder>sql</folder>
		</files>
	</administration>

</extension>


Code verklaring

Indien u nieuwsgierig bent waarom dit werkt zoals het werkt.

helloworld.php

defined('_JEXEC') or die('Restricted access');

Dit zorgt voor een veilig toegang tot het Joomla! platform. JEXEC bevat een gedetailleerde uitleg.

$controller = JControllerLegacy::getInstance('HelloWorld');

JControllerLegacy is een basis class voor een Joomla! controller. Om op uw website controllers te gebruiken moeten we deze class uitbreiden in uw component. De getInstance static methode van de JControllerLegacy class zal een controller maken. De bovenstaande code zal een controller object instantiëren genaamd HelloWorldController. Joomla zal zoeken naar de declaratie van die class in <path_to_joomla>/htdocs/components/com_helloworld/controller.php.

$input = JFactory::getApplication()->input;
$controller->execute($input->getCmd('task'));

Nadat de controller is gemaakt, geven we de controller de instructie om de taak uit te voeren, zoals die in de URL gedefinieerd is: <uwsite>/joomla/index.php?option=com_helloworld&task=<taak_naam>. Indien er geen taak is ingesteld wordt de standaard taak 'weergave' verondersteld. Wanneer weergave gebruikt wordt, zal de 'view' variable beslissen wat er weergegeven wordt. Andere veel voorkomende taken zijn opslaan, bewerken, nieuw, etc.

$controller->redirect();

De controller kan besluiten om de pagina door te wijzen, meestal nadat een taak zoals 'opslaan' voltooid is. Dit laatste statement verzorgt de feitelijke doorwijzing.

Het voornaamste toegangspunt, helloworld.php, passeert eerst de controller, die de uitvoering van de gespecificeerde taak in de aanvraag verwerkt. De specifieke controller van onze component doet niets meer dan de bovenliggende class al doet, daarom is onze controller class leeg.

controller.php

class HelloWorldController extends JControllerLegacy
{
}

Wanneer er geen taak in de aanvraag variabelen is gegeven wordt de standaard taak uitgevoerd. Standaard is dat de weergave taak. De JControllerLegacy class heeft zo'n taak. In ons voorbeeld zal het een view weergeven genaamd HelloWorld.

view.html.php

class HelloWorldViewHelloWorld extends JViewLegacy
{
	function display($tpl = null)
	{
		// Assign data to the view
		$this->msg = 'Hello World';
 
		// Display the view
		parent::display($tpl);
	}
}

De view stelt de tekst op die uitgevoerd moet worden en roept dan de basis weergave class op. JViewLegacy is een basis class voor een Joomla! view. In ons geval zal deze methode data weergeven door het tmpl/default.php bestand te gebruiken.

Voorbehoud: Als uw view individuele JavaScript code moet inladen of insluiten, doe dat niet in de view, de code wordt dan mogelijk niet ingevoegd wanneer caching ingeschakeld is. Laad deze scripts in plaats daarvan in de controller. Zie de gerelateerde issue op de issue tracker.

default.php

<h1><?php echo $this->msg; ?></h1>

Dit template bestand zal worden ingevoegd door de JViewLegacy class. Derhalve verwijst $this hier naar de HelloWorldViewHelloWorld class.

helloworld.xml

<version>0.0.2</version>

Update het versienummer.

<filename>controller.php</filename>
<folder>views</folder>

Vertelt de installer applicatie om de controller.php en de views/map toe te voegen

Component inhoud

Op dit moment in de handleiding zou uw component de volgende bestanden moeten bevatten:

1 helloworld.xml dit is een XML (manifest) bestand dat Joomla! vertelt hoe de component geïnstalleerd moet worden.
2 site/helloworld.php dit is de site toegang tot de Hello World! component
3 site/index.html voorkomt dat de server de inhoud van de map in een lijst weergeeft
4 site/controller.php bestand die de controller representeert
5 site/views/index.html voorkomt dat de server de inhoud van de map in een lijst weergeeft
6 site/views/helloworld/index.html voorkomt dat de server de inhoud van de map in een lijst weergeeft
7 site/views/helloworld/view.html.php bestand die de view representeert
8 site/views/helloworld/tmpl/index.html voorkomt dat de server de inhoud van de map in een lijst weergeeft
9 site/views/helloworld/tmpl/default.php de standaard weergave
10 admin/index.html voorkomt dat de server de inhoud van de map in een lijst weergeeft
11 admin/helloworld.php dit is de administrator toegang tot de Hello World! component
12 admin/sql/index.html voorkomt dat de server de inhoud van de map in een lijst weergeeft
13 admin/sql/updates/index.html voorkomt dat de server de inhoud van de map in een lijst weergeeft
14 admin/sql/updates/mysql/index.html voorkomt dat de server de inhoud van de map in een lijst weergeeft
15 admin/sql/updates/mysql/0.0.1.sql bestand die het initialiseren van de schema versie van de component com_helloworld mogelijk maakt
Info non-talk.png
General Information

Maak alstublieft een pull request of issue aan op https://github.com/joomla/Joomla-3.2-Hello-World-Component voor enige foute code of een wijziging van de broncode op deze pagina.