Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
09/11/2012, 11:17:24
(Modification du message : 12/11/2012, 17:26:09 par elz64.)
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.11.2.1
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour,
Je ne trouve pas de doc sur comment faire un tpl de menu.
le tag {menu} n'est pas trop mal fichu mais je veux faire autre chose et maitriser la totalité des class et la structure (avec <nav> notamment).
Je veux appliquer ceci: berkhamsted-web-design.co.uk/2012/07/cmsms-menus-and-twitter-bootstrap/
mais en fait je ne vois pas où le faire ?
voila le haut du tpl perso:
Code : [== Indéfini ==]
{process_pagedata}
{strip} {* use strip to get rid of whitespace *}
{if !isset($get_title)}
{title assign='get_title'}
{/if}
{/strip}
{* With cms_lang_info we retrieve current language information, assign gives us $nls variable we can work with *}
{cms_lang_info assign='nls'}
{* using strip as we don't want useless whitespace, especially not before doctype *}
{/strip}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang='{$nls->htmlarea()}' dir='{$nls->direction()}' class='no-js'>
<head>
<meta name="title" content="{$get_title} - {sitename}" />
<meta name="copyright" content="{sitename}" />
<meta name="description" content="{$get_content|strip_tags|truncate:'150'|strip}" />
<meta name="keywords" content="{search action='keywords' count='15'}" />
<meta name="language" content="{$lang}" />
<meta name="url" content="{root_url}" />
<meta name="identifier-URL" content="{root_url}" />
<meta name="revised" content="{modified_date format="%a, %d %b %Y %H:%M:%S"}" />
<meta name="original-source" content="{if isset($canonical)}{$canonical}{elseif isset($content_obj)}{$content_obj->GetURL()}{/if}" />
<meta name='viewport' content='initial-scale=1.0 maximum-scale=1.0 user-scalable=no' />
<meta name='HandheldFriendly' content='true' />
{* Don't remove this! Metadata is entered in Site Admin/Global settings. *}
{metadata}
{* See in news detail template how cannonical url can be assigned from module *}
{if isset($canonical)}<link rel='canonical' href='{$canonical}' />{elseif isset($content_obj)}<link rel='canonical' href='{$content_obj->GetURL()}' />{/if}
<link href="uploads/Bootstrap00/css/bootstrap.css" rel="stylesheet">
<link href="uploads/Bootstrap00/css/bootstrap-responsive.css" rel="stylesheet">
{cms_stylesheet}
<script src="lib/jquery/js/modernizr-2.6.2.js"></script>
{* Relational links for interconnections between pages, good for accessibility and Search Engine Optmization *}
{cms_selflink dir='start' rellink='1'}
{cms_selflink dir='prev' rellink='1'}
{cms_selflink dir='next' rellink='1'}
</head>
<body>
<!-- start header -->
<div id="header">
<h1>{sitename}</h1>
</div>
<!-- end header -->
<!-- start menu -->
<div id="menu">
{menu}
</div>
<!-- end menu -->
<!-- start content -->....
Merci
ps: le forum refuse les url dans les posts
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
09/11/2012, 11:17:24
(Modification du message : 12/11/2012, 17:26:09 par elz64.)
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.11.2.1
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour,
Je ne trouve pas de doc sur comment faire un tpl de menu.
le tag {menu} n'est pas trop mal fichu mais je veux faire autre chose et maitriser la totalité des class et la structure (avec <nav> notamment).
Je veux appliquer ceci: berkhamsted-web-design.co.uk/2012/07/cmsms-menus-and-twitter-bootstrap/
mais en fait je ne vois pas où le faire ?
voila le haut du tpl perso:
Code : [== Indéfini ==]
{process_pagedata}
{strip} {* use strip to get rid of whitespace *}
{if !isset($get_title)}
{title assign='get_title'}
{/if}
{/strip}
{* With cms_lang_info we retrieve current language information, assign gives us $nls variable we can work with *}
{cms_lang_info assign='nls'}
{* using strip as we don't want useless whitespace, especially not before doctype *}
{/strip}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang='{$nls->htmlarea()}' dir='{$nls->direction()}' class='no-js'>
<head>
<meta name="title" content="{$get_title} - {sitename}" />
<meta name="copyright" content="{sitename}" />
<meta name="description" content="{$get_content|strip_tags|truncate:'150'|strip}" />
<meta name="keywords" content="{search action='keywords' count='15'}" />
<meta name="language" content="{$lang}" />
<meta name="url" content="{root_url}" />
<meta name="identifier-URL" content="{root_url}" />
<meta name="revised" content="{modified_date format="%a, %d %b %Y %H:%M:%S"}" />
<meta name="original-source" content="{if isset($canonical)}{$canonical}{elseif isset($content_obj)}{$content_obj->GetURL()}{/if}" />
<meta name='viewport' content='initial-scale=1.0 maximum-scale=1.0 user-scalable=no' />
<meta name='HandheldFriendly' content='true' />
{* Don't remove this! Metadata is entered in Site Admin/Global settings. *}
{metadata}
{* See in news detail template how cannonical url can be assigned from module *}
{if isset($canonical)}<link rel='canonical' href='{$canonical}' />{elseif isset($content_obj)}<link rel='canonical' href='{$content_obj->GetURL()}' />{/if}
<link href="uploads/Bootstrap00/css/bootstrap.css" rel="stylesheet">
<link href="uploads/Bootstrap00/css/bootstrap-responsive.css" rel="stylesheet">
{cms_stylesheet}
<script src="lib/jquery/js/modernizr-2.6.2.js"></script>
{* Relational links for interconnections between pages, good for accessibility and Search Engine Optmization *}
{cms_selflink dir='start' rellink='1'}
{cms_selflink dir='prev' rellink='1'}
{cms_selflink dir='next' rellink='1'}
</head>
<body>
<!-- start header -->
<div id="header">
<h1>{sitename}</h1>
</div>
<!-- end header -->
<!-- start menu -->
<div id="menu">
{menu}
</div>
<!-- end menu -->
<!-- start content -->....
Merci
ps: le forum refuse les url dans les posts
Messages : 10,864
Sujets : 164
Inscription : Dec 2008
Réputation :
0
ouais, pas d'url pour les comptes < 15 posts, :/ ça nous évite totalement le spam depuis 6 mois, désolé pour le désagrément
Tu cherches à personnaliser ton propre gabarit de menu : va dans les options du module MenuManager, tu y trouveras sa liste de gabarit
Messages : 10,864
Sujets : 164
Inscription : Dec 2008
Réputation :
0
ouais, pas d'url pour les comptes < 15 posts, :/ ça nous évite totalement le spam depuis 6 mois, désolé pour le désagrément
Tu cherches à personnaliser ton propre gabarit de menu : va dans les options du module MenuManager, tu y trouveras sa liste de gabarit
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
09/11/2012, 13:27:04
(Modification du message : 09/11/2012, 16:13:22 par elz64.)
ok,
j'ai capté les tpl de menu mais j'ai encore pas mal de soucy pour les multi levels ( on va aller jusqu'à 2 subs) :
le code trouvé là :
berkhamsted-web-design.co.uk/2012/07/cmsms-menus-and-twitter-bootstrap/comment-page-1/#comment-6490
est imparfait ca ne marche pas pour déjà une histoire de class manquantes. Voici ma 1ère correction avec usage d'un nav parent :
Code : [== Indéfini ==]
<ul class="nav"><li>
{foreach from=$nodelist item=node}
{if $node->depth > $node->prevdepth}
{repeat string="<ul class='dropdown-menu'>" times=$node->depth-$node->prevdepth}
{elseif $node->depth < $node->prevdepth}
{repeat string="</li></ul>" times=$node->prevdepth-$node->depth}
</li>
{elseif $node->index > 0}</li>
{/if}
{if $node->parent == true }
<li><a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{elseif $node->haschildren == true and $node->type != 'sectionheader' and $node->type != 'separator'}
<li class='dropdown'><a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{elseif $node->current == true}
<li><a href="{$node->url}">{$node->menutext}</a>
{elseif $node->type == 'sectionheader'}
<li><a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{else}
<li><a href="{$node->url}">{$node->menutext}</a>
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
</div></div></nav>
{/if}
Bon mais c'est pas assez et là il me faut l'aide des dev qui maitrisent l'api MS:
il faut <li class='dropdown'> UNIQUEMENT pour les li qui contiennent des sous UL.
Là avec ma bidouille TOUS les li de 1er niveau prennent la classe .dropdown, et c'est mauvais.
[edit] non c'est bon ca en fait.
PUIS (c'est pas fini!...)
il faut pour le niveau 2 (ul > ul > ul ) une classe .sub-menu. et ca je vois pas.
enfin tout cà:
Code : [== Indéfini ==]
<ul class="nav">
<li class="dropdown">
<ul class="dropdown-menu">
<li>......
<ul class="dropdown-menu sub-menu">
voir exemple ici (mais pas sous MS) imdev.in/twitter-bootstrap-multi-level-dropdown-menu-system/
Merci
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
09/11/2012, 13:27:04
(Modification du message : 09/11/2012, 16:13:22 par elz64.)
ok,
j'ai capté les tpl de menu mais j'ai encore pas mal de soucy pour les multi levels ( on va aller jusqu'à 2 subs) :
le code trouvé là :
berkhamsted-web-design.co.uk/2012/07/cmsms-menus-and-twitter-bootstrap/comment-page-1/#comment-6490
est imparfait ca ne marche pas pour déjà une histoire de class manquantes. Voici ma 1ère correction avec usage d'un nav parent :
Code : [== Indéfini ==]
<ul class="nav"><li>
{foreach from=$nodelist item=node}
{if $node->depth > $node->prevdepth}
{repeat string="<ul class='dropdown-menu'>" times=$node->depth-$node->prevdepth}
{elseif $node->depth < $node->prevdepth}
{repeat string="</li></ul>" times=$node->prevdepth-$node->depth}
</li>
{elseif $node->index > 0}</li>
{/if}
{if $node->parent == true }
<li><a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{elseif $node->haschildren == true and $node->type != 'sectionheader' and $node->type != 'separator'}
<li class='dropdown'><a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{elseif $node->current == true}
<li><a href="{$node->url}">{$node->menutext}</a>
{elseif $node->type == 'sectionheader'}
<li><a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{else}
<li><a href="{$node->url}">{$node->menutext}</a>
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
</div></div></nav>
{/if}
Bon mais c'est pas assez et là il me faut l'aide des dev qui maitrisent l'api MS:
il faut <li class='dropdown'> UNIQUEMENT pour les li qui contiennent des sous UL.
Là avec ma bidouille TOUS les li de 1er niveau prennent la classe .dropdown, et c'est mauvais.
[edit] non c'est bon ca en fait.
PUIS (c'est pas fini!...)
il faut pour le niveau 2 (ul > ul > ul ) une classe .sub-menu. et ca je vois pas.
enfin tout cà:
Code : [== Indéfini ==]
<ul class="nav">
<li class="dropdown">
<ul class="dropdown-menu">
<li>......
<ul class="dropdown-menu sub-menu">
voir exemple ici (mais pas sous MS) imdev.in/twitter-bootstrap-multi-level-dropdown-menu-system/
Merci
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
Bon je crois avoir trouvé.
C'est un peu embêtant de devoir mettre les mains ds le cambouis de smarty pour faire de simple personnalisation.
En même temps,c 'est aussi vrai qu'il n'est pas nécessaire de faire du php du coup..
Mais globalement, je trouve qu'il manque un menu manager digne de ce nom. pour décider simplement des classes souhaitées, des structures des tpl (notamment en fonction des sous niveaux)...Vision d'un débutant..
(Les habitués de MS pourraient découvrir ModX, ils seraient surement opérationnels très vite...et trouveraient ca fachement + simple...)
bref :
voilà mon menu tpl.
Code : [== Indéfini ==]
{* port Bootstrap nav http://berkhamsted-web-design.co.uk/2012/07/cmsms-menus-and-twitter-bootstrap/
ok for full top horizontal nav bar 2 sous niveaux.
*}
{assign var='number_of_levels' value=10000}
{assign var='level_class' value='dropdown-menu sub-menu'}
{if isset($menuparams.number_of_levels)}
{assign var='number_of_levels' value=$menuparams.number_of_levels}
{/if}
{if $count > 0}
<nav class="navbar navbar-fixed-top" id="menutop">
<div class="navbar-inner">
<div class="container">
<h1 class="brand" >
Nom du projet
</h1>
<ul class="nav">
{foreach from=$nodelist item=node name=menuitem}
{if $node->depth > $node->prevdepth}
{if $node->depth == 3} {* si on est ul>ul>ul on met .sub-menu dessus *}
{repeat string="<ul class='dropdown-menu sub-menu'>" times=$node->depth-$node->prevdepth}
{else}
{repeat string="<ul class='dropdown-menu'>" times=$node->depth-$node->prevdepth}
{/if}
{elseif $node->depth < $node->prevdepth}
{repeat string="</li></ul>" times=$node->prevdepth-$node->depth}
{elseif $node->index > 0}</li>
{/if}
{if $node->parent == true}
<li {if $smarty.foreach.menuitem.last} class='last-menu-item'{/if}>
<a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{elseif $node->haschildren == true and $node->type != 'sectionheader' and $node->type != 'separator'}
<li {if $smarty.foreach.menuitem.last} class='last-menu-item dropdown'
{else}class='dropdown'{/if}><a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{elseif $node->current == true}
<li {if $smarty.foreach.menuitem.last} class='last-menu-item'{/if}><a href="{$node->url}">{$node->menutext}</a>
{elseif $node->type == 'sectionheader'}
<li {if $smarty.foreach.menuitem.last} class='last-menu-item'{/if}><a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{else}
<li {if $smarty.foreach.menuitem.last} class='last-menu-item'{/if}><a href="{$node->url}">{$node->menutext}</a>
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
</div></div></nav>
{/if}
reste à gérer une class .last-menu-item . Là ca marche sur tous les derniers li SAUF les li de 1er niveau.
Comprends pas.
Merci
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
Bon je crois avoir trouvé.
C'est un peu embêtant de devoir mettre les mains ds le cambouis de smarty pour faire de simple personnalisation.
En même temps,c 'est aussi vrai qu'il n'est pas nécessaire de faire du php du coup..
Mais globalement, je trouve qu'il manque un menu manager digne de ce nom. pour décider simplement des classes souhaitées, des structures des tpl (notamment en fonction des sous niveaux)...Vision d'un débutant..
(Les habitués de MS pourraient découvrir ModX, ils seraient surement opérationnels très vite...et trouveraient ca fachement + simple...)
bref :
voilà mon menu tpl.
Code : [== Indéfini ==]
{* port Bootstrap nav http://berkhamsted-web-design.co.uk/2012/07/cmsms-menus-and-twitter-bootstrap/
ok for full top horizontal nav bar 2 sous niveaux.
*}
{assign var='number_of_levels' value=10000}
{assign var='level_class' value='dropdown-menu sub-menu'}
{if isset($menuparams.number_of_levels)}
{assign var='number_of_levels' value=$menuparams.number_of_levels}
{/if}
{if $count > 0}
<nav class="navbar navbar-fixed-top" id="menutop">
<div class="navbar-inner">
<div class="container">
<h1 class="brand" >
Nom du projet
</h1>
<ul class="nav">
{foreach from=$nodelist item=node name=menuitem}
{if $node->depth > $node->prevdepth}
{if $node->depth == 3} {* si on est ul>ul>ul on met .sub-menu dessus *}
{repeat string="<ul class='dropdown-menu sub-menu'>" times=$node->depth-$node->prevdepth}
{else}
{repeat string="<ul class='dropdown-menu'>" times=$node->depth-$node->prevdepth}
{/if}
{elseif $node->depth < $node->prevdepth}
{repeat string="</li></ul>" times=$node->prevdepth-$node->depth}
{elseif $node->index > 0}</li>
{/if}
{if $node->parent == true}
<li {if $smarty.foreach.menuitem.last} class='last-menu-item'{/if}>
<a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{elseif $node->haschildren == true and $node->type != 'sectionheader' and $node->type != 'separator'}
<li {if $smarty.foreach.menuitem.last} class='last-menu-item dropdown'
{else}class='dropdown'{/if}><a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{elseif $node->current == true}
<li {if $smarty.foreach.menuitem.last} class='last-menu-item'{/if}><a href="{$node->url}">{$node->menutext}</a>
{elseif $node->type == 'sectionheader'}
<li {if $smarty.foreach.menuitem.last} class='last-menu-item'{/if}><a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{else}
<li {if $smarty.foreach.menuitem.last} class='last-menu-item'{/if}><a href="{$node->url}">{$node->menutext}</a>
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
</div></div></nav>
{/if}
reste à gérer une class .last-menu-item . Là ca marche sur tous les derniers li SAUF les li de 1er niveau.
Comprends pas.
Merci
Messages : 60
Sujets : 6
Inscription : Oct 2012
Réputation :
0
10/11/2012, 18:28:33
(Modification du message : 10/11/2012, 18:30:29 par didjeko.)
mmm, si je ne m'abuse, parce que au 1er niveau tu passes pas dans le test
Code : [== Indéfini ==]
{if $node->parent == true}
puisque le noeud n'est pas un parent de la page courante (pas de parent au niveau 1).
Citation :C'est un peu embêtant de devoir mettre les mains ds le cambouis de smarty pour faire de simple personnalisation.
Là, je pense que tu te trompes, puisque le principe de base de CMSMS c'est l'utilisation de smarty pour faire toutes les personnalisations. De ce fait, ce n'est pas Citation :mettre les mains dans le cambouis de smarty
mais Citation :utiliser smarty au mieux pour coder les templates qui répondent à tes besoins car telle est sa fonction :p
Pour ma part, je trouve que c'et un petit langage fort agréable à programmer - et, cerise sur le gâteau, qui est utilisable dans les css.
Messages : 60
Sujets : 6
Inscription : Oct 2012
Réputation :
0
10/11/2012, 18:28:33
(Modification du message : 10/11/2012, 18:30:29 par didjeko.)
mmm, si je ne m'abuse, parce que au 1er niveau tu passes pas dans le test
Code : [== Indéfini ==]
{if $node->parent == true}
puisque le noeud n'est pas un parent de la page courante (pas de parent au niveau 1).
Citation :C'est un peu embêtant de devoir mettre les mains ds le cambouis de smarty pour faire de simple personnalisation.
Là, je pense que tu te trompes, puisque le principe de base de CMSMS c'est l'utilisation de smarty pour faire toutes les personnalisations. De ce fait, ce n'est pas Citation :mettre les mains dans le cambouis de smarty
mais Citation :utiliser smarty au mieux pour coder les templates qui répondent à tes besoins car telle est sa fonction :p
Pour ma part, je trouve que c'et un petit langage fort agréable à programmer - et, cerise sur le gâteau, qui est utilisable dans les css.
Messages : 10,864
Sujets : 164
Inscription : Dec 2008
Réputation :
0
je rejoins l'avis de didjeko
Messages : 10,864
Sujets : 164
Inscription : Dec 2008
Réputation :
0
je rejoins l'avis de didjeko
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
voui voui jvois vois. Mais j'ai pas encore compris le flux du test. Je vais creuser.
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
voui voui jvois vois. Mais j'ai pas encore compris le flux du test. Je vais creuser.
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Difficile de pouvoir t'aider sans voir le code html déployé.
A quoi correspond last-menu-item ?
Je suppose que c'est au tout dernier élément du menu puisque tu utilises {if $smarty.foreach.menuitem.last}
Aussi je me demande si ce ne serait pas plutôt le dernier élément d'un niveau, et dans ce cas, tu devrais utiliser :
$node->first -- existe, et mis à 1 si c'est le premier élément dans un niveau.
$node->last -- existe, et mis à 1 si c'est le dernier élément dans un niveau.
En plaçant <pre>{$node|print_r}</pre> dans ton foreach, tu auras accès aux valeurs de chaque $node.
Tu verras que $node->parent n'est true que dans 1 seul cas : la page niveau 1 de la page en cours si cette dernière est enfant.
Je te propose de regarder cet excellent article sur un menu mega-dropdown de Goran Ilic sur son site consacré à cmsms (je pense que tu en feras un bookmark ).
Après, tu ne pourras plus écrire "Comprends pas" et critiquer cet outil qui te permet de paramétrer ton menu très finement si tu trouves le bon algorithme.
Tu t'es présenté comme un noob, ce que tu n'es sûrement pas au vu de ta compréhension très rapide de smarty et du gestionnaire de menu. D'ici peu de temps, tu passeras à la construction de modules.
Bon amusement sur ce cms
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Difficile de pouvoir t'aider sans voir le code html déployé.
A quoi correspond last-menu-item ?
Je suppose que c'est au tout dernier élément du menu puisque tu utilises {if $smarty.foreach.menuitem.last}
Aussi je me demande si ce ne serait pas plutôt le dernier élément d'un niveau, et dans ce cas, tu devrais utiliser :
$node->first -- existe, et mis à 1 si c'est le premier élément dans un niveau.
$node->last -- existe, et mis à 1 si c'est le dernier élément dans un niveau.
En plaçant <pre>{$node|print_r}</pre> dans ton foreach, tu auras accès aux valeurs de chaque $node.
Tu verras que $node->parent n'est true que dans 1 seul cas : la page niveau 1 de la page en cours si cette dernière est enfant.
Je te propose de regarder cet excellent article sur un menu mega-dropdown de Goran Ilic sur son site consacré à cmsms (je pense que tu en feras un bookmark ).
Après, tu ne pourras plus écrire "Comprends pas" et critiquer cet outil qui te permet de paramétrer ton menu très finement si tu trouves le bon algorithme.
Tu t'es présenté comme un noob, ce que tu n'es sûrement pas au vu de ta compréhension très rapide de smarty et du gestionnaire de menu. D'ici peu de temps, tu passeras à la construction de modules.
Bon amusement sur ce cms
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
Merci Jean pour tes encouragements.
Malheureusement ce que j'ai fais, je l'ai fais mar mimétisme et je continue à ne pas comprendre la stricture de smarty.
ou à peine.
Je ne vois pas les imbrications de if et donc pas du tout la logique des tests du coup (malgré un passage sur la doc smarty)
Il me manque aussi la signaification (une liste exhaustive) des $machin de cmsms. le printr sort les contenus des $node certes mais je bloque sur la vision d'ensemble). le prevdepth notamment.
Fait on plusieurs tests indépendants les uns des autres (un bloc pour chaque niveau) ?
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
Merci Jean pour tes encouragements.
Malheureusement ce que j'ai fais, je l'ai fais mar mimétisme et je continue à ne pas comprendre la stricture de smarty.
ou à peine.
Je ne vois pas les imbrications de if et donc pas du tout la logique des tests du coup (malgré un passage sur la doc smarty)
Il me manque aussi la signaification (une liste exhaustive) des $machin de cmsms. le printr sort les contenus des $node certes mais je bloque sur la vision d'ensemble). le prevdepth notamment.
Fait on plusieurs tests indépendants les uns des autres (un bloc pour chaque niveau) ?
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
11/11/2012, 17:17:20
(Modification du message : 11/11/2012, 17:27:38 par Jean le Chauve.)
Tu n'as pas répondu à mes demandes : Citation :Difficile de pouvoir t'aider sans voir le code html déployé.
A quoi correspond last-menu-item ?
Si tu as placé le print_r tu verras la valeur de prevdepth pour chaque $node. Si tu changes de page sur le frontend, tu verras comment elle évolue.
Si, par exemple, tu es sur le premier node du second niveau (depth), il aura 1 comme valeur pour son prevdepth et 2 pour son depth. Il sera également 1 pour thirst. S'il n'a pas de frère, il aura également 1 pour last.
La prevdepth sert, entre autre, à évaluer quelles sont les balises à fermer ou à ouvrir.
{if $node->depth > $node->prevdepth} : si le depth du node actuel est supérieur à la depth du node précédent, je me trouve donc dans le premier enfant du node précédent, donc j'ouvre un <ul> et je ne ferme pas le <li> du node précédent.
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
11/11/2012, 17:17:20
(Modification du message : 11/11/2012, 17:27:38 par Jean le Chauve.)
Tu n'as pas répondu à mes demandes : Citation :Difficile de pouvoir t'aider sans voir le code html déployé.
A quoi correspond last-menu-item ?
Si tu as placé le print_r tu verras la valeur de prevdepth pour chaque $node. Si tu changes de page sur le frontend, tu verras comment elle évolue.
Si, par exemple, tu es sur le premier node du second niveau (depth), il aura 1 comme valeur pour son prevdepth et 2 pour son depth. Il sera également 1 pour thirst. S'il n'a pas de frère, il aura également 1 pour last.
La prevdepth sert, entre autre, à évaluer quelles sont les balises à fermer ou à ouvrir.
{if $node->depth > $node->prevdepth} : si le depth du node actuel est supérieur à la depth du node précédent, je me trouve donc dans le premier enfant du node précédent, donc j'ouvre un <ul> et je ne ferme pas le <li> du node précédent.
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
hmmm. ok.
le code est sur mon lab : cms-ms.dzi-neo.net/
Le but est que je me forme en intégrant des structures pour Bootstrap.
Merci
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
hmmm. ok.
le code est sur mon lab : cms-ms.dzi-neo.net/
Le but est que je me forme en intégrant des structures pour Bootstrap.
Merci
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Tu n'as toujours pas répondu à mes demandes, le lien donné contient un menu avec une seule classe : dropdown-menu
Il me faut le code (en dur) tel que tu le souhaiterais, avec toutes ses classes déployées pour pouvoir créer le code smarty.
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Tu n'as toujours pas répondu à mes demandes, le lien donné contient un menu avec une seule classe : dropdown-menu
Il me faut le code (en dur) tel que tu le souhaiterais, avec toutes ses classes déployées pour pouvoir créer le code smarty.
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
Désolé.
J'avais hier un meilleur résultat...
Voici un exemple (menu tronqué) de code rendu souhaité. J'ai viré tout le traitement des title pour ne pas encombrer.
Il y manquerait encore un class = "last" pour chaque DERNIER li d'un niveau.
Pour le code Bootstrap si un li est paraent d'un sous ul, alors il doit recevoir .dropdown.
un sous ul DOIT recevoir un .dropdown-menu
et si ce ul.dropdown-menu est de sous-niveau 2 (ul>ul>ul) il doit recevoir en + .sub-menu
Cordialement,
Code : [== Indéfini ==]
<nav id="menutop" class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<h1 class="brand">
CMS Made Simple démo
</h1>
<ul>
<li><a href="http://cms-ms.dzi-neo.net/">Accueil</a>
</li>
<li class="dropdown">
<a data-toggle="dropdown" href="http://cms-ms.dzi-neo.net/how-cmsms-works.html">How CMSMS Works <b></b></a>
<ul class="dropdown-menu">
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/templates-and-stylesheets.html">Templates and stylesheets</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/pages-and-navigation.html">Pages and navigation</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/content_types.html">Content</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/menu-manager.html">Menu Manager</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/extensions.html">Extensions</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/event-manager.html">Event Manager</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/workflow.html">Workflow</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/where-do-i-get-help.html">Where do I get help?</a>
</li></ul>
</li>
<li class="dropdown"><a data-toggle="dropdown" href="http://cms-ms.dzi-neo.net/default_templates.html">Default Templates Explained <b></b></a>
<ul class="dropdown-menu">
<li><a href="http://cms-ms.dzi-neo.net/default_templates/cmsms_tags.html">CMSMS tags in the templates</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/navleft.html">Left simple navigation + 1 column</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/top_left.html">Top simple navigation + left subnavigation + 1 column</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/cssmenu_horizontal.html">CSSMenu top + 2 columns</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/cssmenu_vertical.html">CSSMenu left + 1 column</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/minimal-template.html">Minimal template</a>
</li>
<li class="dropdown"><a data-toggle="dropdown" href="http://cms-ms.dzi-neo.net/default_templates/higher-end.html">Higher End <b></b></a>
<ul class="dropdown-menu sub-menu">
<li><a href="http://cms-ms.dzi-neo.net/default_templates/higher-end/ncleanblue.html">NCleanBlue</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/higher-end/shadowmenu-tab-2-columns.html">ShadowMenu Tab + 2 columns</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/higher-end/shadowmenu-left-1-column.html">ShadowMenu left + 1 column</a>
</li></ul>
</li></ul>
</li>
</ul>
</div>
</div>
</nav>
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
Désolé.
J'avais hier un meilleur résultat...
Voici un exemple (menu tronqué) de code rendu souhaité. J'ai viré tout le traitement des title pour ne pas encombrer.
Il y manquerait encore un class = "last" pour chaque DERNIER li d'un niveau.
Pour le code Bootstrap si un li est paraent d'un sous ul, alors il doit recevoir .dropdown.
un sous ul DOIT recevoir un .dropdown-menu
et si ce ul.dropdown-menu est de sous-niveau 2 (ul>ul>ul) il doit recevoir en + .sub-menu
Cordialement,
Code : [== Indéfini ==]
<nav id="menutop" class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<h1 class="brand">
CMS Made Simple démo
</h1>
<ul>
<li><a href="http://cms-ms.dzi-neo.net/">Accueil</a>
</li>
<li class="dropdown">
<a data-toggle="dropdown" href="http://cms-ms.dzi-neo.net/how-cmsms-works.html">How CMSMS Works <b></b></a>
<ul class="dropdown-menu">
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/templates-and-stylesheets.html">Templates and stylesheets</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/pages-and-navigation.html">Pages and navigation</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/content_types.html">Content</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/menu-manager.html">Menu Manager</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/extensions.html">Extensions</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/event-manager.html">Event Manager</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/workflow.html">Workflow</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/how-cmsms-works/where-do-i-get-help.html">Where do I get help?</a>
</li></ul>
</li>
<li class="dropdown"><a data-toggle="dropdown" href="http://cms-ms.dzi-neo.net/default_templates.html">Default Templates Explained <b></b></a>
<ul class="dropdown-menu">
<li><a href="http://cms-ms.dzi-neo.net/default_templates/cmsms_tags.html">CMSMS tags in the templates</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/navleft.html">Left simple navigation + 1 column</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/top_left.html">Top simple navigation + left subnavigation + 1 column</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/cssmenu_horizontal.html">CSSMenu top + 2 columns</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/cssmenu_vertical.html">CSSMenu left + 1 column</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/minimal-template.html">Minimal template</a>
</li>
<li class="dropdown"><a data-toggle="dropdown" href="http://cms-ms.dzi-neo.net/default_templates/higher-end.html">Higher End <b></b></a>
<ul class="dropdown-menu sub-menu">
<li><a href="http://cms-ms.dzi-neo.net/default_templates/higher-end/ncleanblue.html">NCleanBlue</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/higher-end/shadowmenu-tab-2-columns.html">ShadowMenu Tab + 2 columns</a>
</li>
<li><a href="http://cms-ms.dzi-neo.net/default_templates/higher-end/shadowmenu-left-1-column.html">ShadowMenu left + 1 column</a>
</li></ul>
</li></ul>
</li>
</ul>
</div>
</div>
</nav>
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
11/11/2012, 22:20:19
(Modification du message : 11/11/2012, 22:44:36 par Jean le Chauve.)
Citation :Il y manquerait encore un class = "last" pour chaque DERNIER li d'un niveau.
Il suffit alors de placer en première condition dans ta boucle : {if $node->last == true}<li class="last"...
{elseif ...
Voici le code dans lequel j'ai ajouté quelques fonctions smarty très utiles qui permettent d'éviter les répétitions de sous-conditions :
Code : {assign "class" "bootstrap"}{* on assigne une valeur quelquonque à $class voir smarty : http://www.smarty.net/docs/en/language.function.assign.tpl *}
{if $count > 0}
<nav class="navbar navbar-fixed-top" id="menutop"><div class="navbar-inner"><div class="container"><h1 class="brand" >Nom du projet</h1><ul class="nav">
{foreach $nodelist as $node}{* raccourci d'écriture : voir smarty : http://www.smarty.net/docs/en/language.function.foreach.tpl *}
{if $node->depth > $node->prevdepth}{* si on est ul>ul *}
{if $node->depth > 2}
{* si on est ul>ul>ul ou + on met .sub-menu dessus *}
{repeat string='<ul class="dropdown-menu sub-menu">' times=$node->depth-$node->prevdepth}
{else}
{repeat string='<ul class="dropdown-menu">' times=$node->depth-$node->prevdepth}
{/if}
{elseif $node->depth < $node->prevdepth}{* si on descend de niveau *}
{repeat string='</li></ul>' times=$node->prevdepth-$node->depth}
{elseif $node->index > 0}</li>
{/if}
{if $node->last == true}{* si on est sur le dernier élément d'un niveau, on concatène $class avec last-menu-item voir smarty : http://www.smarty.net/docs/en/language.modifier.cat.tpl ET http://www.smarty.net/docs/en/language.function.capture.tpl*}
{capture class assign=class}{$class|cat:" last-menu-item"}{/capture}
{/if}
{if $node->haschildren == true and $node->type != 'sectionheader' and $node->type != 'separator'}
{capture class assign=class}{$class|cat:" dropdown"}{/capture}
<li class='{$class}'>children<a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{elseif $node->type == 'sectionheader'}{* à vérifier si c'est ce que tu veux *}
<li class='{$class}'><a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{else}
<li class='{$class}'>else<a href="{$node->url}">{$node->menutext}</a>
{/if}
{assign "class" "bootstrap"}{* important : on réinitialise $class pour l'élément suivant *}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul></div></div></nav>{/if}
Post à déplacer dans Modules, Tags
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
11/11/2012, 22:20:19
(Modification du message : 11/11/2012, 22:44:36 par Jean le Chauve.)
Citation :Il y manquerait encore un class = "last" pour chaque DERNIER li d'un niveau.
Il suffit alors de placer en première condition dans ta boucle : {if $node->last == true}<li class="last"...
{elseif ...
Voici le code dans lequel j'ai ajouté quelques fonctions smarty très utiles qui permettent d'éviter les répétitions de sous-conditions :
Code : {assign "class" "bootstrap"}{* on assigne une valeur quelquonque à $class voir smarty : http://www.smarty.net/docs/en/language.function.assign.tpl *}
{if $count > 0}
<nav class="navbar navbar-fixed-top" id="menutop"><div class="navbar-inner"><div class="container"><h1 class="brand" >Nom du projet</h1><ul class="nav">
{foreach $nodelist as $node}{* raccourci d'écriture : voir smarty : http://www.smarty.net/docs/en/language.function.foreach.tpl *}
{if $node->depth > $node->prevdepth}{* si on est ul>ul *}
{if $node->depth > 2}
{* si on est ul>ul>ul ou + on met .sub-menu dessus *}
{repeat string='<ul class="dropdown-menu sub-menu">' times=$node->depth-$node->prevdepth}
{else}
{repeat string='<ul class="dropdown-menu">' times=$node->depth-$node->prevdepth}
{/if}
{elseif $node->depth < $node->prevdepth}{* si on descend de niveau *}
{repeat string='</li></ul>' times=$node->prevdepth-$node->depth}
{elseif $node->index > 0}</li>
{/if}
{if $node->last == true}{* si on est sur le dernier élément d'un niveau, on concatène $class avec last-menu-item voir smarty : http://www.smarty.net/docs/en/language.modifier.cat.tpl ET http://www.smarty.net/docs/en/language.function.capture.tpl*}
{capture class assign=class}{$class|cat:" last-menu-item"}{/capture}
{/if}
{if $node->haschildren == true and $node->type != 'sectionheader' and $node->type != 'separator'}
{capture class assign=class}{$class|cat:" dropdown"}{/capture}
<li class='{$class}'>children<a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{elseif $node->type == 'sectionheader'}{* à vérifier si c'est ce que tu veux *}
<li class='{$class}'><a href="{$node->url}" data-toggle="dropdown">{$node->menutext} <b></b></a>
{else}
<li class='{$class}'>else<a href="{$node->url}">{$node->menutext}</a>
{/if}
{assign "class" "bootstrap"}{* important : on réinitialise $class pour l'élément suivant *}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul></div></div></nav>{/if}
Post à déplacer dans Modules, Tags
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
Merci. Ca marche super.
Je creuse.
J'ai toujours du mal avec la logique de traitement:
Je vois des tests indépendants dans lesquels on ne traite qu'une partie des choses.
une 1ère partie qui ne semble faire que les <ul> et <li> sans les remplir.
PUIS
Un autre traitement (série de tests) qui les rempli avec les <a>
Ce qui me perturbe vraiment c'est qu'on referme d'abords les balises , et qu'on continue les tests pour remplir l'intérieur.
Soit j'ai rien compris soit ca va à l'encontre de tout ce que je connais. Pour moi un test de traitement d'un niveau devrait faire toute la hiérarchie avec toute une série de if/else imbriqués, puis on referme en remontant.
Là ce n'est pas le cas je crois.
J'ai bien compris la logique de smarty ?
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
Merci. Ca marche super.
Je creuse.
J'ai toujours du mal avec la logique de traitement:
Je vois des tests indépendants dans lesquels on ne traite qu'une partie des choses.
une 1ère partie qui ne semble faire que les <ul> et <li> sans les remplir.
PUIS
Un autre traitement (série de tests) qui les rempli avec les <a>
Ce qui me perturbe vraiment c'est qu'on referme d'abords les balises , et qu'on continue les tests pour remplir l'intérieur.
Soit j'ai rien compris soit ca va à l'encontre de tout ce que je connais. Pour moi un test de traitement d'un niveau devrait faire toute la hiérarchie avec toute une série de if/else imbriqués, puis on referme en remontant.
Là ce n'est pas le cas je crois.
J'ai bien compris la logique de smarty ?
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
Voilà le dernier code plus abouti avec gestion des title et tooltips
J'ai tenté d'user de variables le plus possible, ca me gêne de faire des appels à l'api ($node->trucmachin) X fois quand une seule fois suffit.
Code : [== Indéfini ==]
{assign "class" ""}{* on assigne une valeur quelquonque à $class voir smarty : http://www.smarty.net/docs/en/language.function.assign.tpl *}
{assign var='number_of_levels' value=10000}
{if isset($menuparams.number_of_levels)}
{assign var='number_of_levels' value=$menuparams.number_of_levels}
{/if}
{if $count > 0}
<nav class="navbar navbar-fixed-top" id="menutop">
<div class="navbar-inner">
<div class="container"><h1 class="brand" >Nom du projet</h1>
<!-- 1er niveau de menu ds son ul -->
<ul class="nav">
{foreach $nodelist as $node}{* raccourci d'écriture : voir smarty : http://www.smarty.net/docs/en/language.function.foreach.tpl *}
{assign "niv" $node->depth}
{assign "title" $node->pagetitle}
{assign "Description" $node->titleattribute}
{if $description == ""}
{assign var="Titre" value="`$title` "}
{else}
{assign var="Titre" value="`$title`, ` -` `$Description` "}
{/if}
{if $niv > $node->prevdepth}{* on est au moins ul>ul node->depth*}
{if $niv > 2}
{* si on est ul>ul>ul ou + on met .sub-menu dessus *}
{repeat string='<ul class="dropdown-menu sub-menu">' times=$node->depth-$node->prevdepth}
{else} {* on est ul>ul *}
{repeat string='<ul class="dropdown-menu">' times=$node->depth-$node->prevdepth}
{/if}
{elseif $niv < $node->prevdepth}{* si on descend de niveau *}
{repeat string='</li></ul>' times=$node->prevdepth-$node->depth}
{elseif $node->index > 0}</li>
{/if}
{if $node->first == true}{* si on est sur le 1er élément d'un niveau, on concatène $class avec 'first' *}
{capture class assign=class}{$class|cat:" first"}{/capture}
{/if}
{if $node->last == true}{* si on est sur le dernier élément d'un niveau, on concatène $class avec 'last' voir smarty : http://www.smarty.net/docs/en/language.modifier.cat.tpl ET http://www.smarty.net/docs/en/language.function.capture.tpl*}
{capture class assign=class}{$class|cat:" last"}{/capture}
{/if}
{if $node->haschildren == true and $node->type != 'sectionheader' and $node->type != 'separator'}
{capture class assign=class}{$class|cat:" haschildren dropdown"}{/capture}
<li class='{$class}'><a rel="tooltip" href="{$node->url}" data-toggle="dropdown" title="{$Titre}">{$node->menutext} <b></b></a>
{elseif $node->type == 'sectionheader'}
<li class='{$class}'><a rel="tooltip" href="{$node->url}" data-toggle="dropdown" title="{$Titre}">{$node->menutext} <b></b></a>
{else}
<li class='{$class}'><a rel="tooltip" href="{$node->url}" title="{$Titre}">{$node->menutext}</a>
{/if}
{assign "class" ""}{* important : on réinitialise $class pour l'élément suivant *}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}
</li>
</ul></div></div></nav>{/if}
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
Voilà le dernier code plus abouti avec gestion des title et tooltips
J'ai tenté d'user de variables le plus possible, ca me gêne de faire des appels à l'api ($node->trucmachin) X fois quand une seule fois suffit.
Code : [== Indéfini ==]
{assign "class" ""}{* on assigne une valeur quelquonque à $class voir smarty : http://www.smarty.net/docs/en/language.function.assign.tpl *}
{assign var='number_of_levels' value=10000}
{if isset($menuparams.number_of_levels)}
{assign var='number_of_levels' value=$menuparams.number_of_levels}
{/if}
{if $count > 0}
<nav class="navbar navbar-fixed-top" id="menutop">
<div class="navbar-inner">
<div class="container"><h1 class="brand" >Nom du projet</h1>
<!-- 1er niveau de menu ds son ul -->
<ul class="nav">
{foreach $nodelist as $node}{* raccourci d'écriture : voir smarty : http://www.smarty.net/docs/en/language.function.foreach.tpl *}
{assign "niv" $node->depth}
{assign "title" $node->pagetitle}
{assign "Description" $node->titleattribute}
{if $description == ""}
{assign var="Titre" value="`$title` "}
{else}
{assign var="Titre" value="`$title`, ` -` `$Description` "}
{/if}
{if $niv > $node->prevdepth}{* on est au moins ul>ul node->depth*}
{if $niv > 2}
{* si on est ul>ul>ul ou + on met .sub-menu dessus *}
{repeat string='<ul class="dropdown-menu sub-menu">' times=$node->depth-$node->prevdepth}
{else} {* on est ul>ul *}
{repeat string='<ul class="dropdown-menu">' times=$node->depth-$node->prevdepth}
{/if}
{elseif $niv < $node->prevdepth}{* si on descend de niveau *}
{repeat string='</li></ul>' times=$node->prevdepth-$node->depth}
{elseif $node->index > 0}</li>
{/if}
{if $node->first == true}{* si on est sur le 1er élément d'un niveau, on concatène $class avec 'first' *}
{capture class assign=class}{$class|cat:" first"}{/capture}
{/if}
{if $node->last == true}{* si on est sur le dernier élément d'un niveau, on concatène $class avec 'last' voir smarty : http://www.smarty.net/docs/en/language.modifier.cat.tpl ET http://www.smarty.net/docs/en/language.function.capture.tpl*}
{capture class assign=class}{$class|cat:" last"}{/capture}
{/if}
{if $node->haschildren == true and $node->type != 'sectionheader' and $node->type != 'separator'}
{capture class assign=class}{$class|cat:" haschildren dropdown"}{/capture}
<li class='{$class}'><a rel="tooltip" href="{$node->url}" data-toggle="dropdown" title="{$Titre}">{$node->menutext} <b></b></a>
{elseif $node->type == 'sectionheader'}
<li class='{$class}'><a rel="tooltip" href="{$node->url}" data-toggle="dropdown" title="{$Titre}">{$node->menutext} <b></b></a>
{else}
<li class='{$class}'><a rel="tooltip" href="{$node->url}" title="{$Titre}">{$node->menutext}</a>
{/if}
{assign "class" ""}{* important : on réinitialise $class pour l'élément suivant *}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}
</li>
</ul></div></div></nav>{/if}
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Est-ce que tu as compris le principe de la variable $class ?
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Est-ce que tu as compris le principe de la variable $class ?
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
12/11/2012, 13:16:52
(Modification du message : 12/11/2012, 13:24:40 par elz64.)
ben oui.
Y'a un truc qui m'aurait échappé?
Pour gérer les title la concat ne fonctionne pas pareil et le modifier cat ne semble pas pouvoir être utilisé dans ce cas.( mélanger plusieurs contenus de var et des string)
Edit:
J'ai défini $niv:
pb:
si je fais ca {$niv|cat:" lev"} ca va donner 1lec ou 2lev par exemple.
et il faudrait ne pas commencer par une valeur numérique (lev2).
J'ai plus du mal pour ajouter la valeur du niveau courant dans $class.
dans chaque cas je tente d'avoir <li class="valeur_$niv et les valeurs tq déja fait jusqu'à présent">
ex: <li class="lev1 dropdown.....">
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
12/11/2012, 13:16:52
(Modification du message : 12/11/2012, 13:24:40 par elz64.)
ben oui.
Y'a un truc qui m'aurait échappé?
Pour gérer les title la concat ne fonctionne pas pareil et le modifier cat ne semble pas pouvoir être utilisé dans ce cas.( mélanger plusieurs contenus de var et des string)
Edit:
J'ai défini $niv:
pb:
si je fais ca {$niv|cat:" lev"} ca va donner 1lec ou 2lev par exemple.
et il faudrait ne pas commencer par une valeur numérique (lev2).
J'ai plus du mal pour ajouter la valeur du niveau courant dans $class.
dans chaque cas je tente d'avoir <li class="valeur_$niv et les valeurs tq déja fait jusqu'à présent">
ex: <li class="lev1 dropdown.....">
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Oui, je vois que tu as compris les classes. Je te prépare une petite explication sur l'ordre des conditions.
Tu n'as pas besoin de ceci, puisque tu n'utilises $number_of_levelsn nulle part : Code : [== Indéfini ==]
{if isset($menuparams.number_of_levels)}
{assign var='number_of_levels' value=$menuparams.number_of_levels}
{/if}
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Oui, je vois que tu as compris les classes. Je te prépare une petite explication sur l'ordre des conditions.
Tu n'as pas besoin de ceci, puisque tu n'utilises $number_of_levelsn nulle part : Code : [== Indéfini ==]
{if isset($menuparams.number_of_levels)}
{assign var='number_of_levels' value=$menuparams.number_of_levels}
{/if}
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Que veux-tu dire par Citation :Pour gérer les title la concat ne fonctionne pas pareil et le modifier cat ne semble pas pouvoir être utilisé dans ce cas.( mélanger plusieurs contenus de var et des string)
Que souhaites-tu exactement ?
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Que veux-tu dire par Citation :Pour gérer les title la concat ne fonctionne pas pareil et le modifier cat ne semble pas pouvoir être utilisé dans ce cas.( mélanger plusieurs contenus de var et des string)
Que souhaites-tu exactement ?
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
On ira plus vite si tu me donnes exactement tout ce que tu veux (donc un code html déployé avec toutes les classes nécessaires et pas un gabarit).
Je te fais le code puis te l'explique.
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
On ira plus vite si tu me donnes exactement tout ce que tu veux (donc un code html déployé avec toutes les classes nécessaires et pas un gabarit).
Je te fais le code puis te l'explique.
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
12/11/2012, 15:05:03
(Modification du message : 12/11/2012, 16:42:20 par Jean le Chauve.)
J'ai modifié le code, il devrait t'être plus compréhensible (+ de classes).
Essaye de le comprendre puis pose tes questions.
Code : [== Indéfini ==]
{if $count > 0}
<nav class="navbar navbar-fixed-top" id="menutop">
<div class="navbar-inner">
<div class="container"><h1 class="brand" >Nom du projet</h1>
{* 1er niveau de menu ds son ul *}
<ul class="nav">
{foreach $nodelist as $node}
{capture class assign=class}index{$node->index} lev{$node->depth} prevLev{$node->prevdepth}{/capture}
{capture title assign=title}{$node->pagetitle}{if $node->titleattribute neq ""}, - {$node->titleattribute}{/if}{/capture}
{if $node->depth > $node->prevdepth}{* on est au moins ul>ul node->depth *}
{if $node->depth > 2}
{repeat string='<ul class="dropdown-menu submenu">' times=$node->depth-$node->prevdepth}
{else}
{repeat string='<ul class="dropdown-menu">' times=$node->depth-$node->prevdepth}
{/if}
{elseif $node->depth < $node->prevdepth}{* si on descend de niveau *}
{repeat string='</li></ul>' times=$node->prevdepth-$node->depth}
{elseif $node->index > 0}
</li>{* si on reste sur le même niveau que l'élément précédent}
{/if}
{/if}
{if $node->first == true}{* si on est sur le 1er élément d'un niveau, on concatène $class avec 'first' *}
{capture class assign=class}{$class|cat:" first"}{/capture}
{/if}
{if $node->last == true}{* si on est sur le dernier élément d'un niveau, on concatène $class avec 'last' *}
{capture class assign=class}{$class|cat:" last"}{/capture}
{/if}
{if $node->haschildren == true and $node->type != 'sectionheader' and $node->type != 'separator'}
{capture class assign=class}{$class|cat:" haschildren dropdown"}{/capture}
<li class='{$class}'><a rel="tooltip" href="{$node->url}" data-toggle="dropdown" title="{$title}">{$node->menutext} <b></b></a>
{elseif $node->type == 'sectionheader'}
<li class='{$class}'><a rel="tooltip" href="{$node->url}" data-toggle="dropdown" title="{$title}">{$node->menutext} <b></b></a>
{else}
<li class='{$class}'><a rel="tooltip" href="{$node->url}" title="{$title}">{$node->menutext}</a>
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}
</li>
</ul>
</div>
</div>
</nav>
{/if}
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
12/11/2012, 15:05:03
(Modification du message : 12/11/2012, 16:42:20 par Jean le Chauve.)
J'ai modifié le code, il devrait t'être plus compréhensible (+ de classes).
Essaye de le comprendre puis pose tes questions.
Code : [== Indéfini ==]
{if $count > 0}
<nav class="navbar navbar-fixed-top" id="menutop">
<div class="navbar-inner">
<div class="container"><h1 class="brand" >Nom du projet</h1>
{* 1er niveau de menu ds son ul *}
<ul class="nav">
{foreach $nodelist as $node}
{capture class assign=class}index{$node->index} lev{$node->depth} prevLev{$node->prevdepth}{/capture}
{capture title assign=title}{$node->pagetitle}{if $node->titleattribute neq ""}, - {$node->titleattribute}{/if}{/capture}
{if $node->depth > $node->prevdepth}{* on est au moins ul>ul node->depth *}
{if $node->depth > 2}
{repeat string='<ul class="dropdown-menu submenu">' times=$node->depth-$node->prevdepth}
{else}
{repeat string='<ul class="dropdown-menu">' times=$node->depth-$node->prevdepth}
{/if}
{elseif $node->depth < $node->prevdepth}{* si on descend de niveau *}
{repeat string='</li></ul>' times=$node->prevdepth-$node->depth}
{elseif $node->index > 0}
</li>{* si on reste sur le même niveau que l'élément précédent}
{/if}
{/if}
{if $node->first == true}{* si on est sur le 1er élément d'un niveau, on concatène $class avec 'first' *}
{capture class assign=class}{$class|cat:" first"}{/capture}
{/if}
{if $node->last == true}{* si on est sur le dernier élément d'un niveau, on concatène $class avec 'last' *}
{capture class assign=class}{$class|cat:" last"}{/capture}
{/if}
{if $node->haschildren == true and $node->type != 'sectionheader' and $node->type != 'separator'}
{capture class assign=class}{$class|cat:" haschildren dropdown"}{/capture}
<li class='{$class}'><a rel="tooltip" href="{$node->url}" data-toggle="dropdown" title="{$title}">{$node->menutext} <b></b></a>
{elseif $node->type == 'sectionheader'}
<li class='{$class}'><a rel="tooltip" href="{$node->url}" data-toggle="dropdown" title="{$title}">{$node->menutext} <b></b></a>
{else}
<li class='{$class}'><a rel="tooltip" href="{$node->url}" title="{$title}">{$node->menutext}</a>
{/if}
{/foreach}
{repeat string="</li></ul>" times=$node->depth-1}
</li>
</ul>
</div>
</div>
</nav>
{/if}
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Messages : 8,242
Sujets : 58
Inscription : Dec 2007
Réputation :
0
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
ok.
je vois que tu aimes les capture.
Effectivement on peut donc les utiliser pour concaténer dedans plusieurs valeurs.
Mais justement ces valeurs sont à chaque fois redemandées, ppar exemple dans :
Code : [== Indéfini ==]
{capture titre assign=titre}{$node->pagetitle}{if $node->titleattribute neq ""}, {$node->titleattribute}{/if}{/capture}
on fait 2 appels $node->titleattributes coup sur coup. Ca me semble dispendieux en perf.
Ne serait-il pas plus efficace de reprendre en début de boucle la déf des appels en var (pour toute valeurs qui sera utilisé + d'une fois) pour ne plus faire appel qu'à ces var au lieu de l'api?
par ex: je remets Code : [== Indéfini ==]
{assign "Description" $node->titleattribute}
et ensuite Code : [== Indéfini ==]
{capture titre assign=titre}{$node->pagetitle}{if {$Description} neq ""}, {$Description}{/if}{/capture}
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
ok.
je vois que tu aimes les capture.
Effectivement on peut donc les utiliser pour concaténer dedans plusieurs valeurs.
Mais justement ces valeurs sont à chaque fois redemandées, ppar exemple dans :
Code : [== Indéfini ==]
{capture titre assign=titre}{$node->pagetitle}{if $node->titleattribute neq ""}, {$node->titleattribute}{/if}{/capture}
on fait 2 appels $node->titleattributes coup sur coup. Ca me semble dispendieux en perf.
Ne serait-il pas plus efficace de reprendre en début de boucle la déf des appels en var (pour toute valeurs qui sera utilisé + d'une fois) pour ne plus faire appel qu'à ces var au lieu de l'api?
par ex: je remets Code : [== Indéfini ==]
{assign "Description" $node->titleattribute}
et ensuite Code : [== Indéfini ==]
{capture titre assign=titre}{$node->pagetitle}{if {$Description} neq ""}, {$Description}{/if}{/capture}
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
Jean le Chauve a écrit :Je viens de modifier oui il y avait qq typo , mais j'avais corrigé ;° )
Messages : 52
Sujets : 3
Inscription : Nov 2012
Réputation :
0
Jean le Chauve a écrit :Je viens de modifier oui il y avait qq typo , mais j'avais corrigé ;° )
|