07/04/2018, 10:39:51
Plus précisément, je souhaite créer, dans la partie admin d'un événement CGCalendar, une liste déroulante des pages enfants d'une rubrique qui s'appelle "Projets".
Pour chaque page, il me faut son "id" et son "titre" pour pouvoir créer par ailleurs un lien avec {cms_selflink page=$idPage}.
Pour cela, je pourrais créer une balise utilisateur (UDT), mais j'ai des doutes sur la requête SQL à écrire pour obtenir les informations qu'il me faut.
Je tente donc d'utiliser le module {Navigator} avec un gabarit personnalisé pour me fournir une chaîne de caractères qui me permettra de créer un tableau associatif.
La doc Smarty m'indique que je dois obtenir de {Navigator} la partie de la chaîne en gras ci-dessous :
{assign var=foo value=['idPage1'=>'Titre page 1','idPage2'=>'Titre page 2']}
Mon arborescence de pages est celle-ci :
Projets
— Projets associatifs
—— Projet 1
—— Projet 2
—— Projet 3
— Projets éducatifs
—— Projet 4
—— Projet 5
—— Projet 6
[h]1. Ma méthode fonctionne quand je fournis moi-même la chaîne à ma variable Smarty[/h]
Le code suivant me permet de créer mon tableau associatif :
{assign var=tableau_pages value=['Projets associatifs'=>['29'=>'Projet 1','15'=>'Projet 2','28'=>'Projet 3'],'Projets éducatifs'=>['10'=>'Projet 4','33'=>'Projet 5','34'=>'Projet 6']]}
Puis, le code suivant me permet de créer ma liste d'options à partir de ma variable Smarty $tableau_pages :
{html_options name="m1_field_LienInterne" options=$tableau_pages selected=28}
J'obtiens bien le code html attendu :
<select name="m1_field_LienInterne">
<optgroup label="Projets associatifs">
<option value="29">Projet 1</option>
<option value="15">Projet 2</option>
<option value="28" selected="selected">Projet 3</option>
</optgroup>
<optgroup label="Projets éducatifs">
<option value="10">Projet 4</option>
<option value="33">Projet 5</option>
<option value="34">Projet 6</option>
</optgroup>
</select>
[h]2. Ma méthode ne fonctionne plus quand ma chaîne de caractères vient de Navigator[/h]
Mon appel au module Navigator avec mon gabarit personnalisé :
{cms_module module="Navigator" template="Dropdown Pages" number_of_levels=2 childrenof="projets"}
Note : À cette étape, depuis un autre module (ici CGCalendar), il faut appeler Navigator avec le code {cms_module module="Navigator" …} et non {Navigator …} sinon on a une page blanche.
Me retourne bien la chaîne attendue :
['Projets associatifs'=>['29'=>'Projet 1','15'=>'Projet 2','28'=>'Projet 3'],'Projets éducatifs'=>['10'=>'Projet 4','33'=>'Projet 5','34'=>'Projet 6']]
Ensuite, je veux créer mon tableau associatif avec le code suivant :
{assign var=tableau_pages value={cms_module module="Navigator" template="Dropdown Pages" number_of_levels=2 childrenof="projets"}}
Mais là, la chaîne retournée par Navigator n'est pas transformée en tableau associatif (Array) elle reste une chaîne (String).
Le code suivant :
{html_options name="m1_field_LienInterne" options=$tableau_pages selected=28}
Me retourne ce code html :
<select name="m1_field_LienInterne">
<option value="0">['Projets associatifs'=>['29'=>'Projet 1','15'=>'Projet 2','28'=>'Projet 3'],'Projets éducatifs'=>['10'=>'Projet 4','33'=>'Projet 5','34'=>'Projet 6']]</option>
</select>
Quelqu'un peut-il me dire pourquoi ma chaîne n'est pas transformée en tableau associatif quand elle arrive de Navigator alors qu'elle est identique que celle utilisée à l'étape 1 ?
Merci.
Pour chaque page, il me faut son "id" et son "titre" pour pouvoir créer par ailleurs un lien avec {cms_selflink page=$idPage}.
Pour cela, je pourrais créer une balise utilisateur (UDT), mais j'ai des doutes sur la requête SQL à écrire pour obtenir les informations qu'il me faut.
Je tente donc d'utiliser le module {Navigator} avec un gabarit personnalisé pour me fournir une chaîne de caractères qui me permettra de créer un tableau associatif.
La doc Smarty m'indique que je dois obtenir de {Navigator} la partie de la chaîne en gras ci-dessous :
{assign var=foo value=['idPage1'=>'Titre page 1','idPage2'=>'Titre page 2']}
Mon arborescence de pages est celle-ci :
Projets
— Projets associatifs
—— Projet 1
—— Projet 2
—— Projet 3
— Projets éducatifs
—— Projet 4
—— Projet 5
—— Projet 6
[h]1. Ma méthode fonctionne quand je fournis moi-même la chaîne à ma variable Smarty[/h]
Le code suivant me permet de créer mon tableau associatif :
{assign var=tableau_pages value=['Projets associatifs'=>['29'=>'Projet 1','15'=>'Projet 2','28'=>'Projet 3'],'Projets éducatifs'=>['10'=>'Projet 4','33'=>'Projet 5','34'=>'Projet 6']]}
Puis, le code suivant me permet de créer ma liste d'options à partir de ma variable Smarty $tableau_pages :
{html_options name="m1_field_LienInterne" options=$tableau_pages selected=28}
J'obtiens bien le code html attendu :
<select name="m1_field_LienInterne">
<optgroup label="Projets associatifs">
<option value="29">Projet 1</option>
<option value="15">Projet 2</option>
<option value="28" selected="selected">Projet 3</option>
</optgroup>
<optgroup label="Projets éducatifs">
<option value="10">Projet 4</option>
<option value="33">Projet 5</option>
<option value="34">Projet 6</option>
</optgroup>
</select>
[h]2. Ma méthode ne fonctionne plus quand ma chaîne de caractères vient de Navigator[/h]
Mon appel au module Navigator avec mon gabarit personnalisé :
{cms_module module="Navigator" template="Dropdown Pages" number_of_levels=2 childrenof="projets"}
Note : À cette étape, depuis un autre module (ici CGCalendar), il faut appeler Navigator avec le code {cms_module module="Navigator" …} et non {Navigator …} sinon on a une page blanche.
Me retourne bien la chaîne attendue :
['Projets associatifs'=>['29'=>'Projet 1','15'=>'Projet 2','28'=>'Projet 3'],'Projets éducatifs'=>['10'=>'Projet 4','33'=>'Projet 5','34'=>'Projet 6']]
Ensuite, je veux créer mon tableau associatif avec le code suivant :
{assign var=tableau_pages value={cms_module module="Navigator" template="Dropdown Pages" number_of_levels=2 childrenof="projets"}}
Mais là, la chaîne retournée par Navigator n'est pas transformée en tableau associatif (Array) elle reste une chaîne (String).
Le code suivant :
{html_options name="m1_field_LienInterne" options=$tableau_pages selected=28}
Me retourne ce code html :
<select name="m1_field_LienInterne">
<option value="0">['Projets associatifs'=>['29'=>'Projet 1','15'=>'Projet 2','28'=>'Projet 3'],'Projets éducatifs'=>['10'=>'Projet 4','33'=>'Projet 5','34'=>'Projet 6']]</option>
</select>
Quelqu'un peut-il me dire pourquoi ma chaîne n'est pas transformée en tableau associatif quand elle arrive de Navigator alors qu'elle est identique que celle utilisée à l'étape 1 ?
Merci.