Modifications publiées sur le svn (r478 et r479) :
Format des tags et passage de paramètres¶
L'utilisation de tags plus riches pouvant contenir des paramètres optionnels a conduit à un changement de leur syntaxe général : les tags passent d'un format du type #TAG à #TAG#. La présence du caractère de fin est obligatoire, elle permet de faciliter la reconnaissance de tags plus évolués.
Lorsque les macros associées aux tags acceptent des paramètres, ceux-ci peuvent être fournit dans le tag avec une sérialisation de type JSON. Par exemple, pour passer 2 paramètres width et height sur un tag 'MAP', la syntaxe complète du tag donne : #MAP:{"width":"300px", "height":"200px"}#
Le format est souple pour passer tout type de paramètres (y compris des structures complexes) et la notation est standart en reposant sur le système JSON. Néanmoins la syntaxe est assez stricte :
- Le nom du tag doit être suivi du séparateur ":" avant de spécifier des paramètres
- Les paramètres doivent toujours être transmis sous la forme d'une liste clé=>valeur
- L'usage des double-quotes est important (et ne peut être remplacer par des quotes simples)
Nouveaux tags¶
L'ensemble des tags existants doivent être rectifiés dans les modèles pour disposer du caractère '#' de fin.
2 nouveaux tags sont utilisables dans les modèles :
- #MAP# pour afficher la carte générale de tous les EPN (modèle homepage générale et GEPN)
- #MAP_GEPN# pour afficher la carte des EPN d'un GEPN (modèle homepage de GEPN uniquement)
Génération depuis les modèles et inclusions¶
La production des pages d'accueil depuis les modèles s'effectue toujours grâce aux fonctions du helper 'Homepage'. Les fonctions format###()_ permettent toujours de substituer les tags présents dans le modèle par les contenus dynamiques correspondants.
Par contre, une nouvelle fonction nommée print_template() peut se charger de l'affichage dans la page du modèle transformé. L'intérêt d'utiliser cette fonction au lieu d'un bête "echo" est sa capacité à effectuer des inclusions de code.
En effet, certains contenus dynamiques ne peuvent être obtenus qu'au travers de fonctions PHP qui écrivent directement le résultat au lieu de le retourner (ex: la fonction PHP include() ou la fonction Symfony include_component()). Il est alors impossible de les utiliser directement en substitution de tags.
Pour traiter ces cas là, les tags sont remplacés par un autre type de tags, dont la syntaxe est du type : <INCLUDE_...=...>
La nouvelle fonction print_template() va pouvoir repérer leur présence, effectuer l'affichage du texte jusqu'à ses balises, les traiter, puis reprendre l'affichage du texte jusqu'à la prochaine, etc...
La syntaxe est prévue pour être évolutive : la partie à gauche du "=" indique le type d'inclusion à effectuer, la partie droite précise les paramètres propre à l'inclusion.
Pour le moment le seul type d'inclusion pris en compte est le "INCLUDE_COMPONENT" qui lancera la commande Symfony équivalente. Pour celui-ci, les paramètres sont un triplet "module,action,options" (avec options encodé en JSON).