13.9.2 Layout::gen()
La méthode gen()
permet de lancer la génération du template après avoir
positionné les valeurs des balises à l'aide des méthodes set()
et
setBlockData()
.
13.9.2.1 Description
string gen ( void )
Le résultat est retourné sous la forme d'une chaîne de caractères.
13.9.2.1.1 Avertissements
Aucun.
13.9.2.2 Liste des paramètres
Aucun.
13.9.2.3 Valeur de retour
La méthode retourne une chaîne de caractère contenant le résultat de l'évaluation du template.
13.9.2.4 Erreurs / Exceptions
Aucune.
13.9.2.5 Historique
Aucun.
13.9.2.6 Exemples
- Exemple #1
Dans cet exemple, on va utiliser le mécanisme de template pour générer
dynamiquement des balises de blocs [BLOCK XXX]...[ENDBLOCK XXX]
.
Fichier de template MOVIES/Layout/movies.xml
:
<ul> [BLOCK MOVIES] <li> <p><span class="movie_title">[MOVIE_TITLE]</span> (<span class="movie_date">[MOVIE_DATE]</span>)</p> <p>Characters: <ul>[BLOCK [CHARACTERS]] <li>[CHARACTER]</li>[ENDBLOCK [CHARACTERS]] </ul> </p> </li> [ENDBLOCK MOVIES] </ul> EOF;
Contrôleur :
$layout = new Layout("MOVIES/Layout/movies.xml"); $layout->setBlockData( 'MOVIES', array( array( 'MOVIE_TITLE' => htmlspecialchars('Star Wars: A New Hope'), 'MOVIE_DATE' => '1977', 'CHARACTERS' => 'CHARACTERS_SW_A_NEW_HOPE' ), array( 'MOVIE_TITLE' => htmlspecialchars('Star Wars: The Empire Strikes Back'), 'MOVIE_DATE' => '1980', 'CHARACTERS' => 'CHARACTERS_SW_THE_EMPIRE_STRIKES_BACK' ), array( 'MOVIE_TITLE' => htmlspecialchars('Star Wars: Return of the Jedi'), 'MOVIE_DATE' => '1983', 'CHARACTERS' => 'CHARACTERS_SW_RETURN_OF_THE_JEDI' ) ) ); $layout->setBlockData( 'CHARACTERS_SW_A_NEW_HOPE', array( array( 'CHARACTER' => 'Chewbacca' ), array( 'CHARACTER' => 'Luke Skywalker' ), array( 'CHARACTER' => 'Han Solo' ) ) ); $layout->setBlockData( 'CHARACTERS_SW_THE_EMPIRE_STRIKES_BACK', array( array( 'CHARACTER' => 'Yoda' ), array( 'CHARACTER' => 'Boba Fett' ) ) ); $layout->setBlockData( 'CHARACTERS_SW_RETURN_OF_THE_JEDI', array( array( 'CHARACTER' => 'Emperor Palpatine' ), array( 'CHARACTER' => 'Wicket' ) ) ); print $layout->gen();
Le premier niveau de blocs [BLOCK MOVIES]
va dupliquer les chaînes
[BLOCK [CHARACTERS]]
pour donner de nouveau blocs
-
[BLOCK CHARACTERS_SW_A_NEW_HOPE]
, -
[BLOCK CHARACTERS_SW_THE_EMPIRE_STRIKES_BACK]
et -
[BLOCK CHARACTERS_SW_RETURN_OF_THE_JEDI
.
Ensuite, ces blocs [BLOCK CHARACTERS_SW_xxx]
sont évalués avec le contenu de
leur setBlockData('CHARACTERS_SW_xxx')
respectif.
Résultat :
<ul> <li> <p><span class="movie_title">Star Wars: A New Hope</span> (<span class="movie_date">1977</span>)</p> <p>Characters: <ul> <li>Chewbacca</li> <li>Luke Skywalker</li> <li>Han Solo</li> </ul> </p> </li> <li> <p><span class="movie_title">Star Wars: The Empire Strikes Back</span> (<span class="movie_date">1980</span>)</p> <p>Characters: <ul> <li>Yoda</li> <li>Boba Fett</li> </ul> </p> </li> <li> <p><span class="movie_title">Star Wars: Return of the Jedi</span> (<span class="movie_date">1983</span>)</p> <p>Characters: <ul> <li>Emperor Palpatine</li> <li>Wicket</li> </ul> </p> </li> </ul>
13.9.2.7 Notes
L'expansion des balises est faite dans l'ordre suivant :
- balise de bloc (e.g.
[BLOCK xxx]...[ENDBLOCK xxx]
) ; - balise conditionnelle (e.g.
[IF xxx]...[ENDIF xxx]
,[IFNOT xxx]...[ENDIF xxx]
) ; - balise d'internationalisation de texte (e.g.
[TEXT:xxx]
) ; - balise de clef atomique (e.g.
[xxx]
) définie via les méthodeseSet()
ouset()
; - balise de paramètre applicatif (si $action présent dans le constructeur).
- balise de référence d'image (e.g.
[IMG:xxx]
) ; - balise de zone (e.g.
[ZONE xxx]
) ; - balise de référence ou de code JavaScript (e.g.
[JS:REF]
,[JS:CODE]
) ; - balise de référence ou de code CSS (e.g
[CSS:REF]
,[CSS:CODE]
).