Aktiver Hauptmenüpunkt
am 07.01.2008 - 22:34 Uhr in
Hallo Forum,
so langsam schwirrt mir der Kopf. Nun habe ich so viele Beträge zu meinem Problem gelesen und komme doch nicht klar ;-(
Ich verwende Drupal 5.5 und versuche gerade ein neues Theme mit phptemplate zu erstellen.
Nun, prinzipiell funktioniert alles sehr gut, aber ein Punkt bringt mich zur Verzweiflung: ich bekomme es nicht hin, dass ein aktiver Hauptmenüpunkt immer aktiv dargestellt wird, auch wenn ein von ihm abhängiger Unterpunkt ausgewählt wird.
Es gab hier schon viele Diskussionen, die aber meistens auf PrimaryLinks und Sec. hinauswollten.
Ich selber möchte gerne ein neues Menü anlegen oder Menüpunkte einfach im Menü Navigation zufügen.
Wo muss ich nun ansetzen? Muss ich auch bei Drupal 5.5 Anpassungen in der template.php vornehmen?
Wie gehe ich dann korrekt in der CSS vor? Ich habe versucht den Style im Bereich #sitemenu-left anzupassen. Ist das korrekt.
Kann mich hier jemand auf den richtigen Weg bringen?
Gruß
Kai
- Anmelden oder Registrieren um Kommentare zu schreiben
Schau dir mal das Modul
am 08.01.2008 - 07:54 Uhr
Schau dir mal das Modul menutrails an.
--
"Look, Ma, I'm dead!"
Cell, Stephen King
Suchmaschinenoptimierung (SEO) & Drupal
Probier mal das
am 08.01.2008 - 10:57 Uhr
Wenn du template.php um folgende Funktion erweiterst sollt es klappen
<?php
/**
* überschreibt theme_menu_item() aus includes/menu.inc
*
* fügt zusätzlich eine class 'active' für alle aktiven menupunkte zum <li>-element
*/
function phptemplate_menu_item($mid, $children = '', $leaf = TRUE) {
$item = menu_get_item($mid); // hole den jeweiligen menupunkt
if ($item['path'] == 'forum' || ...)
{
if (drupal_get_normal_path($item['path']) == $_GET['q']) {
$active = 'expanded ';
}
else {
$active = 'collapsed ';
}
}
else {
$active = '';
}
return '<li class="' . $active . ($leaf ? 'leaf' : ($children ? 'expanded' : 'collapsed')) .'">'. menu_item_link($mid) . $children .'</li>';
}
?>
Hallo und erst mal danke an
am 08.01.2008 - 11:06 Uhr
Hallo und erst mal danke an euch beide!
Leider kriege ich es immer noch nicht hin. Wahrscheinlich mache ich einen grundsätzlichen Fehler.
Fange ich erst mal bei TIGERs Lösung an:
Hier kommt eine Fehlermeldung in der Zeile mit dem If ... Forum und er meckert über die ... . Die habe ich jetzt einschließlich der || rausgeschmissen und nun meckert er nicht mehr.
Wenn ich nun aber im CSS-Teil
#sidebar-left ul li a.active {}
eingebe, so wird nach wie vor nur der Menüpunkt formatiert, den ich gerade angeklickt habe.
Mache ich hier einen Fehler?
Genauso verhält es sich beim Menutrail.
Als Basis verwende ich übrigens das burnt-Thema
Gruß
Kai
Hauptnavipunkte bestimmen
am 08.01.2008 - 11:35 Uhr
Du musst halt deine Hauptnavigationspunkte bestimmen, und deren Name dann in der Funktion auflisten (z.B. 'forum'). Mit print($item['path']); Kannst du dir den Namen des jeweiligen Menupunktes ausgeben lassen.
Hallo tiger, danke für
am 08.01.2008 - 12:18 Uhr
Hallo tiger,
danke für deine Rückmeldung.
Leider kapier ich das nun nur halb:
ich habe, sagen wir, 5 Menühauptpunkte.
Z.B. habe ich einen Menüpunkt mit dem Titel: "was machen andere?" (Titel in den Menüeinstellungen).
Muss das jetzt zum Beispiel statt 'forum' in die Funktion rein?
Und wie formatiere ich das dann im CSS? über #sidebar-left li.active ??
Sorry, aber ich schein hier voll der Dau zu sein.
Gruß
Kai
Damit funktioniert es bei mir:
am 08.01.2008 - 14:31 Uhr
Ich habe Menu Trails installiert und meine template.php und style.css ergänzt, wie unter http://drupal.org/node/179908 beschrieben. Damit funktioniert es bei mir.
--
Rolf-Christian Otto
Rechtsanwalt und Fachanwalt für Arbeitsrecht in Kassel.
www: www.mosebach-partner.de
Es ist wirklich nicht schwierig
am 08.01.2008 - 17:20 Uhr
Also zuerst holst du mit
<?php
$item = menu_get_item($mid);
print_r($item);
?>
den Menupunkt und gibst zu Testzwecken mit print_r mal die Daten aus.
Dann klickst du im Browser auf deine Menupunkte, die Unterpunkte haben, anhand der Ausgabe siehst du dann, durch was du in meinem Beispiel 'forum' ersetzten musst. In der Klammer listest du einfach die Menupunkte auf.
Im css kannst du dann die Klasse .active stylen.
Array ()
am 08.01.2008 - 18:20 Uhr
Hi tiger,
auch das funzt nicht.
Wenn ich z.B. in der page.tpl.php den Code unter den print content einfüge, dann bekomme ich immer nur ein leeres Array(). Das selbe Phänomen, wenn ich deinen Code in die Seite reinnehme (und Typ der Seite auf PHP umstelle).
So komme ich leider auch nicht weiter ;-(
Funktioniert mit Firefox aber nicht mit dem IE
am 08.01.2008 - 18:22 Uhr
Hallo RC. Otto
... ist das bei dir auch so?
Und müssten die Anpassungen nicht auch ohne das trailsmenu funktionieren=
Gruß
Kai
template.php
am 08.01.2008 - 18:35 Uhr
Du musst die template.php bearbeiten, direkt mit einem Editor, das geht garantiert.
OK, bei mir steht jetzt
am 08.01.2008 - 19:17 Uhr
OK, bei mir steht jetzt jeweils hinter dem path
node/1, node/2, usw.
Durch den danach folgenden "title" weiß ich nun, welcher der node Hauptmenüpunkte darstellt.
Und wie formatiere ich die dann im CSS?
Sind im Hauptmenü (Navigation) also einfach über #sidebar-left li a.active ???
Schau mal die Source an
am 08.01.2008 - 21:35 Uhr
Schau doch einmal den Quelltext an, dann ist ziemlich offensichtlich, welche Klassen du stylen musst.
Nun, es funktioniert jedenfalls ...
am 09.01.2008 - 07:39 Uhr
Hallo Kai,
ich bin wahrlich kein Experte, sondern eher ein "Endanwender" und habe nahezu keine Ahnung von PHP. Deshalb war ich froh, dass es mit Menu Trails funktioniert. Das ging dann ganz einfach:
1. Menu Trails installierren
2. Wie in der Readme.txt von Menu Trails beschrieben, die beiden Zeilen
$vars['primary_links'] = menutrails_primary_links(1);
$vars['secondary_links'] = menutrails_primary_links(2);
in die template.php einfügen.
3. Menu Trails im Backend einstellen.
4. template.php und style.css in dem Betrag http://drupal.org/node/179908 ergänzen, wobei ich die Änderungen der template.php am Ende und der style.css am Anfang der jeweiligen Datei eingefügt habe.
Das war es dann bei mir. Ich kann nicht sagen, dass ich verstanden habe, was ich da getan habe, denn PHP beherrsche ich nicht. Aber es funktioniert und ich bin froh, dass es solche Module und viele freundliche Helfer in den Foren gibt, die es auch solchen Gelegenheitsnutzern wie mir ermöglichen, ohne besondere Kenntnisse von PHP ein entsprechendes Ergebnis zu erzielen.
Gutes Gelingen,
Rolf-Christian
--
Rolf-Christian Otto
Rechtsanwalt und Fachanwalt für Arbeitsrecht in Kassel.
www: www.mosebach-partner.de
Hallo RC. Otto, danke für
am 09.01.2008 - 10:10 Uhr
Hallo RC. Otto,
danke für die erneute Beschreibung.
Mir geht es da wie dir - auch ich bin eher ein Anfänger und suche genau so eine Lösung wie du Sie beschreibst.
Was bei mir krass ist: im Firefox funktioniert das ganze super, aber im IE6 ignoriert er die gegebene CSS-Anweisung
ul li.active-trail > a {
color: #2677e3;
background: url(images/leaf_main.gif) no-repeat left 50%;
width: 130px;
border-bottom: 1px solid #fff;
border-top: 1px solid #fff;
}
Hast du mal einen Auszug aus deiner template.php und style.css für mich?
Und gibt es eine Seite wo ich mir das mal anschauen könnte?
Gruß & Danke
Kai
tiger schrieb Schau doch
am 09.01.2008 - 10:12 Uhr
Schau doch einmal den Quelltext an, dann ist ziemlich offensichtlich, welche Klassen du stylen musst.
Hallo tiger,
danke noch mal für die Hilfe. Leider komme ich hier nicht weiter, da ich mit der Drupal internen CSS-Formatierung noch nicht so vertraut bin (ul, li, li.leaf, ....)
Werde jetzt erst mal mehr auf den Menutrail-Ansatz gehen.
Gruß
Kai
Gerne
am 09.01.2008 - 11:57 Uhr
Zum IE6 kann ich nichts sagen, im IE7 funktioniert es bei mir. Die template.php lautet auszugsweise so:
<?php
(...)
if (theme_get_setting('newsflash_uselocalcontent'))
{
$local_content = drupal_get_path('theme', 'newsflash') . '/' . theme_get_setting('newsflash_localcontentfile');
if (file_exists($local_content)) {
drupal_add_css($local_content, 'theme');
$vars['primary_links'] = menutrails_primary_links(1);
$vars['secondary_links'] = menutrails_primary_links(2);
}
}
function phptemplate_menu_links($links, $attributes = array())
{
if (!count($links)) {
return '';
}
$level_tmp = explode('-', key($links));
$level = $level_tmp[0];
$output = "<ul class=\"links-$level ".$attributes['class']. "\" id=\"".$attributes['id']."\">\n";
$num_links = count($links);
$i = 1;
foreach ($links as $index => $link) {
$output .= '<li';
$output .= ' class="';
if (stristr($index, 'active')) {
$output .= 'active';
}// frontpage AND current-link in menu is <front>
elseif((drupal_is_front_page()) && ($link['href']=='<front>')){
$link['attributes']['class'] = 'active';//add class active to <li
$output .= 'active';//add class active to <a
}
if ($i == 1) {
$output .= ' first'; }
if ($i == $num_links) {
$output .= ' last'; }
$output .= '"';
$output .= ">". l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment']) ."</li>\n";
$i++;
}
$output .= '</ul>';
return $output;
}
function newsflash_menu_item($mid, $children = '', $leaf = TRUE) {
$active_class = in_array($mid, _menu_get_active_trail()) ? ' active-trail' : '';
return '<li class="'. ($leaf ? 'leaf' : ($children ? 'expanded' : 'collapsed')) . $active_class .'">'. menu_item_link($mid) . $children ."</li>\n";
}
?>
Die style.css habe ich einfach am Anfang geändert. Dort lautet sie jetzt so:
/* layout */
li.active-trail > a {
font-weight:bold;
color:#000000;
}
Ich habe also diesen Eintrag gleich als ersten Eintrag gewählt.
Du kannst Dir das gerne auch life ansehen unter www.bnm-p.de. Da es sich aber um unsere "experimentelle" Seite handelt, ist diese über die .htaccess geschützt. Benutzername und Passwort bekommst Du per pm.
Falls es wichtig sein sollte: Ich verwende das Theme Newsflash.
Herzliche Grüße und gutes Gelingen,
Rolf-Christian
--
Rolf-Christian Otto
Rechtsanwalt und Fachanwalt für Arbeitsrecht in Kassel.
www: www.mosebach-partner.de
Auch bei mir Array()
am 21.04.2008 - 08:40 Uhr
Hallo,
auch ich bekomme nur Array() als Ausgabe, wenn ich den Snippet in template.php einfüge. Warum?
Vielen Dank für die Hilfe!
Gruß,
ms