pour ce qui est de la séparation du travail d'un graphiste et du développeur php
phpTal http://phptal.org/ apporte une solution élégante.
le principe de base est simple
on n'ajoute au code html xhtml ou html5 un namespace qui définit des attribut supplémentaire sur les balises
et ce tout en gardant les valeur fournies par le designer
un exemple simple sur un un lien. le designer dans la page mets un lien vers une autre page cela lui permet de concevoir le site et le le rendre interactif même s'il n'est pas relié au données.
disons que j'ai une liste d'objet et que le lien m'ouvre un formulaire de modification d'un des élément de la liste. le designer va me fournir quelque chose comme
<a href="modifObject.html">Modifier l'objet</a>
avec éventuellement des attributs des id de la mise en forme etc.
pour que cela fonctionne avec l'appli php il faut que l'attribut href dépende du contenu des variable php de même que le texte dans la balise a
en utilisant un namespace on ne touche pas à la sémantique du html qui va rester la même. mais on va l'enrichir d'éléments qui pourront être utilisé par le moteur de template.
1 2 3
| <a href="modifObject.html"
tal:attributes="href object/getUrl"
tal:content="object/getTitle">Modifier l'objet</a> |
object étant l'objet php contenant les données.
l'avantage de cette solution est que l'enrichissement est non destructeur
ainsi la page html peut toujours être utilisé dans un site statique pour continuer à faire évoluer le design
cas simple me direz-vous alors voici la chose sur un tableau d'objet
supprimez dans ce code et vous aurez ce que fourni le designer
un tableau avec plusieurs lignes d'exemple.
la solution consiste à ajouter tal:replace="" sur toute les lignes sauf une.
cela indique au moteur de template qu'il doit remplacer ces lignes par rien
et sur une ligne utiliser la répétition sur le tableau d'objet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <table>
<thead>
<tr>
<th>Date de création</th>
<th>Objet du délit</th>
</tr>
</thead>
<tr tal:repeat="object myObjectList">
<td tal:content="object/getCreationDate">06/05/2010</td>
<td><a href="modifObject.html"
tal:attributes="href object/getUrl"
tal:content="object/getTitle">Modifier l'objet 1</a></td>
</tr>
<tr tal:replace="">
<td>05/05/2010</td>
<td><a href="modifObject.html">Modifier l'objet 2</a></td>
</tr>
<tr tal:replace="">
<td>04/05/2010</td>
<td><a href="modifObject.html">Modifier l'objet 3</a></td>
</tr>
</table> |
TAL est un système de template qui existe en jsp et asp il n'est pas propre à php
tout n'est pas parfait je déplore par exemple l'impossibilité spécifier et chaîner des filtre sur le texte sur un tal:content par exemple il serait intéressant de pouvoir faire
tal:content="value>toLowwer>upFirst"
qui prend la valeur de value la réduit en minuscule et lui met la première lettre en majuscule.
il n'y pas de syntaxe aussi simple pour y parvenir le | est utilisé pour des valeur alternative valeur 1 ou à défaut valeur 2
A+JYT
Partager