
Home
» Talus' Works » Talus' TPL » Documentation » Les Blocs » Lecture du Sujet » Page 1 | Forum Fermé - Sujet Fermé |
|
|
|
|
Bonjour à tous, Ah, voilà le sujet le plus intéressant (et le plus compliqué, soit dit en passant !) : les blocs. Ces petites choses vous permettent d'expliter des boucles dans les TPL. Au sommaire : Blocs, Blocs imbriqués, variables de blocs (et de blocs imbriqués, enfin, c'est la même chose), foreach... Let's get started ! Coté PHPEn fait, l'assignation de blocs est très simple, au coté PHP. Tout comme l'assignation de variables, car en fait, c'est la même méthode ! Pour cela, réferez vous à la méthode Talus_TPL::block() : Elle prend comme premier paramètre le nom du bloc (et de tous ses blocs parents ; par exemple, un bloc racine "grand_pere" aura comme nom... "grand_pere", alors que le bloc "parent", sous bloc de "grand_pere", aura pour nom "grand_pere.parent" (etc., sachant qu'il faut donner tous les blocs parents : par exemple, "grand_pere.parent.fils" donnera le bloc fils, sous bloc de parent, lui même sous bloc de grand_pere). En deuxième paramètre, elle prend soit un array de variables, comme la fonction $tpl->set(), soit le nom d'une variable, demandant ainsi l'utilisation d'un troisième parametre pour renseigner sa valeur. Si le deuxième paramètre est nul, et que le premier est un bloc racine, alors celui-ci est retourné. ATTENTION : Les blocs parents doivent déjà être déclarés, avant de déclarer un sous bloc à celui-ci ! ATTENTION : Un appel à Talus_TPL::block() équivaut à une seule instance pour un bloc ! Si vous souhaitez déclarer plusieurs variables pour un même bloc, tâchez de passez un array en parametre pour les variables ! ATTENTION : Les noms des blocs doivent être en minuscule ! Par exemple :
Code PHP
<?php
L'intêret des blocs est de pouvoir les utiliser dans une boucle while, for, ... A chaque appel de cette méthode, si le bloc n'existe pas, on lui créé une instance, sinon on lui rajoute de nouvelles données, pour une nouvelle ligne.
Code PHP
<?php
Ce n'était pas si compliqué, en fin de compte, si ? :p Coté TPLLes BlocsIci, y'a juste quelque changements. Tout d'abord, la balise pour les blocs est la suivante :
Code TPL
<block name="mon_bloc">...</block>
Ou, je pense que vous vous en doutez, mon_bloc est le nom du bloc. Si c'est un bloc racine, pas de soucis, mais pour les blocs imbriqués, vous n'avez besoin que de spécifier seulement le parent le plus proche, dans l'attribut "parent". Soit, en reprenant l'exemple de tout à l'heure :
Code TPL
<block name="root"> /* Bloc racine */
<block name="node" parent="root">
<block name="leaf" parent="node">
....
</block>
</block>
</block>
On peut également faire une action "alternative" : si le bloc ne peut s'executer (aucunes itérations, par exemple), vous pouvez utiliser la balise <blockelse /> (elle fonctionne comme le <else /> des conditions).
Code TPL
<block name="comments">
/* Affichage des commentaires... */
<blockelse />
Il n'y a pas de commentaires, soyez le premier à en poster un !
</block>
Et c'est la même chose pour les variables ! VariablesJe ne vais vous apprendre qu'une seule chose, qui diffère quelque peu des "simples" variables ; Ce sont les même balises, sauf que vous devez spécifier que le nom du bloc parent, suivi qu'un point puis du nom de la variable. Exemple (en reprenant l'exemple de tout à l'heure) :
Code TPL
/*
* Quelques blocs imbriqués...
*
* Pour imbriquer des blocs, il suffit de préciser dans le nom du bloc déclaré
* (dans le tpl) le nom du bloc parent.
*
* ... Même si celui-ci est lui-même issu d'une imbrication de blocs !
*/
<block name="root">
<div class="repeat">
Je suis un bloc "root" (je me repete pendant {root.SIZE_OF} tours), itération
n°{root.CURRENT}, et la variable {\CHOSE} vaut {root.CHOSE}.
<block name="node" parent="root">
<div class="repeat_again">
Je suis le bloc "node", un sous bloc de "root" (je me repete pendant
{node.SIZE_OF} tours), je suis itération n°{node.CURRENT}, et la variable
"{\BIDULE}" vaut {node.BIDULE}.
<if cond="{$node.FIRST} || {$node.LAST}">
C'est la <em>
<if cond="{$node.FIRST}">
première
<elseif cond="{$node.LAST}" />
dernière
</if>
</em> fois que vous me voyez.
</if>
<div class="again_more">
<block name="leaf" parent="node">
Je suis le bloc "leaf", un sous bloc de "node", et la valeur de
"{\leaf.TRUCMUCHE[{\$MACHIN}]}" vaut {leaf.TRUCMUCHE[{$MACHIN}]}.
</block>
</div>
</div>
</block>
</div>
</block>
Rien de bien compliqué, n'est-ce pas ? ;) Variables SpécialesIl existe quatres variables pré-définies par Talus' TPL::block(). Il s'agit des variables, déclarées à chaque instances, qui vous permettent de savoir si c'est la première occurence du bloc, la dernière, le nombre d'occurrence, et enfin l'occurence actuelle.
Code TPL
<block name="bloc">{bloc.FIRST}, {bloc.LAST}, {bloc.SIZE_OF}, et {bloc.CURRENT}</block>
Utile si vous voulez insérer quelque chose QUE à la première occurrence d'un bloc (ou sa dernière ; par exemple, c'est grâce à la variable FIRST que j'indique l'emplacement de la petite pub sur les forums ;) ), si vous voulez connaitre votre position (pour par exemple afficher quelque chose toutes les deux occurrences, ...), etc. Les ForeachsComme ce sont des boucles, autant parler des foreach. Ceux ci ont juste besoin d'un array (renseignés par les méthodes habituelles)... Et le reste s'effectue au coté TPL.
Code TPL
<foreach ary="{$MON_ARRAY}">
/* Comme vu au chapitre des variables : */
{KEY,MON_ARRAY} /* Affiche la clé actuelle de l'array choisi. */
{VALUE,MON_ARRAY} /* Affiche la valeur actuelle de l'array choisi. */
{KEY,$MON_ARRAY} /* Renvoi la clé actuelle de l'array choisi. */
{VALUE,$MON_ARRAY} /* Renvoi la valeur actuelle de l'array choisi. */
</foreach>
Vous pouvez aussi imbriquer vos foreach, et définir un alias !
Code TPL
<foreach ary="{$MON_ARRAY}" as="{$ARRAY}">
/* Comme vu au chapitre des variables : */
{KEY,ARRAY} /* Affiche la clé actuelle de l'array choisi. */
{VALUE,ARRAY} /* Affiche la valeur actuelle de l'array choisi. */
{KEY,$ARRAY} /* Renvoi la clé actuelle de l'array choisi. */
{VALUE,$ARRAY} /* Renvoi la valeur actuelle de l'array choisi. */
</foreach>
<foreach ary="{$MON_ARRAY}">
<foreach ary="{VALUE,$MON_ARRAY}" as="{$ARRAY}">
{KEY,ARRAY} /* Affiche la clé actuelle de l'array choisi. */
{VALUE,ARRAY} /* Affiche la valeur actuelle de l'array choisi. */
</foreach>
</foreach>
ATTENTION : Pour utiliser un foreach imbriqué, vous devez utiliser que les VALUE (les KEY ne contenant pas d'array, par principe : surtout que PHP en veut pas :p), et également utiliser un alias (as). Pour les autres foreach, vous pouvez l'utiliser... Si vous le souhaitez :). Quoique, l'utilité n'est là que si vous les imbriquez... Mais vous êtes roi dans votre code, vous faites ce que vous voulez ! ;) Vous pouvez aussi parcourir des arrays pluridimensionnels (type {ARRAY['une']['deux']}), et non pas que des arrays unidimensionnels ({ARRAY['uni']}) via l'instruction foreach. Attention, notez que l'attribut "as" est ici obligatoire ; vous pouvez aussi parcourir un array contenu dans VALUE, ça marche aussi.
Code TPL
<foreach ary="{$MON_ARRAY['cle'][0]}" as="{$ARRAY}">
/* Comme vu au chapitre des variables : */
{KEY,ARRAY} /* Affiche la clé actuelle de l'array choisi. */
{VALUE,ARRAY} /* Affiche la valeur actuelle de l'array choisi. */
{KEY,$ARRAY} /* Renvoi la clé actuelle de l'array choisi. */
{VALUE,$ARRAY} /* Renvoi la valeur actuelle de l'array choisi. */
</foreach>
Chapitre Précédent : Les Conditions Dernière édition le 27/12/2009, à 18:40, par Talus |
|
|
|
|
(Ajout d'une demande d'attention sur le fait que les noms des blocs doivent être en minuscule...) |
|
|
|
|
(Mise à jour pour Talus' TPL 1.7.0) |
| Forum Fermé - Sujet Fermé |