Page 1 of 1

Template de menu

Posted: Fri Sep 18, 2009 11:06 am
by Xarkam
Bonjour, je suis actuellement occupé à codé un gabarit de menu pour avoir une génération de liste dans ce sens:

Code: Select all

<ul>
    <li><a>lien menu principale</a></li>
</ul>
<ul>
    <li><a>Lien menu principale</a>
    <ul>
        <li><a>Lien Sous menu</a>
        <li><a>Lien Sous menu</a>
    </ul>
    </li>
</ul>
<ul>
    <li><a>lien menu principale</a></li>
</ul>
Le code que j'ai repris et modifié me donne presque le rendu voulu, mais il me manque le fermant pour la partie menu principale.
J'avoue ne pas trouver ou placer le fermant pour chaque liste principale.
Ca me génère ce html

Code: Select all

<ul>
    <li><a>lien menu principale</a></li>
<ul>
    <li><a>Lien menu principale</a>
    <ul>
        <li><a>Lien Sous menu</a>
        <li><a>Lien Sous menu</a>
    </ul>
    </li>
<ul>
    <li><a>lien menu principale</a></li>
Voici le code

Code: Select all

{if $count > 0}
{foreach from=$nodelist item=node}
{if $node->depth > $node->prevdepth}
{repeat string='<ul id="sub-nav" style="display:inline;">' times=$node->depth-$node->prevdepth}
		<li style="display: inline;"><a href="{$node->url}"{if $node->target ne ""} target="{$node->target}"{/if}>{$node->menutext}</a></li>
		{elseif $node->depth < $node->prevdepth}
            {repeat string="</li></ul></li></ul>" times=$node->prevdepth-$node->depth}
        {elseif $node->index > 0}</li>
        {elseif $node->depth == 1}</ul>
        {/if}
        {if $node->depth == 1}
        <ul><li><a
        {else}
        <li><a {/if}{if $node->type != 'sectionheader' and $node->type != 'separator'}href="{$node->url}/" {if $node->accesskey != ''}accesskey="{$node->accesskey}" {/if}{if $node->tabindex != ''}tabindex="{$node->tabindex}" {/if}{if $node->titleattribute != ''}title="{$node->titleattribute}"{/if}{if $node->target ne ""} target="{$node->target}"{/if}><dfn>{$node->hierarchy}: </dfn>{$node->menutext}</a>
{elseif $node->type == 'sectionheader'}><dfn>{$node->hierarchy}: </dfn>{$node->menutext}</a>
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
	</ul>
{/if}
Si quelqu'un à une idée.

Merci.

Re: Template de menu

Posted: Tue Sep 22, 2009 1:56 pm
by Pierre M.
Xarkam wrote: ...Le code que j'ai repris et modifié me donne presque le rendu voulu, mais il me manque le fermant pour la partie menu principale.
J'avoue ne pas trouver ou placer le fermant pour chaque liste principale...
Le code "repris" place-t-il bien ce ? Si oui, vous savez où vous avez enlevé le nécessaire par votre modification, non ?

Pierre M.

Re: Template de menu

Posted: Mon Sep 28, 2009 11:03 am
by Xarkam
Bonjour, oui le code repris place bien le mais comme ceci:

Code: Select all

<ul id="primary-nav">
     <li>menu item 1</li>
     <li>menu item 2</li>
     <li>menu item 3</li>
     <li>menu item 4</li>
</ul>

Re: Template de menu

Posted: Mon Sep 28, 2009 7:18 pm
by Jean le Chauve
Xarkam wrote: Bonjour, oui le code repris place bien le mais comme ceci:

Code: Select all

<ul id="primary-nav">
     <li>menu item 1</li>
     <li>menu item 2</li>
     <li>menu item 3</li>
     <li>menu item 4</li>
</ul>
Bin, c'est correct. Tu dois plutôt regarder lorsque tu es sur une page enfant.
Tu as plutôt un problème de savoir comment on imbrique une sous liste.
Voilà ce que tu voudrais

Code: Select all

<ul>
    <li><a>lien menu principale</a></li>
</ul>
<ul>
    <li><a>Lien menu principale</a>
    <ul>
        <li><a>Lien Sous menu</a>
        <li><a>Lien Sous menu</a>
    </ul>
    </li>
</ul>
<ul>
    <li><a>lien menu principale</a></li>
</ul>
Il manque des fermetures
Voici le code correct :

Code: Select all

<ul>
    <li><a>lien menu principale</a></li>
</ul>
<ul>
    <li><a>Lien menu principale</a>
    <ul>
        <li><a>Lien Sous menu</a></li>
        <li><a>Lien Sous menu</a></li>
    </ul>
    </li>
</ul>
<ul>
    <li><a>lien menu principale</a></li>
</ul>

Re: Template de menu

Posted: Tue Sep 29, 2009 7:28 pm
by Xarkam
En fait j'ai du mal à comprendre comment fonctionne la génération des listes.
je vais à tâtons mais pas facile.

Je vais reprendre le dev dans quelque jours et je regarde ca.

Re: Template de menu

Posted: Mon Jan 11, 2010 9:43 am
by Xarkam
Bonjour, après un arrêt de 3 mois, j'ai repris le dev de mon template de menu.
j'ai très bien avancé car j'ai le rendu voulu à un détail prêt que je n'arrive pas à résoudre et ce malgré le sujet que j'ai trouvé sur ce forum (http://forum.cmsmadesimple.org/index.php?topic=38483.0).

J'ai donc mon menu principale avec des sous menu pour chaque item du menu.
Mon soucis c'est que j'aimerais bien définir une classe différente pour le dernier item de chaque sous menu.

Je vous met mon code histoire de vous rendre compte de mon avancée dans la compréhension de la génération des menu dans cmsms.

Code: Select all

{if $count > 0}
<!-- MENU START -->
<div class="menu">
<ul>

{* DEBUT DE BOUCLE *}
{foreach from=$nodelist item=node name='menu'} 
  {assign var='last' value='second'}
  {if $smarty.foreach.menu.last and $node->depth > $node->prevdepth}
    {assign var='last' value='lastsecond'}
  {/if}
  {if $node->depth > $node->prevdepth}
    {repeat string="<!--[if lte IE 6]><table><tr><td><![endif]-->
    <ul>" times=$node->depth-$node->prevdepth} {* UL Ovrant pour les sous menu *}
  {elseif $node->depth < $node->prevdepth}
    {repeat string="</ul>" times=$node->prevdepth-$node->depth} {* UL Fermant pour les sous menu *}
    <!--[if lte IE 6]></td></tr></table></a><![endif]-->
    </li>
  {elseif $node->index > 0}
    </li>
  {/if}

  {assign var='last2' value='first'}
  {if $node->extra1 == '1'}
    {assign var='last2' value='firstorange'}
  {/if}

  {if $node->parent == true}
    <li class="{$last2}"><a href="{$node->url}"{if $node->target ne ""} target="{$node->target}"{/if}><b>{$node->menutext}</b><!--[if gte IE 7]><!--></a><!--<![endif]-->
  {elseif $node->type == 'sectionheader'}
    <li class="{$last2}"><a href="javascript:void(0)"><b>{$node->menutext}</b><!--[if gte IE 7]><!--></a><!--<![endif]-->
  {elseif $node->type == 'separator'}
    <li style="list-style-type: none;"> <hr class="separator" />
  {elseif $smarty.foreach.menu.last == true}
    <li class="firstred"><a href="{$node->url}"{if $node->target ne ""} target="{$node->target}"{/if}><b>{$node->menutext}</b></a></li>
  {else}
    <li class="{$last}"><a href="{$node->url}"{if $node->target ne ""} target="{$node->target}"{/if}><div class="border">{$node->menutext}</div></a>
  {/if}
{/foreach}
{* FIN DE BOUCLE *}

{repeat string="</ul><!--[if lte IE 6]></td></tr></table></a><![endif]-->" times=$node->depth-1}</li>
</ul>
</div>
{/if}
<!-- MENU END -->
Donc, j'en suis là et je doit dire que je bloque sur cette histoire de dernier élément de sous menu.
Alors, si vous avec une solution, je suis preneur.

Merci.