beim nice-menu einen span-Tag um jeden Menüpunkt hinzufügen
![](http://www.drupalcenter.de/files/noavatar_mini.gif)
am 28.11.2011 - 01:47 Uhr in
Hallo ihr Lieben,
der Betreff beschreibt es glaube ich schon ganz gut.
ich habe ein nice-Menu und ich möchte um jeden Eintrag dort einen zusätzlichen span-Tag einfügen, es soll also nicht mehr
.... <a href.....>Link 1</a>
heißen
sondern:
....<a href....><span>Link 1</span></a>
der span-Tag könnte auch außerhalb vom a-Tag liegen, das würde für mich keinen Unterschied machen.
Ich weiß einfach nicht, wie man das hinbekommen kann, aber Drupal ist doch sooooo flexibel, da muß es doch eine Lösung geben :-)
lieben Gruß
Daniela
- Anmelden oder Registrieren um Kommentare zu schreiben
Hallo Daniela, Ich weiß zwar
am 28.11.2011 - 08:40 Uhr
Hallo Daniela,
Ich weiß zwar nicht wie das beim Nicemenu ist, aber ich nutze das Superfish-Modul und da kannst Du in den generierten Superfish-Blöcken einfach Klassen usw. einfügen. Wenn Du also noch nicht festgelegt bist, kannst Du es ja mal mit dem Superfish-Modul probieren;-)
Besten Gruß
Chris
das Superfish Menü ist mir
am 28.11.2011 - 11:48 Uhr
das Superfish Menü ist mir bekannt.
Da es wesentlich umfangreicher ist und auch viel schwerer zu handhaben, würde ich es gerne mit dem Nice-Menü machen.
Das ist um vieles einfacher zu händeln.
Konkret geht es darum dass es in einem Li-Tag die Klassen menuparent und active-trail gibt, wohlgemerkt in einem Li-Tag und ich würde gerne zwei unterschiedliche Hintergrundbilder vergeben.
Das geht natürlich dann nicht. Dazu bräuchte man um den Link noch einen weiteren Span-Tag.
Aber da muß es doch eine Möglichkeit geben, ich würde wirklich ungerne zu Superfish wechseln :-(
Hallo Daniela,ich habe mich,
am 28.11.2011 - 15:33 Uhr
Hallo Daniela,
ich habe mich, wie du ja schon bei den Videos gesehen bzw. gehört hast, ein wenig mit den beiden Menüs (nice-Menu und Superfishmenu) beschäftigt und in der Tat ist das Superfish-Menu sehr viel umfangreicher und deshalb auch besser einzustellen.
Es gibt aber auch eine "Holzhammer" Methode, wie du beim nice-Menu einen Span um die Links setzen kannst. Das geht aber meines Wissens nicht ohne die themename_ nice_menus_build Funktion zu überschreiben.
Du könntest also so vorgehen:
function themename_nice_menus_build($variables) {
$menu = $variables['menu'];
$depth = $variables['depth'];
$trail = $variables['trail'];
$output = '';
// Prepare to count the links so we can mark first, last, odd and even.
$index = 0;
$count = 0;
foreach ($menu as $menu_count) {
if ($menu_count['link']['hidden'] == 0) {
$count++;
}
}
// Get to building the menu.
foreach ($menu as $menu_item) {
$mlid = $menu_item['link']['mlid'];
// Check to see if it is a visible menu item.
if (!isset($menu_item['link']['hidden']) || $menu_item['link']['hidden'] == 0) {
// Check our count and build first, last, odd/even classes.
$index++;
$first_class = $index == 1 ? ' first ' : '';
$oddeven_class = $index % 2 == 0 ? ' even ' : ' odd ';
$last_class = $index == $count ? ' last ' : '';
// Build class name based on menu path
// e.g. to give each menu item individual style.
// Strip funny symbols.
$clean_path = str_replace(array('http://', 'www', '<', '>', '&', '=', '?', ':', '.'), '', $menu_item['link']['href']);
// Convert slashes to dashes.
$clean_path = str_replace('/', '-', $clean_path);
$class = 'menu-path-' . $clean_path;
if ($trail && in_array($mlid, $trail)) {
$class .= ' active-trail';
}
// If it has children build a nice little tree under it.
if ((!empty($menu_item['link']['has_children'])) && (!empty($menu_item['below'])) && $depth != 0) {
// Keep passing children into the function 'til we get them all.
$children = theme('nice_menus_build', array('menu' => $menu_item['below'], 'depth' => $depth, 'trail' => $trail));
// Set the class to parent only of children are displayed.
$parent_class = ($children && ($menu_item['link']['depth'] <= $depth || $depth == -1)) ? 'menuparent ' : '';
$element = array(
'#below' => '',
'#title' => $menu_item['link']['link_title'],
'#href' => $menu_item['link']['href'],
'#localized_options' => $menu_item['link']['localized_options'],
'#attributes' => array(),
);
$variables['element'] = $element;
$output .= '<li class="menu-' . $mlid . ' ' . $parent_class . $class . $first_class . $oddeven_class . $last_class . '"><span>'. theme('nice_menus_menu_item_link', $variables);
// Check our depth parameters.
if ($menu_item['link']['depth'] <= $depth || $depth == -1) {
// Build the child UL only if children are displayed for the user.
if ($children) {
$output .= '</span><ul>';
$output .= $children;
$output .= "</ul>\n";
}
}
$output .= "</li>\n";
}
else {
$element = array(
'#below' => '',
'#title' => $menu_item['link']['link_title'],
'#href' => $menu_item['link']['href'],
'#localized_options' => $menu_item['link']['localized_options'],
'#attributes' => array(),
);
$variables['element'] = $element;
$output .= '<li class="menu-' . $mlid . ' ' . $class . $first_class . $oddeven_class . $last_class . '"><span>' . theme('nice_menus_menu_item_link', $variables) . "</span></li>\n";
}
}
}
return $output;
}
Veränderungen habe ich an 4 Stelle vorgenommen:
$output .= '<li class="menu-' . $mlid . ' ' . $parent_class . $class . $first_class . $oddeven_class . $last_class . '"><span>'. theme('nice_menus_menu_item_link', $variables);
// Check our depth parameters.
if ($menu_item['link']['depth'] <= $depth || $depth == -1) {
// Build the child UL only if children are displayed for the user.
if ($children) {
$output .= '</span><ul>';
Dort habe ich einen Span-Tag und auch einen span-End-Tag ergänze (ich denke, dass findest du schon)
und an der Stelle (etwas tiefer)
$output .= '<li class="menu-' . $mlid . ' ' . $class . $first_class . $oddeven_class . $last_class . '"><span>' . theme('nice_menus_menu_item_link', $variables) . "</span></li>\n";
Dort habe ich auch einen Span-Tagund einen span-End-Tag ergänzt (das ist für Unterpunkte).
Wie gesagt, dass ist die Holzhammer-Methode und ich würde mir wünschen, es hat noch jemand was besseres auf Lager.
Ich weiß aber auch nicht, wie man die Variablen so abänder kann, dass es funktioniert, aber so eine Möglichkeit wäre sicherlich besser.
vielleicht hat ja noch jemand eine bessere Lösung :-)
viel Grüße
Berthold lausch
Du hast doch schon 2
am 28.11.2011 - 15:31 Uhr
Du hast doch schon 2 Elemente, das li vom Menü und dann den a-Tag innerhalb. Das ist eigentlich ausreichend.
Beste Grüße
Werner
nah da haben wir ja fast
am 28.11.2011 - 15:47 Uhr
nah da haben wir ja fast gleichzeitig was dazu geschrieben....
@Werner
die Klassen menuparent und activ-trail liegen beide in dem Li-Tag beim Nice-Menu, deshalb ist es doch nicht möglich, dort z.B. zwei unterschiedliche Hintergründe zu vergeben.
der A-Tag hat zwar auch noch eine Klasse .active aber das reicht natürlich nicht für einen Pfad, wenn er über mehr als eine Menüebene geht, aus.
Wenn ich da etwas übersehen habe, wäre ich auch um eine bessere Lösung, als ich sie oben angeboten habe, dankbar.
Die Problematik ist ja auch ganz grundsätzlich interessant....
btw: das Superfish-Menü hat dafür extra so eine kleine Unterklasse: (sf-sub-indicator). Diese Lösung ist natürlich besser, aber das Menü ist eben auch wesentlich aufwendiger.
Dann muß man eben Ketten
am 28.11.2011 - 15:53 Uhr
Dann muß man eben Ketten bauen
#menuid ul li.active {....}
#menuid ul li.active a {....}
oder auch
#menuid ul li.active > a {....}
Wo ist das Problem?
Beste Grüße
Werner
in der Tat, da ist was
am 28.11.2011 - 16:50 Uhr
in der Tat, da ist was dran...
so könnte es auch gehen.
Das eine Bild in der Klasse
Li.menuparent
und das andere in der Klasse
Li.active_trail > A
Aber mich würde trotzdem interessieren, wie man beim Nice-Menu bei einem Menüeintrag noch einen span-Tag ergänzen kann (also auf andere möglicherweise einfachere Art und Weise, wie ich es oben beschrieben habe). Das ist wie schon erwähnt grundsätzlich eine interessante Fragestellung.
Du könntest in der
am 28.11.2011 - 17:39 Uhr
Du könntest in der template.php im Theme die Funktion [api:theme_menu_item_link] überschreiben, das gilt aber dann für alle Menüs. Wenn das zu viel ist, mußt Du theme_nice_menu_build aus dem Nice_menu-Modul überschreiben und dort eine andere (selbstgestrickte) Funktion für theme('menu_item_link', $menu_item['link']) verwenden.
Beste Grüße
Werner
ja genau, das ist ja mein
am 28.11.2011 - 18:39 Uhr
ja genau, das ist ja mein Vorschlag von oben, die themename_nice_menu_build in der template.php überschreiben.
(Hatte ich mich da so undeutlich ausgedrückt ?)
ich dachte, es gäbe noch ne bessere Alternative, als die Art und Weise, wie ich es überschrieben habe.
vielen lieben Dank an Werner
am 29.11.2011 - 00:27 Uhr
vielen lieben Dank an Werner und Berthold.
Ich habe mir beide Lösungsansätze angeschaut und beide funktionieren.
Ich hatte gar nicht daran gedacht, es mit so einer "Kette" wie Werner es formuliert hat über CSS zu versuchen. Aber der Ansatz paßt schon mal.
Deshalb hatte ich auch nach einem neuen Span-Tag bei den Menüelementen gefragt.
Die Lösung dafür, also das Überschreiben der themename_nice_menu_build in der template.php von Berthold ist in meinen Augen auch billiant. Dieser Lösungsweg hat natürlich den Vorteil, dass man weitere span-Tags oder auch css-Klassen dort ergänzen kann. Das hilft einem dann vielleicht weiter, wenn man aus anderen Gründen mit den vorgegebenen Klassen und Tags nicht hinkommt.
Es ist schön, dass es hier soviel Sachverstand im Forum gibt.
nochmals vielen Dank
Daniela