Projet

Général

Profil

Actions

Evolution #109

fermé

Extension des capacités des macros dans les modèles de pages

Ajouté par Grégory MARIGOT - TEICEE il y a presque 13 ans. Mis à jour il y a plus de 12 ans.

Statut:
Fermé
Priorité:
Normal
Version cible:
Début:
14/06/2011
Echéance:
% réalisé:

100%

Temps estimé:
Version ProxyEPN:
2.0.0

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

Demandes liées 2 (0 ouverte2 fermées)

Lié à Evolution #87: Personnalisation de l'interface (générale + GEPN)FerméGrégory MARIGOT - TEICEE04/02/2011

Actions
Lié à Evolution #145: Module de gestion d'annoncesFerméGrégory MARIGOT - TEICEE06/12/2013

Actions

Mis à jour par Grégory MARIGOT - TEICEE il y a presque 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 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).

Mis à jour par Grégory MARIGOT - TEICEE il y a presque 13 ans

  • Version cible mis à ProxyEPN 2.1

Mis à jour par Grégory MARIGOT - TEICEE il y a plus de 12 ans

  • Statut changé de Résolu à Fermé
Actions

Formats disponibles : Atom PDF