J3.x

Développement d'un composant MVC - Ajout d'un modèle à la partie publique du site

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 model to the site part and the translation is 100% complete.

Other languages:
العربية • ‎English • ‎español • ‎français • ‎Nederlands
Joomla! 
3.x
Didacticiel
Développement d'un composant MVC


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.



Notes

  • Vous pouvez suivre les étapes ci-dessous pour ajouter un modèle à votre composant "Hello World!" ou vous pouvez directement télécharger l'archive

Ajout d'un Model au composant

Dans cet article, nous verrons comment ajouter un modèle dans un composant de base pour Joomla. Dans le cadre de cet exemple, nous allons poursuivre notre travail sur le composant Hello World!.

Il existe différentes façons de mettre à jour un composant Joomla. Comme pour le précédent didacticiel, nous allons nous concentrer sur la seconde option.

1 Ajouter manuellement les fichiers dans <path_to_joomla>/
2 Mettez à jour à l'aide du gestionnaire d'extension Joomla! et le répertoire d'origine, non compressé, utilisé lors de l'installation initiale du composant.
3 Mettez effectivement à jour à l'aide du gestionnaire d'extension de Joomla! et un Serveur de mise à Jour.

Pour ajouter un modèle, vous devrez vous rendre vers com_helloworld, qui est le répertoire d'origine créé pour notre composant. Vous devez utiliser la structure de mise à jour du répertoire en partant du précédent didacticiel. À l'aide de votre gestionnaire de fichiers préféré, créez ou mettez à jour les fichiers ci-dessous. Que ce soit pour une création ou encore une mise à jour des fichiers, ajoutez le code source pour chaque fichier se trouvant dans Détails du fichier.

1 Créer : helloworld.php <path_to_com_helloworld>/site/models/helloworld.php
2 Créer : index.html <path_to_com_helloworld>/site/models/index.html
3 Mettre à jour : view.html.php <path_to_com_helloworld>/site/views/helloworld/view.html.php
4 Mettre à jour : helloworld.xml <path_to_com_helloworld>/helloworld.xml

Mettre à jour le composant

Pour mettre à jour le composant Hello World! dans votre site Joomla, veuillez suivre les mêmes étapes que pour : l'installation initiale.

Détails du fichier

site/models/helloworld.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');

/**
 * HelloWorld Model
 *
 * @since  0.0.1
 */
class HelloWorldModelHelloWorld extends JModelItem
{
	/**
	 * @var string message
	 */
	protected $message;

	/**
	 * Get the message
         *
	 * @return  string  The message to be displayed to the user
	 */
	public function getMsg()
	{
		if (!isset($this->message))
		{
			$this->message = 'Hello World!';
		}

		return $this->message;
	}
}

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 = $this->get('Msg');

		// Check for errors.
		if (count($errors = $this->get('Errors')))
		{
			JLog::add(implode('<br />', $errors), JLog::WARNING, 'jerror');

			return false;
		}

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

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.4</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>
		<folder>models</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>


Explications du code

Dans le cas où vous seriez désireux de savoir pourquoi cela fonctionne de cette façon.

helloworld.php

class HelloWorldModelHelloWorld extends JModelItem
{

Cette classe sera appelée par la classe HelloWorldViewHelloWorld.

view.html.php

$this->msg = $this->get('Msg');

La classe HelloWorldViewHelloWorld va demander au modèle les données en utilisant la méthode get de la classe JViewLegacy. La méthode get convertit l'appel à get('Msg') en un appel à getMsg() du modèle, qui est la fonction que nous allons devoir mettre à disposition.

Contenu du composant

À ce stade du didacticiel, votre composant doit contenir les fichiers suivants :

1 helloworld.xml ceci est un fichier (manifest) XML qui va indiquer à Joomla! la façon d'installer notre composant.
2 site/helloworld.php ceci est le point d'entrée pour le composant "Hello World!".
3 site/index.html empêche le serveur web de lister le contenu du répertoire.
4 site/controller.php fichier représentant le contrôleur
5 site/models/helloworld.php fichier représentant le modèle
6 site/models/index.html empêche le serveur web de lister le contenu du répertoire.
7 site/views/index.html empêche le serveur web de lister le contenu du répertoire.
8 site/views/helloworld/index.html empêche le serveur web de lister le contenu du répertoire.
9 site/views/helloworld/view.html.php fichier représentant la vue
10 site/views/helloworld/tmpl/index.html empêche le serveur web de lister le contenu du répertoire.
11 site/views/helloworld/tmpl/default.php la vue par défaut
12 site/views/helloworld/tmpl/default.xml fichier ajoutant un élément de menu
13 admin/index.html empêche le serveur web de lister le contenu du répertoire.
14 admin/helloworld.php ceci est le point d'entrée pour l'administration du composant "Hello World!".
15 admin/sql/index.html empêche le serveur web de lister le contenu du répertoire.
16 admin/sql/updates/index.html empêche le serveur web de lister le contenu du répertoire.
17 admin/sql/updates/mysql/index.html empêche le serveur web de lister le contenu du répertoire.
18 admin/sql/updates/mysql/0.0.1.sql fichier permettant d'initialiser le schéma de version du composant com_helloworld.
Info non-talk.png
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.