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
Les articles de cette série
Ajout d'un type de menu à la partie site
Ajout d'un modèle à la partie site
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
Ajout d'un fichier script installation/désinstallation/mise à jour
Ajout d'un formulaire de frontend
Utilisation du filtre de langues
- Ajouter une fenêtre modale
- Ajout d'associations
- Ajout de Checkout
- Ajout d'un filtre
- Ajout de niveaux
- Ajout de versions
- Ajout de tags
- Ajout d'accès
- Ajout d'un processus de traitement
- Ajout d'un cache
- Ajout d'un fil d'actualité
Ajout d'un serveur de mise à jour
Ceci est une série qui regroupe plusieurs articles pour devenir un didacticiel sur la façon de développer un Composant pour Joomla! 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
- 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.
- 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
- Vous pouvez visualiser une vidéo associée à cette étape sur Étape 4, Ajouter un Modèle.
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. |
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.