Définition :

D'après la page d'aide, {process_pagedata} permet de spécifier des données spécifiques à chaque page via smarty sans avoir à changer le gabarit de chaque page.

En clair cela signifie que vous pouvez assigner une donnée particulière à chaque page. Cette dernière vous permet alors d'adapter le contenu ou la structure de la page en question tout en conservant un seul et unique gabarit pour l'ensemble du site.

Mise en place :

Dans tous les cas, pour utiliser cette balise, vous devez inclure {process_pagedata} au plus haut de votre gabarit. Sans cela, vos données ne seront pas prises en compte lors de la génération de votre page.

Exemple 1 : Personnalisation du header

Partons du principe que le header de vos page contient une accroche spécifique à chaque page. Ce dernier est constitué de votre logo, du menu, de l'accroche et du fil d'ariane. Il est codé comme suit :

<div id="header">
{cms_selflink page="index" id="logo" text="Ma société"}
{menu template="menu" number_of_levels="1"}
<p id="accroche">Ici mon texte d'accroche</p>
<p id="breadcrumb">{breadcrumbs root="index"}</p>
</div> <!-- fin de header -->

En toute logique, vous aimeriez l'inclure dans votre gabarit. Or ce faisant, vous ne pourriez pas modifier l'accroche en fonction de votre page, à moins de créer un gabarit pour chaque page. C'est là qu'intervient {process_pagedata} en vous permettant de créer vos propres variables personnalisées.

Dans notre exemple, nous allons créer la variable accroche de valeur Texte personnalisé. Ouvrez l'onglet Options de votre page et insérez le code suivant dans le champs Balise smarty spécifique : {assign var="accroche" value="Texte personnalisé"}

Modifiez ensuite votre gabarit en remplaçant votre texte par votre variable comme ceci : <p id="accroche">{$accroche}</p>

Et lancer l'aperçu de votre page.

Vous visualiserez alors Texte personnalisé en lieu et place de Ici mon texte d'accroche.

Renseignez pour chaque page le champs Balise smarty spécifique et vous obtiendrez ainsi une accroche spécifique à chaque page.

Exemple 2 : Personnalisation du header (suite)

Reprenons l'exemple précédent et considérons que certaines pages ne contiennent pas d'accroche. Il suffirait de ne pas renseigner le champs Balise smarty spécifique pour obtenir le résultat escompté. Mais dans ce cas-là, les balises <p id="accroche"></p> seraient toujours présentes dans le code source.

Pour résoudre ce problème, il suffit de ne créer le paragraphe <p id="accroche"></p> que si la variable accroche existe. Pour cela, éditez le gabarit et rajoutez la condition suivante : {if $accroche}<p id="accroche">{$accroche}</p>{/if}

Ainsi, le paragraphe ne sera créé que si la variable est renseignée et qu'une accroche est à afficher.

Exemple 3 : Affichage contextuel

Partons du principe que notre site est divisé en deux colonnes. La première sert à l'affichage du contenu principal tandis que la seconde sert à afficher des articles et des informations relatives au contenu.

Afin de simplifier les choses, {content} ne correspond qu'au contenu de la colonne principal. La colonne secondaire est quant à elle entièrement paramétrée dans le gabarit dont voici le code de départ :

<div id="main"> {content} </div> 
<div id="sub">Ici mon affichage contextuel</div>

Dans le champs Balise smarty spécifique de nos page, nous allons créer une variable categorie de valeur produits ou services.

Les pages présentant les services se verront assigner : {assign var="categorie" value="services"}

Tandis que les pages présentant les produits auront : {assign var="categorie" value="produits"} Modifions maintenant notre gabarit pour qu'il affiche le contenu approprié en fonction de la catégorie à laquelle appartient la page :

<div id="sub">
{if $categorie=="produits"}
ici le contenu correspondant à la catégorie produits
{/if}
{if $categorie =="services"}
ici le contenu correspondant à la catégorie services
{/if}
</div>

Nous pouvons aller plus loin en affichant par exemple une série d'articles thématiques. Pour cela, il suffit de les classer en deux catégories et d'ajouter ces derniers dans notre colonne secondaire :

<div id="sub">
{if $categorie =="produits"}
ici le contenu correspondant à la catégorie produits
et les 3 derniers articles de la catégorie produit
{news pagelimit='3' category='produit'}
{/if}
{if $categorie =="services"}
ici le contenu correspondant à la catégorie services
et les 3 derniers articles de la catégorie service
{news pagelimit='3' category='service'}
{/if}
</div>