Salut,

Je suis en train de refaire mon site sur CMS Made Simple, et je cherche à adapter mon menu principal de sorte qu'un lien externe soit symbolisé avec l'ajout d'une classe qui permettra de le styliser différemment.
J'ai donc dupliqué le fichier du menu qui m'intéressait et j'ai essayé d'ajouter la partie en bleu dans le code ci-dessous, mais je ne sais pas si la syntaxe est la bonne, et si c'est le cas, je ne sais pas du tout quelle doit être la valeur en rouge foncé.
Si quelqu'un a la réponse, ça serait super chouette pour me permettre d'avancer.

Merci d'avance !

Voilà le code :
{* CSS classes used in this template:
.currentpage - The active/current page
.bullet_sectionheader - To style section header
hr.separator - To style the ruler for the separator *}
 
{if $count > 0}
<ul>
{foreach from=$nodelist item=node}
{if $node->depth > $node->prevdepth}
{repeat string="<ul>" 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->current == true}
<li><span> {$node->menutext} </span>

{elseif $node->parent == true && $node->depth == 1 and $node->type != 'sectionheader' and $node->type != 'separator'}
<li class="activeparent"> <a href="{$node->url}" class="activeparent"{if $node->target ne ""} target="{$node->target}"{/if}> {$node->menutext} </a>

{elseif $node->type == 'sectionheader'}
<li class="sectionheader">{$node->menutext}

{elseif $node->type == 'separator'}
<li style="list-style-type: none;"> <hr class="separator" />

[#blue]{elseif $node->type == '[/#][#darkred]external[/#][#blue]'}
<li class="externe">{$node->menutext}[/#]

{else}
<li><a href="{$node->url}"{if $node->target ne ""} target="{$node->target}"{/if}> {$node->menutext} </a>

{/if}

{/foreach}

{repeat string="</li></ul>" times=$node->depth-1}</li>
</ul>
{/if}


Modifié par Mikachu (08 Mar 2010 - 21:18)
je ne suis pas sur mon pc principal, je ne peux donc pas te passer mon code originel, je le ferais lundi.
Mais de mémoire, quand j'ai un lien externe dans mon menu je met en attribut target="_blank" uniquement dans le but de le différencier et de pouvoir lui mettre la classe que je veux dans le menu (l'attribut target=_bank n'apparait pas dans le menu final.
Ce qui donne qq chose dans le genre {if $node->target == "blank"} class='external' {/if} et colle ca dans toutes les lignes du menu : parent ou pas..j'espere que c'est clair, au pire je te file mon code lundi.
Salut,

Merci de ta réponse. Cela fonctionne très bien.

Tu m'as au passage rappelé qu'effectivement je voulais ouvrir une autre fenêtre, seulement, je voudrais éviter l'utilisation du target, et utiliser ceci, qui est moins intrusif :
onclick="window.open(this.href, 'externe'); return false;"

Du coup je sais pas du tout comment faire en fait ! Aurais-tu une idée, ou quelqu'un d'autre ?

Merci d'avance pour vos futures réponses.
Je ne suis pas expert dans ce CMS ; mais, essaye avec un attribut rel de valeur "external", histoire de voir si ce CMS peut prendre en charge une boucle de type {if $node->rel == "external"}. Du coup, ça te permettra de faire du JavaScript encore moins intrusif. Smiley cligne
Modifié par Victor BRITO (06 Mar 2010 - 17:00)
Salut,

Merci de ta réponse. Visiblement ça ne fonctionne pas.
n'y a-t-il pas un moyen de récupérer l'adresse root du site qui semble connue dans le CMS vu qu'il l'affiche dans mon code :
<base href="http://localhost/mikachudesign/" />

et si elle est pointe vers une autre adresse, appliquer la classe externe ?

Edit : Quoi que mon idée est pas maline car le lien ne sera pas vraiment un lien externe au nom de domaine, le lien étant vers mon blog hébergé dans un sous répertoire du nom de domaine...
Modifié par Mikachu (06 Mar 2010 - 17:46)
Salut,

Je relance ce sujet car je suis toujours à la recherche d'une réponse pour arriver à mes fins.

Merci encore d'avance. Smiley smile
Salut,

Bon j'ai trouvé une solution, certainement pas idéale, à l'aide du code suivant :
{elseif $node->hierarchy == '5'}
    <li><a class="externe" href="{$node->url}" onclick="window.open(this.href, 'externe'); return false;"> {$node->menutext}</a></li>

Cela sélectionne le lien de niveau 1 en 5ème position, et lui spécifie donc la portion de texte souhaitée incluant le code en javascript.

Mais c'est pas parfait car si je modifie le menu, il me faudra alors modifier le code source pour spécifier la bonne place du lien externe.

S'il y a une meilleure solution je suis preneur, merci d'avance. Smiley smile
Bon j'ai trouvé encore mieux :
{elseif $node->titleattribute == 'Lien externe'}
    <li><a class="externe" title="Lien externe" href="{$node->url}" onclick="window.open(this.href, 'externe'); return false;"> {$node->menutext}</a></li>

Il me suffit ainsi de spécifier le title "Lien externe" dans mon cms, et je n'ai plus besoin de toucher le code source du menu, et cela marchera quelle que soit la position. Smiley smile
Désolé j'ai oublié de repasser sur le sujet depuis le w-end dernier Smiley smile
Ta solution est bien, je me sers toujours de la même astuce que je t'ai dit dans mon premier message, à savoir que je créer un lien externe dans le CMS avec un attribut target=_blank.
Ensuite dans la boucle du menu je test si $node->target == "_blank" si c'est le cas j'ajoute l'attribut rel="external" que je gère ensuite simplement avec du javascript non intrusif Smiley cligne
et au passage tu lui met ta classe.
Merci de ta réponse.
J'avais testé ça, mais j'ai finalement opté pour le title, car il est quand même bien de spécifier à l'utilisateur que le lien est externe autrement que par le code ou par un petit picto, ce que le title permet. Smiley smile