Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 03. Januar 2011 21:10
- dylan
- kennt CMS/ms
- Ort: Münsterland
- Registriert: 16. Dezember 2010
- Beiträge: 303
MenüManager Template erstes LI differenzieren
Ich möchte beim CSS-Menu Template das erste <li> anders aufbauen als die Folge-<li>s. Ist es möglich der ersten <li> eine andere CSS zuzuordnen?
Wenn's normalerweise so aussieht:
<div id="menuwrapper">
<ul id="primary-nav">
<li>
<a href="http://www.xyz.de/"><span>Home</span></a>
</li>
<li>
<a href="http://www.xyz.de/index.php?page=kontakt"><span>Kontakt</span></a>
</li>
Hätte ich es gerne so:
<div id="menuwrapper">
<ul id="primary-nav">
<li class="eigeneklasse">
<a href="http://www.xyz.de/"><span>Home</span></a>
</li>
<li>
<a href="http://www.xyz.de/index.php?page=kontakt"><span>Kontakt</span></a>
</li>
…
Oder vielleicht wäre ein style="" besser, weil ja das menuactive als class hinzugefügt wird? Mmhhh?
Ich habe mir das Template vom MenüManager angeguckt, bin php-technisch aber so eine Niete das ich keinen Ansatz für eine Lösung finde. Gibt es eine?
Das Template vom MenüManager
[== php ==]
{* CSS classes used in this template:
#menuwrapper - The id for the <div> that the menu is wrapped in. Sets the width, background etc. for the menu.
#primary-nav - The id for the <ul>
.menuparent - The class for each <li> that has children.
.menuactive - The class for each <li> that is active or is a parent (on any level) of a child that is active. *}
{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}
<div id="menuwrapper">
<ul id="primary-nav">
{foreach from=$nodelist item=node}
{if $node->depth > $node->prevdepth}
{repeat string='<ul class="unli">' 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 or $node->current == true}
{assign var='classes' value='menuactive'}
{if $node->parent == true}
{assign var='classes' value='menuactive menuparent'}
{/if}
{if $node->children_exist == true and $node->depth < $number_of_levels}
{assign var='classes' value=$classes|cat:' parent'}
{/if}
<li class="{$classes}"><a class="{$classes}"
{elseif $node->type == 'sectionheader' and $node->haschildren == true}
<li class="menuparent"><a class="menuparent"><span class="sectionheader">{$node->menutext}</span></a>
{elseif $node->type == 'sectionheader'}
<li><a ><span class="sectionheader">{$node->menutext}</span></a>
{elseif $node->type == 'separator'}
<li style="list-style-type: none;"> <hr class="menu_separator" />
{elseif $node->children_exist == true and $node->depth < $number_of_levels and $node->type != 'sectionheader' and $node->type != 'separator'}
<li class="menuparent"><a class="menuparent"
{else}
<li>
<a
{/if}
{if ($node->type != 'sectionheader' and $node->type != 'separator') or $node->parent == true or $node->current == true }
{if $node->target}target="{$node->target}" {/if}
href="{$node->url}"><span>{$node->menutext}</span></a>
{/if}
{/foreach}
{repeat string='</li></ul>' times=$node->depth-1}
</li>
</ul>
<div class="spacer"></div>
</div>
{/if}
Offline
#2 03. Januar 2011 21:29
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: MenüManager Template erstes LI differenzieren
Wenn es Dir generell einfach nur um das allererste Listen-Element allgemein geht, kannst Du ganz einfach über $smarty.foreach.nameDerForeachSchleife.first prüfen, ob es das erste Element ist und dann die entsprechende Klasse einfügen.
Bsp:
{foreach from=$nodelist item=node name="menuitems"}
...
<li class="{if $smarty.foreach.menuitems.first}spezielle klasse{else}{$classes}{/if}">
...
{/foreach}
Bei Untermenüs wird's etwas komplizierter.
Im .org Forum hatten wir da mal ein paar nette Ideen gesammelt, wie man jede Menü-Liste mit first und last Klassen versehen kann. Finde den Post dort allerdings gerade nicht.
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#3 04. Januar 2011 10:06
- dylan
- kennt CMS/ms
- Ort: Münsterland
- Registriert: 16. Dezember 2010
- Beiträge: 303
Re: MenüManager Template erstes LI differenzieren
Wenn es Dir generell einfach nur um das allererste Listen-Element allgemein geht, kannst Du ganz einfach über $smarty.foreach.nameDerForeachSchleife.first prüfen, ob es das erste Element ist und dann die entsprechende Klasse einfügen.
Ja, es geht nur um das erste Listenelement. Die Untermenüs bleiben wie sie sind.
Ich möchte im ersten Listenelement die border-top entfernen, weil diese einen 1px großen Abstand beschert. Ich bräuchte ein 'border-top: 0 solid #fff;' damit könnte ich das Gestaltungsproblem lösen.
Ich habe das so hinzugefügt:
<li style="{if $smarty.foreach.menuitems.first}border-top: 0 solid #fff;{else}{$classes}{/if}">
Das Ergebnis sieht so aus:
<li style="border-top: 0 solid #fff;">
<li class="menuactive"><a class="menuactive" href="http://www.xyz.de/"><span>Home</span></a>
</li>
<li style="border-top: 0 solid #fff;">
<li>
<a href=" …
Der <li style="border-top: 0 solid #fff;"> wird hinzugefügt, aber nicht geschlossen. Es wird nicht nur beim ersten Listenelement, sondern auch bei den folgenden hinzugefügt.
Als 'style' lässt es sich nicht hinzufügen?
Offline
Seiten: 1