Cet article fait partie du tutoriel "Développer un composant MVC pour Joomla 4.x". Il est conçu pour être un tutoriel de programmation à suivre, donc si vous n'avez pas lu les parties précédentes du tutoriel, il est recommandé de le faire.

Ajouter la vue

Bien que le composant soit divisé en parties "admin" et "site", le processus d'ajout d'une vue est très similaire dans les deux cas. Tout comme dans la vue de base que nous avons créée dans le dernier article, nous aurons besoin d'un contrôleur, d'une vue et d'un modèle.

Pour commencer, créons d'abord les nouveaux fichiers pour la page du site. Comme auparavant, le code source de chaque fichier peut être trouvé sous les détails du fichier.

1 Create: site/src/Controller/DisplayController.php Le contrôleur MVC par défaut pour la partie site.
2 Create: site/src/View/Hello/HtmlView.php L'objet de vue MVC pour la nouvelle page "Hello" (site).
3 Create: site/tmpl/hello/default.php Le template pour la nouvelle page "Hello" (site).
4 Update: helloworld.xml Vous devez ajouter les nouveaux fichiers au manifeste du composant.

 

Détail des fichiers

`site/src/Controller/DisplayController.php`

Le contrôleur MVC par défaut dans la partie site. Nous avons un code de base ici pour récupérer et afficher une vue, mais comme précédemment, nous déléguons principalement à la classe parente de Joomla!. Comme il s'agit d'une classe PHP, elle se trouve sous votre espace de noms PHP racine src/, dans l'espace de noms Controller.

<?php

namespace JohnSmith\Component\HelloWorld\Site\View\Hello;

defined('_JEXEC') or die;

use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;

/**
 * @package     Joomla.Site
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2020 John Smith. All rights reserved.
 * @license     GNU General Public License version 3; see LICENSE
 */

/**
 * View for the user identity validation form
 */
class HtmlView extends BaseHtmlView {
    

    /**
     * Display the view
     *
     * @param   string  $template  The name of the layout file to parse.
     * @return  void
     */
    public function display($template = null) {
        // Call the parent display to display the layout file
        parent::display($template);
    }

}

 

site/src/View/Hello/HtmlView.php

La vue MVC pour cette page "Hello World". Comme précédemment, ce fichier se contente de déléguer à l'objet parent pour nous lancer. Comme il s'agit d'une classe PHP, elle se trouve sous src/, dans l'espace de noms View/Hello qui correspond au nom de la vue.

<?php

namespace JohnSmith\Component\HelloWorld\Site\View\Hello;

defined('_JEXEC') or die;

use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;

/**
 * @package     Joomla.Site
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2020 John Smith. All rights reserved.
 * @license     GNU General Public License version 3; see LICENSE
 */

/**
 * View for the user identity validation form
 */
class HtmlView extends BaseHtmlView {
    

    /**
     * Display the view
     *
     * @param   string  $template  The name of the layout file to parse.
     * @return  void
     */
    public function display($template = null) {
        // Call the parent display to display the layout file
        parent::display($template);
    }

}

 

site/tmpl/hello/default.php

Le modèle de page pour notre page "Hello World" dans la partie site. Il est identique au modèle que nous avons utilisé dans la partie administrateur, pour nous lancer. En tant que modèle, il se trouve sous /tmpl dans un dossier qui correspond au nom de la vue.

<?php

/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2020 John Smith. All rights reserved.
 * @license     GNU General Public License version 3; see LICENSE
 */

 // No direct access to this file
defined('_JEXEC') or die('Restricted Access');
?>
<h2>Hello world!</h2>

 

helloworld.xml

Enfin, mettons à jour le manifeste du composant pour inclure les nouveaux fichiers. Nous devons informer Joomla! que les nouveaux fichiers existent afin qu'il les copie à leur place. Nous mettrons également à jour le numéro de version de l'extension dans le manifeste - actuellement, cela n'a pas d'effet réel, mais à l'avenir, changer le numéro de version aura plus de signification, c'est donc une bonne habitude à adopter.

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

    <name>Hello World</name>
    <!-- The following elements are optional and free of formatting constraints -->
    <creationDate>December 2020</creationDate>
    <!-- Dummy author, feel free to replace anywhere you see it-->
    <author>John Smith</author>
    <authorUrl>https://smith.ca</authorUrl>
    <copyright>John Smith</copyright>
    <license>GPL v3</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>
        A hello world component!
    </description>

    <!-- This is the PHP namespace under which the extension's
    code is organised. It should follow this format:
    
    Vendor\Component\ComponentName

    "Vendor" can be your company or your own name
    
    The "ComponentName" section MUST match the name used 
    everywhere else for your component. Whatever the name of 
    this XML file is, the namespace must match (ignoring CamelCase). 
    -->
    <namespace path="src/">JohnSmith\Component\HelloWorld</namespace>

    <files folder="site/">
        <folder>src</folder>
        <folder>tmpl</folder>
    </files>

    <administration>
        <!-- The link that will appear in the Admin panel's "Components" menu -->
        <menu link="index.php?option=com_helloworld">Hello World</menu>
        <!-- List of files and folders to copy, and where to copy them -->
        <files folder="admin/">
            <folder>services</folder>
            <folder>src</folder>
            <folder>tmpl</folder>
        </files>
    </administration>

</extension>

 

Mettre à jour l'extension :

Pour tester les modifications apportées à votre extension, suivez ces étapes et installez la nouvelle version :

1. **Créer une archive ZIP :**
   Zippez le dossier `com_helloworld` contenant vos modifications. Assurez-vous que l'archive contient les fichiers mis à jour ainsi que le manifeste avec le numéro de version modifié.

2. **Installer la nouvelle version :**
   - Ouvrez votre navigateur et accédez au panneau d'administration de votre site Joomla! à l'adresse <votre-joomla>/administrator/. Par exemple : http://localhost/joomla/administrator/.
   - Dans le menu de gauche, cliquez sur "System" (Système).
   - Sur la carte "Install" (Installer), cliquez sur "Extensions".
   - Sur l'onglet "Upload Package File" (Télécharger le fichier du package), sélectionnez le fichier .zip que vous venez de créer.

3. **Vérifier l'installation :**
   - Une fois que votre nouvelle version du composant est installée, cliquez à nouveau sur le lien "System" (Système) dans le menu principal.
   - Sélectionnez "Extensions" sur la carte "Manage" (Gérer) cette fois-ci.
   - Une liste des extensions Joomla! installées devrait apparaître. Tapez "hello" dans la barre de recherche en haut à droite et appuyez sur Entrée.
   - Vous devriez voir votre extension "Hello World" répertoriée, maintenant en version 0.0.2.

4. **Tester l'extension :**
   - Assurez-vous de tester les fonctionnalités de votre extension pour confirmer que les modifications ont été correctement prises en compte.
   - Vérifiez également que la nouvelle version s'affiche correctement dans la liste des extensions installées.

En suivant ces étapes, vous devriez pouvoir installer et tester la nouvelle version de votre extension Joomla! avec les modifications apportées.

Tester la nouvelle page

La nouvelle page n'a pas encore de lien dans le menu (nous l'ajouterons dans le prochain article), donc pour la tester, nous devrons utiliser une URL directe. Allez à <votre-joomla>/index.php?option=com_helloworld&view=hello (pas à l'intérieur du chemin /administrator), et vous devriez voir apparaître votre nouvelle page "Hello World" sur le site.