Le composant d’exemple hallo

Soumis par Hagen Graf le 16. mai 2008 - 16:34

Avant de plonger dans un composant trop complexe, plions-nous à la tradition qui consiste à choisir comme premier programme complet un programme qui se contente d’afficher un petit message de bienvenue du style « Bonjour tout le monde ! » (« Hello world » en anglais et « Hallo Welt » en allemand). Les composants se répartissent en composants de partie publique Frontend et composants d’administration Backend. Les résultats des premiers sont visibles par les visiteurs alors que les autres ne servent qu’à l’administration du site, notamment celle de la partie publique. Vous pouvez reconnaître le type du composant à la manière dont l’adresse de la page correspondante est écrite :

L’adresse URL suivante :

http://localhost/joomla150/index.php?option=com_contact

fait appel à un composant de la partie publique appelé com_contact. Si nous plongeons dans les dossiers de Joomla!, nous trouverons dans le sous-dossier [CheminJoomla]/components toute une série de composants, parmi lesquels ce fameux com_contact (voir Figure 15.1).

Le sous-dossier des composants de Joomla!

Figure 15.1 Le sous-dossier des composants de Joomla!

Pour chaque dossier de composants, est créé un certain nombre de sous-dossiers. Ils contiennent des fichiers qui incarnent les constituants de l’approche MVC.

15.1.1 Un lieu de résidence pour l’exemple

Tout composant possède son dossier unique. Voici comment Joomla! trouve son chemin pour atteindre le composant :

  1. Joomla! analyse la valeur transmise dans l’adresse URL : /index.php?option=com_hallo.
  2. Il cherche dans le tableau des composants s’il trouve un composant nommé com_hallo.
  3. Il cherche ensuite un sous-dossier portant le nom com_hallo.
  4. Dans ce sous-dossier il cherche un fichier appelé hallo.php.
  5. Il exécute le contenu de ce fichier.

Pour que l’exécution soit correcte, plusieurs fichiers sont nécessaires :

  • hallo.php : le point d’entrée fonctionnel du composant ;
  • controller.php : le module de contrôle ;
  • views/hallo/view.html.php : la présentation qui transmet les données au template ;
  • views/hallo/tmpl/default.php : un modèle par défaut qui est remplacé par les définitions du modèle en vigueur ou qui est utilisé tel quel par défaut ;
  • hallo.xml : le fichier XML utilisé par l’installateur pour connaître le paquetage du composant,
    où il doit être installé et qui en est responsable.

Certains d’entre vous auront envie de tourner les talons pour se réfugier dans le douillet monde chaotique de Joomla! 1.0. Résistez ! Venez découvrir ce nouveau monde !

Pour voir le résultat, vous pouvez immédiatement installer le paquetage du composant com_hallo.zip via l’installateur de Joomla!. Pensez à créer un élément de menu pour afficher le résultat. Après l’installation, tous les fichiers sont dans les bons sous-dossiers et vous pouvez consulter le texte source tout en lisant la suite.

15.1.2 Le point de départ (/component/com_hallo/hallo.php)

C’est ce fichier qui est exécuté d’abord, lorsque vous fournissez l’adresse URL suivante :

http://localhost/joomla150/index.php?option=com_hello&view=hello

ou plus simplement lorsque vous sélectionnez l’élément de menu que vous y avez associé. Le résultat n’est pas décoiffant. Vous voyez seulement apparaître le message de bienvenue dans la partie centrale de la fenêtre.

Étudions le code source de ce fichier (voir Listing 15.1).

<?php
// Accès direct interdit
defined(‘_JEXEC’) or die(‘Restricted access’);
// Lecture du contrôleur primaire
require_once (JPATH_COMPONENT.DS.’controller.php’);
// Définition d’un autre contrôleur
$classname = ‘HalloController’.$controller;
$controller = new $classname( );
// Chercher si des paramètres sont fournis (Requests)
$controller->execute( JRequest::getVar(‘task’));
// Redirection dans le contrôleur
$controller->redirect();
?>

Listing 15.1 : /component/com_hallo/hallo.php

Voyons cela en détail.

defined(‘_JEXEC’) or die(‘Restricted access’);

La première ligne est un test de sécurité. Elle vérifie que l’exécution des instructions a été demandée par Joomla!. Si le script a été appelé directement, il est interrompu immédiatement via la fonction die().

require_once (JPATH_COMPONENT.DS.’controller.php’);

Nous procédons ensuite à l’appel du premier contrôleur. Il est désigné par le chemin d’accès absolu JPATH_COMPONENT (components/com_hallo). Le suffixe DS est le caractère servant de séparateur dans les chemins d’accès en vigueur sur le système d’exploitation concerné. Vous savez que sous Windows, les séparateurs des chemins d’accès sont des barres obliques inverses (\) alors que sous Unix ce sont des barres obliques directes (/). Joomla! gère automatiquement cette divergence.

$classname = ‘HalloController’.$controller;
$controller = new $classname( );

Nous pouvons ensuite passer à la création en mémoire du premier contrôleur qui devient ensuite utilisable. Lorsque nous n’avons qu’un contrôleur, et c’est souvent le cas dans la partie publique Frontend, les instructions suivantes suffisent :

$controller = new HalloController();
$controller->execute( JRequest::getVar(‘task’));

Les instructions destinées au composant s’écrivent sous la forme suivante :

index.php?option=com_ hallo&task=Tâche (save, edit, new, ...)

Elles doivent être intégrées à l’adresse URL. La ligne de l’exemple vérifie s’il y a des données à lire.

$controller->redirect();

Souvent, le contrôleur doit retransmettre la demande à une autre page, par exemple pour la sauvegarde des données. C’est la raison d’être de la dernière instruction.

15.1.3 Le contrôleur (/component/com_hallo/controller.php)

Notre composant est volontairement simple. Son contrôleur n’a rien d’autre à faire que l’affichage des données. Nous n’avons besoin d’aucun modèle de données et d’une seule méthode d’affichage display() (voir Listing 15.2).

<?php
jimport(‘joomla.application.component.controller’);
class HalloController extends JController {
  function display(){
    parent::display();
  }
}
?>

Listing 15.2 : /component/com_hallo/controller.php

Nous décidons du nom et de la présentation de la vue dans l’appel à la méthode display(). Vous verrez le résultat des variantes d’affichage lorsque vous créerez par exemple un nouvel élément de menu. Notre composant simplifié n’utilise que la présentation standard.

Élément de menu pour le composant com_hallo

Figure 15.2 Élément de menu pour le composant com_hallo.

15.1.4 La vue (/component/com_hallo/views/hallo/views.html.php)

Et voici pour terminer notre vue standard (voir Listing 15.3).

<?php
jimport( ‘joomla.application.component.view’);
class HalloViewHallo extends JView{
  function display($tpl = null){
    $greeting = « Salut tout le monde!";
    $this->assignRef( ‘greeting’, $greeting );
    parent::display($tpl);
  }
}
?>

Listing 15.3 : /component/com_hallo/views/hallo/views.html.php

La vue, c’est-à-dire la présentation, reçoit en temps normal des données provenant du modèle, puis les met en forme et les envoie en direction du template.

$greeting = « Salut tout le monde!";
$this->assignRef( ‘greeting’, $greeting );
parent::display($tpl);

Dans notre premier exemple, le modèle est inutilisé puisque nous affectons une valeur littérale à la variable nommée $greeting. Elle pourrait tout à fait recevoir le résultat d’une requête complexe auprès d’une base de données. La méthode assignRef() permet de transmettre le contenu de la variable et son nom au template. Enfin l’instruction suivante passe le contrôle au template :

parent::display($tpl);

15.1.5 Le template (/component/com_hallo/views/hallo/tmpl/ default.php)

Nous arrivons enfin à notre template standard. Son nom est toujours default.php. Dans son format le plus simple, il se présente comme ceci (voir Listing 15.4).

defined(‘_JEXEC’) or die(‘Restricted access’); ?>
<h1><?php echo $this->greeting; ?></h1>

Listing 15.4 : /component/com_hallo/views/hallo/tmpl/default.php

15.1.6 Le résultat visible

Si vous accédez à votre site public et demandez l’affichage de l’élément, le résultat n’est pas spectaculaire (voir Figure 15.3) :

Affichage du composant minimal

Figure 15.3 Affichage du composant minimal.

15.1.7 L’installation du composant

Il suffit de réunir tous les fichiers de la structure de sous-dossiers dans un fichier paquetage compressé au format zip. Ce fichier devient ensuite installable dans Joomla!. Les fichiers de la partie publique Frontend du composant /component/com_hallo doivent être réunis dans un sous-dossier nommé site. La partie administrative, c’est-à-dire /com_hallo/administrator/component doit être placée dans un sous-dossier nommé admin. Il faut enfin ajouter un fichier XML qui décrit les différents fichiers et qui doit porter le nom du composant, c’est-à-dire ici hallo.xml (voir Listing 15.5).

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install 
SYSTEM "http://dev.joomla.org/xml/1.5/componentinstall.dtd">
<install type="component" version="1.5.0">
<name>Hallo</name>
<creationDate>November</creationDate>
<author>Personne</author>
<authorEmail>moi@example.org</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<version>Component Version String</version>
<description>Description du composant ...</description>
<!-- Site Main File Copy Section -->
<files folder="site">
<filename>index.html</filename>
<filename>hallo.php</filename>
<filename>controller.php</filename>
<filename>views/index.html</filename>
<filename>views/hallo/index.html</filename>
<filename>views/hallo/view.html.php</filename>
<filename>views/hallo/tmpl/index.html</filename>
<filename>views/hallo/tmpl/default.php</filename>
</files>
<administration>
<!-- Administration Menu Section -->
<menu>Salut le monde !</menu>
<!-- Administration Main File Copy Section -->
<files folder="admin">
<!-- Site Main File Copy Section -->
<filename>index.html</filename>
<filename>admin.hallo.php</filename>
</files>
</administration>
</install>

Listing 15.5 : hallo.xml

Soyez bien attentif lorsque vous créez votre fichier Zip. La fi gure suivante montre où se placer pour créer le Zip sans produire de premier niveau inutile. Le fichier doit porter le nom com_hallo.zip (voir Figure 15.4) :

Création du paquetage d’installation du composant

Figure 15.4 Création du paquetage d’installation du composant.

Vous pouvez maintenant procéder à l’installation depuis Joomla!.

15.1.8 Conclusion

Le composant minimal que nous venons de créer est facile à maintenir, à enrichir et simple à analyser. Au premier regard, les nombreux petits fichiers peuvent rendre perplexe, mais ce n’est qu’une impression vite estompée. En effet, chaque fichier contient relativement peu de code source, ce qui permet de bien garder le contrôle des choses. C’est exactement cet effet que veut promouvoir le concept MVC.

Si vous avez besoin de produire un template plus sophistiqué, il suffit de remplacer par le code source de votre template les fichiers de la partie Vue (revoyez le Chapitre 13 à la section 13.3.8).

Avant de plonger dans un composant trop complexe, plions-nous à la tradition qui consiste à choisir comme premier programme complet un programme qui se contente d’afficher un petit message de bienvenue du style « Bonjour tout le monde ! » (« Hello world » en anglais et « Hallo Welt » en allemand). Les composants se répartissent en composants de partie publique Frontend et composants d’administration Backend. Les résultats des premiers sont visibles par les visiteurs alors que les autres ne servent qu’à l’administration du site, notamment celle de la partie publique. Vous pouvez reconnaître le type du composant à la manière dont l’adresse de la page correspondante est écrite :L’adresse URL suivante :http://localhost/joomla150/index.php?option=com_contactfait appel à un composant de la partie publique appelé com_contact. Si nous plongeons dans les dossiers de Joomla!, nous trouverons dans le sous-dossier [CheminJoomla]/components toute une série de composants, parmi lesquels ce fameux com_contact (voir Figure 15.1).Figure 15.1 Le sous-dossier des composants de Joomla!Pour chaque dossier de composants, est créé un certain nombre de sous-dossiers. Ils contiennent des fichiers qui incarnent les constituants de l’approche MVC.15.1.1 Un lieu de résidence pour l’exempleTout composant possède son dossier unique. Voici comment Joomla! trouve son chemin pour atteindre le composant :Joomla! analyse la valeur transmise dans l’adresse URL : /index.php?option=com_hallo.Il cherche dans le tableau des composants s’il trouve un composant nommé com_hallo.Il cherche ensuite un sous-dossier portant le nom com_hallo.Dans ce sous-dossier il cherche un fichier appelé hallo.php.Il exécute le contenu de ce fichier.Pour que l’exécution soit correcte, plusieurs fichiers sont nécessaires :hallo.php : le point d’entrée fonctionnel du composant ;controller.php : le module de contrôle ;views/hallo/view.html.php : la présentation qui transmet les données au template ;views/hallo/tmpl/default.php : un modèle par défaut qui est remplacé par les définitions du modèle en vigueur ou qui est utilisé tel quel par défaut ;hallo.xml : le fichier XML utilisé par l’installateur pour connaître le paquetage du composant,où il doit être installé et qui en est responsable.Certains d’entre vous auront envie de tourner les talons pour se réfugier dans le douillet monde chaotique de Joomla! 1.0. Résistez ! Venez découvrir ce nouveau monde !Pour voir le résultat, vous pouvez immédiatement installer le paquetage du composant com_hallo.zip via l’installateur de Joomla!. Pensez à créer un élément de menu pour afficher le résultat. Après l’installation, tous les fichiers sont dans les bons sous-dossiers et vous pouvez consulter le texte source tout en lisant la suite.15.1.2 Le point de départ (/component/com_hallo/hallo.php)C’est ce fichier qui est exécuté d’abord, lorsque vous fournissez l’adresse URL suivante :http://localhost/joomla150/index.php?option=com_hello&amp;view=helloou plus simplement lorsque vous sélectionnez l’élément de menu que vous y avez associé. Le résultat n’est pas décoiffant. Vous voyez seulement apparaître le message de bienvenue dans la partie centrale de la fenêtre.Étudions le code source de ce fichier (voir Listing 15.1).&lt;?php// Accès direct interditdefined(‘_JEXEC’) or die(‘Restricted access’);// Lecture du contrôleur primairerequire_once (JPATH_COMPONENT.DS.’controller.php’);// Définition d’un autre contrôleur$classname = ‘HalloController’.$controller;$controller = new $classname( );// Chercher si des paramètres sont fournis (Requests)$controller-&gt;execute( JRequest::getVar(‘task’));// Redirection dans le contrôleur$controller-&gt;redirect();?&gt;Listing 15.1 : /component/com_hallo/hallo.phpVoyons cela en détail.defined(‘_JEXEC’) or die(‘Restricted access’);La première ligne est un test de sécurité. Elle vérifie que l’exécution des instructions a été demandée par Joomla!. Si le script a été appelé directement, il est interrompu immédiatement via la fonction die().require_once (JPATH_COMPONENT.DS.’controller.php’);Nous procédons ensuite à l’appel du premier contrôleur. Il est désigné par le chemin d’accès absolu JPATH_COMPONENT (components/com_hallo). Le suffixe DS est le caractère servant de séparateur dans les chemins d’accès en vigueur sur le système d’exploitation concerné. Vous savez que sous Windows, les séparateurs des chemins d’accès sont des barres obliques inverses (\) alors que sous Unix ce sont des barres obliques directes (/). Joomla! gère automatiquement cette divergence.$classname = ‘HalloController’.$controller;$controller = new $classname( );Nous pouvons ensuite passer à la création en mémoire du premier contrôleur qui devient ensuite utilisable. Lorsque nous n’avons qu’un contrôleur, et c’est souvent le cas dans la partie publique Frontend, les instructions suivantes suffisent :$controller = new HalloController();$controller-&gt;execute( JRequest::getVar(‘task’));Les instructions destinées au composant s’écrivent sous la forme suivante :index.php?option=com_ hallo&amp;task=Tâche (save, edit, new, ...)Elles doivent être intégrées à l’adresse URL. La ligne de l’exemple vérifie s’il y a des données à lire.$controller-&gt;redirect();Souvent, le contrôleur doit retransmettre la demande à une autre page, par exemple pour la sauvegarde des données. C’est la raison d’être de la dernière instruction.15.1.3 Le contrôleur (/component/com_hallo/controller.php)Notre composant est volontairement simple. Son contrôleur n’a rien d’autre à faire que l’affichage des données. Nous n’avons besoin d’aucun modèle de données et d’une seule méthode d’affichage display() (voir Listing 15.2).&lt;?phpjimport(‘joomla.application.component.controller’);class HalloController extends JController { function display(){ parent::display(); }}?&gt;Listing 15.2 : /component/com_hallo/controller.phpNous décidons du nom et de la présentation de la vue dans l’appel à la méthode display(). Vous verrez le résultat des variantes d’affichage lorsque vous créerez par exemple un nouvel élément de menu. Notre composant simplifié n’utilise que la présentation standard.Figure 15.2 Élément de menu pour le composant com_hallo.15.1.4 La vue (/component/com_hallo/views/hallo/views.html.php)Et voici pour terminer notre vue standard (voir Listing 15.3).&lt;?phpjimport( ‘joomla.application.component.view’);class HalloViewHallo extends JView{ function display($tpl = null){ $greeting = « Salut tout le monde!"; $this-&gt;assignRef( ‘greeting’, $greeting ); parent::display($tpl); }}?&gt;Listing 15.3 : /component/com_hallo/views/hallo/views.html.phpLa vue, c’est-à-dire la présentation, reçoit en temps normal des données provenant du modèle, puis les met en forme et les envoie en direction du template.$greeting = « Salut tout le monde!";$this-&gt;assignRef( ‘greeting’, $greeting );parent::display($tpl);Dans notre premier exemple, le modèle est inutilisé puisque nous affectons une valeur littérale à la variable nommée $greeting. Elle pourrait tout à fait recevoir le résultat d’une requête complexe auprès d’une base de données. La méthode assignRef() permet de transmettre le contenu de la variable et son nom au template. Enfin l’instruction suivante passe le contrôle au template :parent::display($tpl);15.1.5 Le template (/component/com_hallo/views/hallo/tmpl/ default.php)Nous arrivons enfin à notre template standard. Son nom est toujours default.php. Dans son format le plus simple, il se présente comme ceci (voir Listing 15.4).defined(‘_JEXEC’) or die(‘Restricted access’); ?&gt;&lt;h1&gt;&lt;?php echo $this-&gt;greeting; ?&gt;&lt;/h1&gt;Listing 15.4 : /component/com_hallo/views/hallo/tmpl/default.php15.1.6 Le résultat visibleSi vous accédez à votre site public et demandez l’affichage de l’élément, le résultat n’est pas spectaculaire (voir Figure 15.3) :Figure 15.3 Affichage du composant minimal.15.1.7 L’installation du composantIl suffit de réunir tous les fichiers de la structure de sous-dossiers dans un fichier paquetage compressé au format zip. Ce fichier devient ensuite installable dans Joomla!. Les fichiers de la partie publique Frontend du composant /component/com_hallo doivent être réunis dans un sous-dossier nommé site. La partie administrative, c’est-à-dire /com_hallo/administrator/component doit être placée dans un sous-dossier nommé admin. Il faut enfin ajouter un fichier XML qui décrit les différents fichiers et qui doit porter le nom du composant, c’est-à-dire ici hallo.xml (voir Listing 15.5).&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/componentinstall.dtd"&gt;&lt;install type="component" version="1.5.0"&gt;&lt;name&gt;Hallo&lt;/name&gt;&lt;creationDate&gt;November&lt;/creationDate&gt;&lt;author&gt;Personne&lt;/author&gt;&lt;authorEmail&gt;moi@example.org&lt;/authorEmail&gt;&lt;authorUrl&gt;http://www.example.org&lt;/authorUrl&gt;&lt;copyright&gt;Copyright Info&lt;/copyright&gt;&lt;license&gt;License Info&lt;/license&gt;&lt;version&gt;Component Version String&lt;/version&gt;&lt;description&gt;Description du composant ...&lt;/description&gt;&lt;!-- Site Main File Copy Section --&gt;&lt;files folder="site"&gt;&lt;filename&gt;index.html&lt;/filename&gt;&lt;filename&gt;hallo.php&lt;/filename&gt;&lt;filename&gt;controller.php&lt;/filename&gt;&lt;filename&gt;views/index.html&lt;/filename&gt;&lt;filename&gt;views/hallo/index.html&lt;/filename&gt;&lt;filename&gt;views/hallo/view.html.php&lt;/filename&gt;&lt;filename&gt;views/hallo/tmpl/index.html&lt;/filename&gt;&lt;filename&gt;views/hallo/tmpl/default.php&lt;/filename&gt;&lt;/files&gt;&lt;administration&gt;&lt;!-- Administration Menu Section --&gt;&lt;menu&gt;Salut le monde !&lt;/menu&gt;&lt;!-- Administration Main File Copy Section --&gt;&lt;files folder="admin"&gt;&lt;!-- Site Main File Copy Section --&gt;&lt;filename&gt;index.html&lt;/filename&gt;&lt;filename&gt;admin.hallo.php&lt;/filename&gt;&lt;/files&gt;&lt;/administration&gt;&lt;/install&gt;Listing 15.5 : hallo.xmlSoyez bien attentif lorsque vous créez votre fichier Zip. La fi gure suivante montre où se placer pour créer le Zip sans produire de premier niveau inutile. Le fichier doit porter le nom com_hallo.zip (voir Figure 15.4) :Figure 15.4 Création du paquetage d’installation du composant.Vous pouvez maintenant procéder à l’installation depuis Joomla!.15.1.8 ConclusionLe composant minimal que nous venons de créer est facile à maintenir, à enrichir et simple à analyser. Au premier regard, les nombreux petits fichiers peuvent rendre perplexe, mais ce n’est qu’une impression vite estompée. En effet, chaque fichier contient relativement peu de code source, ce qui permet de bien garder le contrôle des choses. C’est exactement cet effet que veut promouvoir le concept MVC.Si vous avez besoin de produire un template plus sophistiqué, il suffit de remplacer par le code source de votre template les fichiers de la partie Vue (revoyez le Chapitre 13 à la section 13.3.8).
Fichier attachéTaille
com_hallo.zip2.88 Ko

0 commentaires

Publier un nouveau commentaire

  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <br><pre>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plus d'informations sur les options de formatage