Evolution #109
ferméExtension des capacités des macros dans les modèles de pages
100%
Description
Les pages d'accueil sont générés à partir de modèles HTML pouvant comporter des macros du type #TAG. Celles-ci sont alors substituées par un contenu dynamique produit en PHP.
Pour que cela soit possible, une fonction PHP doit retourner le contenu généré qui prendra place dans le modèle. Il n'est donc pas possible que le contenu soit directement affiché dans la page, ce qui pose une limitation pour certains usages (ex des substitutions de type "include").
De plus les macros se limitent essentiellement à un nom de tag, sans permettre de réelle possibilité de personnalisation supplémentaire depuis le modèle.
On souhaite donc étendre le système de macros afin qu'il permette :- le passage de paramètres divers sur un tag
- la génération de contenu en affichage direct et non uniquement en retour de fonction
Mis à jour par Grégory MARIGOT - TEICEE il y a plus de 13 ans
- Statut changé de Nouveau à Résolu
- % réalisé changé de 0 à 100
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 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).
Mis à jour par Grégory MARIGOT - TEICEE il y a plus de 13 ans
- Version cible mis à ProxyEPN 2.1
Mis à jour par Grégory MARIGOT - TEICEE il y a environ 13 ans
- Statut changé de Résolu à Fermé