Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#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

NaN schrieb:

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