L'affichage
- un système de templates
- un template par défaut
- des états et des layouts
- les variables disponibles pour l'affichage
- Inclure des fichiers dans un template
- Faire des liens internes
Un système de templates
Mtweb propose un système de templates. Les templates sont dans le répertoire :
app/out
Dans ce répertoire, chaque dossier est un template.
Le template default par exemple est le template par défaut, fourni avec mtweb. C'est un template très basique. Si vous voulez modifier l'affichage (le code HTML généré, les fichiers css, js, les images...) vous pouvez par exemple modifier les fichiers de ce template. Mais vous pouvez aussi créer un nouveau template (dans un nouveau dossier du répertoire out), et le sélectionner dans l'administration du site.
Un template par défaut
Si vous créez un nouveau dossier (par exemple mon_template) dans le répertoire out, ce template deviendra accessible dans l'administration et vous pourrez le selectionner. Ce faisant, même si votre dossier est vide, le site continuera à avoir un affichage. C'est parce qu'un template par défaut lui fournira les fichiers manquants (autrement dit tous si votre template est vide).
C'est le template default qui est configuré comme template par défaut. Vous pouvez changer le template par défaut en le précisant dans le fichier :
mw/app/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
...
<config>
<default_out>default</default_out>
...
</config>
...
</config>
Pour faire un nouveau template, vous pouvez par exemple faire une copie intégrale du dossier default dans un nouveau dossier et faire vos modifications dedans. Mais vous pouvez aussi ne mettre dans votre dossier de template que les fichiers que vous voulez modifier par rapport au template par défaut.
Des états et des layouts
Mtweb fonctionne sur un principe d'état. Si vous allez par exemple dans l'administration du site et que vous allez sur l'interface d'ajout d'un utilisateur, l'URL sera la suivante :
index.php?e=admin/users/add
C'est le paramètre GET de nom e qui précise l'état de l'application. Un état est un ensemble de trois informations qui permettent à mtweb de savoir quoi faire :
- quelle action ?
- dans quel contrôleur ?
- dans quel module ?
Dans notre exemple, c'est l'action add du contrôleur users dans le module admin qui est exécutée.
→ plus d'infos sur le traitement des actions
Dans un template, ce sont les fichiers de layout qui vont permettre de préciser quels fichiers doivent être utilisés pour le rendu des actions.
Dans un template, les fichiers de layout sont des fichiers XML, dans le dossier :
layouts
Les fichiers de layouts sont répartis par modules et portent leur nom. Par exemple le layout du module admin :
layouts/admin.xml
Contient le code suivant :
<?xml version="1.0" encoding="UTF-8"?>
<layout>
<admin page="admin.php">
<index content="views/admin/index.php" />
<users>
<index content="views/admin/users/index.php" />
<add content="views/admin/users/add.php" />
<edit content="views/admin/users/edit.php" />
</users>
</admin>
</layout>
L'arborescence des balises reprend la structure des états en module / contrôleur / action, et leur associe des attributs page et content, qui désignent respectivement le gabarit général à utiliser et le contenu à insérer dans ce gabarit.
Dans notre exemple, si on regarde ce fichier de layout, le contenu pour l'état admin/users/add est donc fourni par le fichier :
views/admin/users/add.php
Les attributs page et content sont hérités dans les balises filles. La balise de notre exemple ne contient par exemple pas d'attribut page, mais la balise du module, la balise admin définie, elle, un attribut page, qui est hérité dans ses balises filles et c'est donc le fichier :
admin.php
Qui sert de gabarit général à la page d'ajout d'un utilisateur.
Si cette action précise avait nécessité un gabarit dédié, la balise add aurait pu définir elle-même un attribut page, qui aurait alors pris le dessus sur la valeur héritée :
<add page="mon_gabarit.php" content="views/admin/users/add.php" />
Dans les fichiers de layout, les chemins des fichiers dans les attributs page et content sont relatifs par rapport au dossier du template.
Les variables disponibles pour l'affichage
Une action peut déclarer des variables et les rendre disponibles pour l'affichage. Dans un fichier de template, ces variables sont alors accessibles via le tableau associatif :
$this->out
note : mtweb fourni une fonction debug, qui fait simplement un print_r dans une balise html <pre>. Lors du développement d'un fichier d'affichage, vous pouvez vous faire une idée des variables disponibles en y insérant ce code :
<?php debug($this->out); ?>
Inclure des fichiers dans un template
Toutes requêtes se faisant sur le même fichier index.php, vous pouvez, dans un fichier de template, inclure d'autres fichiers du template en utilisant leur chemin relatif au fichier index.php :
require "app/out/mon_template/chemin/fichier.php";
Mais vous pouvez aussi utiliser la méthode out_file sur $this :
require $this->out_file("chemin/fichier.php");
Cette méthode permet d'inclure des fichiers qui ne se trouvent pas forcément dans votre template mais qui peuvent être définis dans le template par défaut (ou dans les fichiers de template fournis par un plugin).
Le chemin passé en paramètre à cette méthode est relatif par rapport au dossier du template.
Faire des liens internes
L'objet $this fourni une méthode url pour générer des liens vers d'autres états de l'application :
$this->url($etat)
$etat est une chaine de caractère qui peut avoir l'une des formes suivantes :
"<module>/<contrôleur>/<action>"
"<module>/<contrôleur>"
"<module>"
Par exemple pour ajouter un lien vers la page d'administration du site :
<a href="<?php echo $this->url("admin"); ?>">Administration du site</a>
Ou pour renseigner l'action d'un formulaire sur votre nouvelle fonctionnalité :
<form method="post" action="<?php echo $this->url("mon_module/mon_controleur/mon_action"); ?>">