J3.x

Développement d'un composant MVC - Ajout d'une vue à la partie site

From Joomla! Documentation

Revision as of 08:52, 20 July 2015 by Perete (talk | contribs) (Created page with "Le fichier qui va contenir le code de la vue est appelée <tt>view.[view_mode].php</tt>. Le mode d'affichage par défaut, et probablement la seule vue d'un composant est le mo...")
This Page Needs Your Help

This page is tagged because it NEEDS REVIEW. You can help the Joomla! Documentation Wiki by contributing to it.
More pages that need help similar to this one are here. NOTE-If you feel the need is satistified, please remove this notice.


Joomla! 
3.x
Didacticiel
Développement d'un composant MVC

Ajout d'une requête de variable dans le type de menu

Utilisation de la base de données

Backend de base

Ajout de la gestion des langues

Ajout d'actions en backend

Ajout de décorations pour le backend

Ajout de vérifications

Ajout de catégories

Ajout de configuration

  1. Ajout d'ACL

Ajout d'un fichier script installation/désinstallation/mise à jour

Ajout d'un formulaire de frontend

  1. Ajout d'une image
  2. Ajout d'un plan
  3. Ajout d'AJAX
  4. Ajout d'un alias

Utilisation du filtre de langues

  1. Ajouter une fenêtre modale
  2. Ajout d'associations
  3. Ajout de Checkout
  4. Ajout d'un filtre
  5. Ajout de niveaux
  6. Ajout de versions
  7. Ajout de tags
  8. Ajout d'accès
  9. Ajout d'un processus de traitement
  10. Ajout d'un cache
  11. Ajout d'un fil d'actualité

Ajout d'un serveur de mise à jour

  1. Adding Custom Fields
  2. Upgrading to Joomla4



Ceci est une série qui regroupe plusieurs articles pour devenir un didacticiel sur la façon de développer un Composant pour Joomla! Joomla 3.x suivant le principe Modèle-Vue-Contrôleur.

Commencez avec l'introduction, et naviguez dans les articles de cette série soit à l'aide des boutons de navigation en bas des articles, soit grâce au menu de droite : Les articles de cette série.



Introduction

Ce didacticiel fait partie de la série de didacticiels sur le Développement d'un Composant MVC pour Joomla! 3.x. Vous êtes invité à lire les articles précédents de cette série avant de lire celui-ci. Dans le framework Joomla! 3.x, les auteurs des composants tiers ont divisé leur code en trois parties principales:

  • modèles : ils gèrent les données
  • contrôleurs : ils exécutent les tâches, définissent et récupèrent les états des modèles et demandent aux vues de s'afficher
  • vues : elles affichent le contenu en fonction du type (error, feed, html, json, raw, xml) et la mise en page choisie par les contrôleurs.

Configurer le contrôleur

Dans le code du noyau Joomla, il existe une classe capable de gérer les contrôleurs : JControllerLegacy. Cette classe doit être étendue afin d'être utilisée dans notre composant. Dans le fichier votresite/components/com_helloworld/helloworld.php (point d'entrée de notre composant Hello World), ajoutez ces lignes :

site/helloworld.php

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2015 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();

La méthode statique getInstance de la classe JControllerLegacy va créer un contrôleur. Dans le code ci-dessus, cela va instancier un objet contrôleur de la classe nommée HelloWorldController. Joomla va chercher la déclaration de cette classe dans un fichier nommé votresitee/components/com_helloworld/controller.php (c'est un comportement par défaut).

Maintenant, controller.php doit être créé et "HelloWorldController" doit être déclaré et défini. A l'aide de votre gestionnaire de fichiers et éditeur préférés, créez un fichier votresite/components/com_helloworld/controller.php contenant :

site/controller.php

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2015 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
{
}

Si aucune tâche (task) n'est indiquée dans les variables de requête, la tâche par défaut sera exécutée. Par défaut, la tâche display. La classe JControllerLegacy possède une telle tâche. Dans notre exemple, elle affichera une vue nommée HelloWorld.

Ainsi, avec tout simplement task, une fonction publique display() de JControllerLegacy est référencée.

A Tip!

Aparté : vous pourriez appeler une autre fonction adjointe à display() en utilisant une URL comme celle-ci :

http://localhost/index.php?option=com_helloworld&task=insert
Ceci va appeler une fonction insert() de notre contrôleur (que nous devrons implémenter dans HelloWorldController ).

Configurer la vue

Lorsque JControllerLegacy veut afficher une vue, il va chercher les fichiers dans le dossier : votresite/components/com_[nom du composant]/views/[nom de la vue]/.

Le nom du dossier de la vue par défaut est le nom du composant lui-même. Dans notre cas, le chemin est votresite/components/com_helloworld/views/helloworld/.

Le fichier qui va contenir le code de la vue est appelée view.[view_mode].php. Le mode d'affichage par défaut, et probablement la seule vue d'un composant est le mode "html". Donc cela nous donne notre nom de fichier qui sera : view.html.php.

With your favorite file manager and editor, create a file yoursite/components/com_helloworld/views/helloworld/view.html.php able to display the default view and containing:

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2015 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);
	}
}

The display method of the JViewLegacy class is called with the display task of the JControllerLegacy class. In our case, this method will display data using the tmpl/default.php file. With your favorite file manager and editor, create a file yoursite/components/com_helloworld/views/helloworld/tmpl/default.php able to display the default view and containing:

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2015 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>

This template file will be included by the JViewLegacy class. Therefore, here, $this refers to the HelloWorldViewHelloWorld class.

So to give an example, one could call the view inside the yoursite/components/com_[component_name]/views/[name of view]/ folder by calling index.php?option=com_helloworld (this would default to the yoursite/components/com_helloworld/views/helloworld/ folder) or we could explicitly call the folder by calling:

index.php?option=com_helloworld&view=helloworld

if we change &view=helloworld to something else, e.g. &view=fluffy we would have to create a folder components/com_helloworld/views/fluffy/.

Copy the contents of views/helloworld to views/fluffy

The classname of the file view.html.php of the fluffy folder would be HelloWorldViewFluffy. Afterwards you can customize the contents of default.php of the fluffy subfolder for custom output and see the output by calling index.php?option=com_helloworld&view=fluffy

Empaqueter le composant

Contenu de votre répertoire de code

Créez un fichier compressé de ce répertoire ou téléchargez directement l'archive et installez-le en utilisant le gestionnaire des extensions Joomla. Vous pouvez tester ce composant simple en indiquant index.php?option=com_helloworld dans la barre d'adresse de votre navigateur.

helloworld.xml

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

	<name>Hello World!</name>
	<!-- The following elements are optional and free of formatting constraints -->
	<creationDate>December 2013</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>

Résultat : Vous verrez par défaut le message contenu dans la variable $this->msg du fichier view.html.php.

General Information

Merci de créer un pull request ou un rapport d'anomalie sur https://github.com/joomla/Joomla-3.2-Hello-World-Component pour toute incohérence dans le code ou pour modifier le code source de cette page.

Contributeurs