Aktiver Menüpunkt bei Drupal 5

am 14.04.2007 - 23:28 Uhr in
Es gibt zwar eine Anleitung, wie man einen aktiven Menüpunkt als "active" markieren kann (und damit über die CSS-Datei hervorheben kann), aber NICHT für Drupal 5.
In Drupl 5 wird das Hauptmenü ja so eingebunden:
<?php if (isset($primary_links)) : ?>
<?php print theme('links', $primary_links, array('class' => 'links primary-links')) ?>
<?php endif; ?>
<?php if (isset($secondary_links)) : ?>
<?php print theme('links', $secondary_links, array('class' => 'links secondary-links')) ?>
<?php endif; ?>
Wie kann man nun hier den aktiven Menüpunkt hervorheben?
Das ist ja schwer möglich, vorallem weil jetzt in Drupal 5 das ganze in die Funktion "print theme()" gewandert ist.
Zuvor ging das ja so:
http://drupal.org/node/46020
Aber was macht man nun in Drupal5???
Und wo finde ich mehr Infos über "print theme(...)" in Zusammenhang mit der Hauptnavigation?
Vielen Dank.
- Anmelden oder Registrieren um Kommentare zu schreiben
Menüpunkt nicht "active" wenn "<front>" statt "node/2"
am 15.04.2007 - 00:17 Uhr
Ich hab inzwischen herausgefunden, dass der aktive Menüpunkt automatisch als "active" markiert wird und damit aufgrund meiner CSS-Datei hervorgehoben wird, allerdings nur dann, wenn die einzelnen Menüpunkte in der Form "node/11", "node/12" einen Pfad verlinkt bekommen.
Um aber den Menüpunkt "Startseite" nicht eine URL "../?q=node/2" zuweisen zu müssen, gibt es ja die Möglichkeit, als Pfad bei diesem Menüpunkt statt "node/2" den Ausdruck "<front>" einzugeben.
Sobald ich aber "node/2" durch "<front>" ersetze, funktioniert zwar alles bestens und als Pfad wird eben nur der Domainname angezeigt (das ist also super), aber der Menüpunkt "Startseite" ist nicht mehr als "active" markiert.
Hier fehlt wohl etwas in der Programmierung.
Kann mir wer sagen, wo das programmiert ist, dass aktive Menüpunkte mit "active" markiert werden? Wenn ich das finde, kann ich das eventuell erweitern, dass es auch mit "<front>" funktioniert.
Vielen Dank.
Oder löst sich das Problem automatisch, wenn man auf suchmaschinenfreundliche URLs umstellt (was ich erst später machen wollte und daher noch nicht aktiviert habe)???
Lösung gefunden
am 15.04.2007 - 00:59 Uhr
Für alle, die es interessiert, habe eine Lösung gefunden.
Habe in der Datei "common.inc" bei der Funktion l() folgenden Code zusätzlich eingebaut:
if (($path == "<front>") && ($_GET['q'] == "node")) {
if (isset($attributes['class'])) {
$attributes['class'] .= ' active';
}
else {
$attributes['class'] = 'active';
}
}
Funktioniert prima!!!
Aber ist es wirklich nötig, common.inc umzuschreiben?
Darf man common.inc umschreiben, ohne dass man später Probleme hat (bei Updates, etc)??
bei mir sieht das so aus...
am 21.04.2007 - 01:21 Uhr
im template:
<ul>
<?php
foreach($primary_links AS $plinks){
if($plinks['href'] == '<front>'){
$plinks['href'] = '';
}
if($_GET['q'] == $plinks['href']){
$cclass = ' id="current"';
}elseif($_GET['q'] == 'node' AND $plinks['href'] == ''){
$cclass = ' id="current"';
}
else{
$cclass = '';
}
$navbar .= "<li$cclass><a href=\"/".drupal_get_path_alias($plinks['href'])."\"><span>".$plinks['title']."</span></a></li>";
}
echo $navbar;
?>
</ul>
----------------------------------------
Browser Automatisierung / SEO On- und Offpage - http://www.cybercore.de
Wo eingebaut?
am 23.04.2007 - 21:37 Uhr
Wo genau in welcher Datei hast Du das eingebaut?
Frage zu dem Thema "aktive Links"
am 08.05.2007 - 14:53 Uhr
Hallo, ich habe auch Fragen zu dem Thema "aktive Links":
Ich bin dabei eine bestehende Site auf Drupal 5.1 umzustellen, Theme Barlow in abgewandelter Form.
Die bestehenden Domain-URLs sollen sich nicht verändern, konnte über den Bereich zum Menü bearbeiten als Admin auch gleich angelegt werden.
www.meine-site.de/unterseite/
Nun gibt es aber auf der Site u.a. folgendes Problem:
- die "aktiven Links" werden im Menü-Block, an der Seite, nicht farblich hervor gehoben.
Dieses Problem ist unabhängig davon, welchen Theme ich nutze.
Ich vermute es liegt daran, dass wir die bestehenden URL´s beibehalten wollen, was sehr wichtig ist.
Ich habe auf den Seiten hier und auch Drupal.org versucht eine funktionierende Lösung zu finden, aber negativ. Leider verstehe ich nicht viel von php und es kann daran liegen, dass ich die Vorschläge hier auf der Site an falscher Stelle eingefügt habe oder nicht zu meiner Site passend modifiziert habe.
Ich hoffe jemand weiß Rat und kann mir weiterhelfen,
Chenook
@DrupalFan: Was genau willst
am 08.05.2007 - 16:28 Uhr
@DrupalFan: Was genau willst du denn erreichen? Dass jeder aktive Link eine class «active» bekommt? Oder soll diese Klasse ins Listenelement, das gerade gewählt ist? Oder gar in alle aktiven Listenelemente bei einer verschachtelten Navigation, also auch in die übergeordneten Elemente des aktiven?
@Chenook: Das kann verschiedene Gründe haben. Hast du einen Link zu deiner Seite? Welchen php-Code hast du wo eingefügt? Wie sieht dein html aus? Wie das css?
Wie Hauptmenüpunkt immer als "active" markieren?
am 08.05.2007 - 22:01 Uhr
Was ich erreichen will:
Immer wenn man auf einen der Hauptmenüpunkte klickt, soll dieser durch "active" markiert werden, damit durch die entsprechende CSS-Anweisung der Menüpunkt "unterlegt" und somit hervorgehoben wird. Damit sieht man also, bei welchem der Hauptmenüpunkte man sich befindet!!!!!
Gibt es dafür eine Lösung?
Die Teillösung für die Startseite habe ich ja oben schon gepostet.
Jetzt habe ich noch folgedes Problem:
Klickt man auf einen Haupt-Menüpunkt, z. Bsp. "Forum", wird "Forum" als active hervorgehoben. Wenn ich dann aber auf ein Forum klicke (dieses öffne) oder weiter auf einen Forumbeitrag klicke, dann ist der Hauptmenüpunkt "Forum" nicht mehr "active", also nicht mehr marktiert, das soll er aber bleiben.
Das gleiche passiert bei "Blogs": Sobald ich auf einen Blogeintrag klicke, wird der Menüpunkt "Blogs" nicht mehr als active hervorgehoben.
Wie schaut eine Lösung aus, die immer funktioniert, egal wie tief in welche Ebene man reinklickt (Forum, Forumname, Forum-Beitrag, Forum).
Vielen Dank.
Dafür gibts schon ne
am 08.05.2007 - 23:11 Uhr
Dafür gibts schon ne Lösung, ja.
Core-Dateien zu hacken ist aber keine besonders elegante Art. Dies kann zu Problemen bei Updates führen. Inhalte werden in Drupal im Normalfall über theme_whatever() ausgegeben. Diese Funktion lässt sich fürs jeweilige Template überschreiben. Ausführliche Infos dazu findest du unter http://drupal.org/node/11811
Unter includes/menu.inc findest du die Funktion, die die einzelnen li-Elemente des Menus generiert.
<?php
function theme_menu_item($mid, $children = '', $leaf = TRUE) {
return '<li class="'. ($leaf ? 'leaf' : ($children ? 'expanded' : 'collapsed')) .'">'. menu_item_link($mid) . $children ."</li>\n";
}
?>
Diese passen wir nun an unsere Bedürfnisse an. Füge dazu den folgenden Code in die template.php (falls diese Datei nicht existiert, erstelle sie) deines aktiven Themes ein:
<?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 ((drupal_get_normal_path($item['path']) == $_GET['q']) // pfad aktiv?
|| (drupal_is_front_page() && $item['path'] == '<front>') // oder sind wir auf der startseite?
|| menu_in_active_trail($mid)) { // oder sind wir irgendwo im aktiven pfad, also in einem übergeordneten element des gerade angewählten?
$active = ' active';
} else {
$active = '';
}
return '<li class="' . $active . ($leaf ? 'leaf' : ($children ? 'expanded' : 'collapsed')) .'">'. menu_item_link($mid) . $children ."</li>\n";
}
?>
Unter http://api.drupal.org/ findest du eine ausführliche Doku der Funktionen.
In deinem CSS kannst du nun alle aktiven Elemente folgendermassen ansprechen:
ul.menu li.active {
/* deine formatierungen für die aktiven menuelemente */
}
Guter Ansatz, bitte vervollständigen
am 09.05.2007 - 12:34 Uhr
Danke für den guten Ansatz.
Habe jetzt meine Teillösung in common.inc ausgebaut und diese Lösung eingebaut. Leider funktionert es nicht:
- wenn ich auf "Startseite" klicke, wird dieser Menüpunkt nicht als "active" gekennzeichnet. Mit meiner Lösung ging das, das war ja der Zweck meiner Teillösung.
- wenn ich auf Menüpunkte klicke, die in der Form "?q=node/11" verlinkt sind, funktionier es nicht!!!! Keine der Bedingungen ist dann erfültt, habe eine "echo" eingebaut, sehe das also eindeutig, hier wird nichts ausgegeben.
- wenn ich auf "Forum" oder "Blogs" klicke, funktioniert das zwar, aber sobald ich auf einen Forumeintrag oder Blogeintrag klicke, ist die Markierung weg.
Es hat sich also zum "Normalzustand" nichts verändert. Bin nicht draufgekommen, woran das liegt. Vielleicht kannst Du nochmal korrigieren.
Vielen Dank.
Zusatz
am 09.05.2007 - 12:37 Uhr
Wo ist eigentlich genau das Problem?
Warum kann Drupal selbst das nicht richtig darstellen (aktive Menüpunkte immer(!) als "acitve" kennzeichnen, egal wo man sich befinden, egal ob man auf irgendeinen Forumbeitrag klickt oder noch tiefer). Das wäre dann doch ein Drupal-Fehler, den man melden sollte, oder?
Oder funktioniert das nur bei bestimmten und bei selbst erstellten Themes nicht? Aber dann sollte es doch schon Lösungen dafür geben, bei denen man abschauen könnte.
Eigentlich könnte man sowas
am 09.05.2007 - 13:56 Uhr
Eigentlich könnte man sowas von einem CMS erwarten, da hast du Recht. Hier verhält sich Drupal mehr als mangelhaft. Mit Version 6 wird sich das aber zum Glück ändern.
Einen kleinen Fehler hatte mein Code tatsächlich. Hier die korrekte Version
<?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 ((drupal_get_normal_path($item['path']) == $_GET['q']) // pfad aktiv?
|| (drupal_is_front_page() && $item['path'] == '<front>') // oder sind wir auf der startseite?
|| menu_in_active_trail($mid)) { // oder sind wir irgendwo im aktiven pfad, also in einem übergeordneten element des gerade angewählten?
#$active = ' active'; falsch. führt zu klassen wie z.b. 'activeexpanden' statt 'active expanded'
$active = 'active '; # so ists korrekt
} else {
$active = '';
}
return '<li class="' . $active . ($leaf ? 'leaf' : ($children ? 'expanded' : 'collapsed')) .'">'. menu_item_link($mid) . $children .'</li>\n';
}
?>
Dieser Code funktioniert genau so wie du ihn gerne hättest. Allerdings, das habe ich völlig vergessen, greift er nur für ein normales Menu und nicht für die primary und secondary links. Die werden durch eine eigene Funktion generiert.
Ich mag dieses Primary- und Secondary-Links Konzept überhaupt nicht.
Du kannst nun entweder deine Links in ein normales Menu packen und der Code wird problemlos funktionieren oder du schaust, wie die Primary- und Secondary-Links ausgegeben werden und passt dann diese Funktion für dein Theme entsprechend dieser Vorlage hier an...
Nur um sicherzugehen: Du hast meinen Code schon in der template.php deines Themes eingebaut und nicht in der common.inc, oder?
@elias -aktive links nicht sichtbar-
am 10.05.2007 - 01:28 Uhr
Sorry, komme erst jetzt zu einer Antwort. Ich mußte eine der Sites die es betrifft erst öffentlich stellen, um den Link hier rein zu posten.
Hast du einen Link zu deiner Seite?
der Link wäre www.last-minute-reise-tours.de
Welchen php-Code hast du wo eingefügt?
Den Code, der hier oben auf der Seite steht habe ich, nacheinander in template.php, page.tpl.php, node.tpl.php und block.tpl.php eingefügt und probiert was da passiert, in Bezug auf die erwünschten hervorgehobenen aktiven Links im Menü *g* - nix ist passiert- (Ich glaube es ist dringend nötig wenigstens PHP-Grundwissen zu erwerben)
Wie sieht dein html aus? Wie das css?
Meinst Du meine Kenntnisse oder die des Templates?
Ich bin derzeit dabei noch eine Site auf drupal um zu stellen. Dort habe ich mit einem anderen Template die selben Probleme. Sie ist aber noch nicht öffentlich. Es liegt wohl daran, dass wir die derzeit bestehenden URL´s der gesamten Site erhalten wollen. Solange ich noch die vom System vergebenen URL node/xx unverändert ließ war es ok. Nach der Änderung, keine Aktiven Links und die Menüs mit Unterpunkten klappen nicht mehr auf.
Kann ich den unterdessen weiter unten eingefügten PHP-Code bei meiner Site auch einfügen? Es hört sich nach einem ähnlichen Problem an.
greets
Chenook
@Chenook: Du kannst meinen
am 10.05.2007 - 10:30 Uhr
@Chenook: Du kannst meinen Code benutzen. Sollte für deine Zwecke perfekt passen.
@DrupalFan: Hast du den Code von CyberCore angesehen? Kommt deinem Ziel schon nahe. Einfügen musst du den Code in der page.tpl.php. Allerdings wird dieser Code z.B. den Menueintrag Blogs nicht hervorheben, wenn ein einzelner Beitrag angeklickt ist. Oder in einem verschachtelten Menu wird nur der jeweils aktive Punkt und nicht der aktive Pfad hervorgehoben. Diese Fälle werden in meinem Code durch menu_in_active_trail($mid) abgedeckt. Allerdings ist die Menuid im $primary_links Array nicht verfügbar.
Hier ein möglicher Ansatz, wie du das Ganze für die primary- und secondary-links erreichen kannst:
1. (template.php) Erklärung siehe meine vorherigen Posts...
<?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 ((drupal_get_normal_path($item['path']) == $_GET['q']) // pfad aktiv?
|| (drupal_is_front_page() && $item['path'] == '<front>') // oder sind wir auf der startseite?
|| menu_in_active_trail($mid)) { // oder sind wir irgendwo im aktiven pfad, also in einem übergeordneten element des gerade angewählten?
#$active = ' active'; falsch. führt zu klassen wie z.b. 'activeexpanden' statt 'active expanded'
$active = 'active '; # so ists korrekt
} else {
$active = '';
}
return '<li class="' . $active . ($leaf ? 'leaf' : ($children ? 'expanded' : 'collapsed')) .'">'. menu_item_link($mid) . $children .'</li>\n';
}
?>
2. (template.php) Mit dieser Funktion lassen sich phptemplate Variablen überschreiben. Je nach Theme mag hier schon etwas vorhanden sein, mein Beispiel basiert auf Garland. Wichtig sind die von mir hinzugefügten Zeilen, die die primary- und secondary-links variablen überschreiben.
<?php
function _phptemplate_variables($hook, $vars) {
if ($hook == 'page') {
if ($secondary = menu_secondary_local_tasks()) {
$output = '<span class="clear"></span>';
$output .= "<ul class=\"tabs secondary\">\n". $secondary ."</ul>\n";
$vars['tabs2'] = $output;
}
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars);
}
$vars['primary_links'] = primary_secondary_links(variable_get('menu_primary_menu', 1)); # $primary_links überschreiben
$vars['secondary_links'] = primary_secondary_links(variable_get('menu_secondary_menu', 1), 'secondary_links'); # $secondary_links überschreiben
return $vars;
}
return array();
}
?>
3. (template.php) Nun noch die Funktion, die die primary- und secondary-Links über menu_tree() generiert, wodurch diese links gleich wie ein normales menu ausgegeben werden. dadurch greift die überschreibung von theme_menu_item() nun auch für primary- und secondary-links.
<?php
function primary_secondary_links($pid, $id='primary-links') {
if ($tree = menu_tree($pid)) {
return '<ul id="'.$id.'">'. $tree .'</ul>';
}
}
?>
4. in page.tpl.php kannst du die primary links nun durch
<?php
print $primary_links;
?>
5. dein css muss jetzt natürlich noch angepasst werden ...
was mir noch eingefallen
am 10.05.2007 - 10:50 Uhr
was mir noch eingefallen ist: menu_tree gibt den gesamten baum (alle ebenen) zurück. für primary- und secondary-links ist wahrscheinlich aber nur jeweils eine ebene erwünscht.
hier eine quick and dirty lösung (ich habe einfach menu_tree() genommen und einige zeilen rausgelöscht):
<?php
function primary_secondary_links($pid, $id='primary-links') {
$menu = menu_get_menu();
$output = '';
if (isset($menu['visible'][$pid])) {
foreach ($menu['visible'][$pid]['children'] as $mid) {
$output .= theme('menu_item', $mid);
}
}
return '<ul id="'.$id.'">'. $output .'</ul>';
}
?>
@ elias
am 16.05.2007 - 00:32 Uhr
Hallo,
danke für die Hilfe. Ich habe es nicht hin bekommen und wir lassen es erst mal so mit den Links. Von wegen der Up-dates sollen auch in den Kernkomponenten auch nichts geändert werden. Aber ich werde mich doch mal wenigstens in die Grundstruktur von PHP einarbeiten, dass es mir verständlicher wird.
greets
Chenook
@Chenook
am 16.05.2007 - 15:57 Uhr
Wo hast du denn den Code eingefügt? Wenn du ihn in der template.php deines Themes einfügst, änderst du nix an den Kernkompenenten. Eben aus diesem Grund werden Inhalte in Drupal ja über theme_whatever ausgegeben. Ich kann nur nochmals auf die theme function doku verweisen: http://drupal.org/node/11811
Natürlich habe ich das in
am 23.05.2007 - 15:25 Uhr
Natürlich habe ich das in der template.php eingebaut.
Und heute nochmal, aber es funktioniert nicht!!!!
Das was ich will:
Vom Hauptmenü (primary) soll immer der aktuell gewählte Menüpunkt als "active" markiert bleiben, egal wie tief man irgendwelche Untermenüs oder im Forum oder im Blog usw. klickt.
So wie es aussieht, gibt es dafür KEINE Lösung. Schade.
Bitte wenn jemand doch eine Lösung hat, diese bitte kompakt posten, dann versuch ich es nochmal. Danke schon jetzt für die Hilfe.
Also bei mir klappts
am 23.05.2007 - 18:59 Uhr
Also bei mir klappts wunderbar.
Hast du einen Link zu deiner Site?
Hier nochmals kompakt:
Kommt in template.php
<?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 ((drupal_get_normal_path($item['path']) == $_GET['q']) // pfad aktiv?
|| (drupal_is_front_page() && $item['path'] == '<front>') // oder sind wir auf der startseite?
|| menu_in_active_trail($mid)) { // oder sind wir irgendwo im aktiven pfad, also in einem übergeordneten element des gerade angewählten?
#$active = ' active'; falsch. führt zu klassen wie z.b. 'activeexpanden' statt 'active expanded'
$active = 'active '; # so ists korrekt
} else {
$active = '';
}
return '<li class="' . $active . ($leaf ? 'leaf' : ($children ? 'expanded' : 'collapsed')) .'">'. menu_item_link($mid) . $children .'</li>\n';
}
function primary_secondary_links($pid, $id='primary-links') {
$menu = menu_get_menu();
$output = '';
if (isset($menu['visible'][$pid])) {
foreach ($menu['visible'][$pid]['children'] as $mid) {
$output .= theme('menu_item', $mid);
}
}
return '<ul id="'.$id.'">'. $output .'</ul>';
}
function _phptemplate_variables($hook, $vars) {
if ($hook == 'page') {
if ($secondary = menu_secondary_local_tasks()) {
$output = '<span class="clear"></span>';
$output .= "<ul class=\"tabs secondary\">\n". $secondary ."</ul>\n";
$vars['tabs2'] = $output;
}
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars);
}
$vars['primary_links'] = primary_secondary_links(variable_get('menu_primary_menu', 1)); # $primary_links überschreiben
$vars['secondary_links'] = primary_secondary_links(variable_get('menu_secondary_menu', 1), 'secondary_links'); # $secondary_links überschreiben
return $vars;
}
return array();
}
?>
In der page.tpl.php werden die primary links neu so ausgegeben:
<?php
print $primary_links;
?>
Und diesen Code musst du aus der page.tpl.php löschen:
<?php
<?php if (isset($primary_links)) :
?>
<?php
print theme('links', $primary_links, array('class' => 'links primary-links'))
?>
<?php
endif;
?>
<?php
if (isset($secondary_links)) :
?>
<?php
print theme('links', $secondary_links, array('class' => 'links secondary-links'))
?>
<?php
endif;
?>
?>
Danach kannst du die aktiven Menupunkte per CSS stylen:
#primary-links li.active {}
#secondary-links li.active {}
.menu li.active{}
Erklärung siehe oben...
@Chenook
am 23.05.2007 - 19:06 Uhr
Habe gerade gesehen, dass deine Hauptnavigation mit primary links aufgebaut ist. In diesem Fall gilt für dich ebenfalls der Code aus meinem vorherigen Post.
dieses neue modul könnte da
am 30.05.2007 - 08:33 Uhr
dieses neue modul könnte da auch hilfreich sein: http://drupal.org/project/menutrails
Modul "Menu Trails"
am 01.06.2007 - 12:19 Uhr
Danke für den Tipp.
Ganz habe ich noch nicht verstanden, was dieses Modul genau macht. Kannst Du es erklären?
Hat es jemand schon verwendet?
Danke.
DrupalFan wrote: Ganz habe
am 05.06.2007 - 19:07 Uhr
Ganz habe ich noch nicht verstanden, was dieses Modul genau macht. Kannst Du es erklären?
Hat es jemand schon verwendet?
nicht wirklich, hatte nur die diskussion verfolgt, da ich das bei meinem theme, das noch nicht existiert, auch benötigen werde. allerdings noch mit einer dritten ebene. dafür scheint das wiederum neue sliced menu modul noch besser geeignet zu sein. die blocks müssten sich ja mit theme regions in den header integrieren und zB wie ein normales primary menu stylen lassen. melde mich sobald ich´s getestet hab. ;)
Das Modul funktioniert
am 05.06.2007 - 22:15 Uhr
Puh... ich habe mich jetzt einige Stunden mit dem Thema beschäftigt, denn ich bin in manchen Sachen Perfektionist. Und die Navigation ist mir ein wichtiges Anliegen, damit sich die Nutzer zurecht finden.
Ich habe jetzt das Modul Menu Trails ausprobiert und es funktioniert (fast) perfekt. Aber von vorn:
Zum Downloaden muss man sich die 3 Dateien menutrails.info, menutrails.module und README.txt aus dem CSV Verzeichnis laden (zu finden unter "Browse the CVS repository"), denn es fehlt noch ein Download-Link auf der Projektseite.
Das Modul hochladen und aktivieren und schon erscheint unter "Einstellungen" ein Menüpunkt für das Modul.
Hier kann man jetzt angeben zu welchem Menüeintrag ein bestimmter Node-Typ gehört. Und es wird noch besser: Man kann sogar einzelne Kategorien zu Menüeinträgen zuordnen und sogar jedes einzelne Node beliebig zuordnen.
Damit das funktioniert muss zusätzlich ein kleiner Code-Schnippsel in die template.php Datei eingefügt werden. Diesen findet Ihr in der README.txt Datei.
So und jetzt das Manko: Leider unterstützt das Modul noch keine Views und wie es aussieht auch keine Taxonomie-Seite, denn diese sind ja eigentlich Views. Aber der Programmierer hat die bereits als "noch zu verwirklichen" in die Kommentare geschrieben. Man kann also hoffen.
FAZIT: Ich habe jetzt den Code von hier oben und zusätzlich das Modul im Einsatz. Der Code von hier ermöglicht es, dass die Startseite richtig aktiv angezeigt wird, wenn man auf Ihr ist und das Modul lässt auf einzelnen Artikelseiten den richtigen Hauptmenüpunkt aufläuchten.
-----
Christian geht denhartenweg.
Kannst du einem unbedarften
am 06.06.2007 - 09:56 Uhr
Kannst du einem unbedarften "Drupal-Dummi" genauer erklären, wo ich den Download finde?
Ich sehe nix mit "Browse the CSV repository... und noch nicht mal ein CSV-Verzeichnis (schäm...)
Ich muss nämlich eine 3-stufige Navigation realisieren, bei denen
natürlich die zuvor angewählten Elter-Menüpunkte aktiv bleiben sollen...
Hab' vielen Dank!
Pfoto
CVS
am 06.06.2007 - 14:58 Uhr
Findest Du hier:
http://cvs.drupal.org/viewcvs/drupal/
und
http://cvs.drupal.org/viewcvs/drupal/contributions/modules/menutrails/
Bei mir funktioniert menutrails nicht
am 06.06.2007 - 15:37 Uhr
Das klingt wirklich alles sehr schön und schaut auch gut aus, ich habe das Modul "menutrails" jetzt installiert und aktiviert, aber es funktioniert nicht!!! Es tut sich gar nichts.
Unter den Modul-Einstellungen kann ich bei
- Menu Trails By Node Type
den übergeordneten Menüpunkt angeben (z. Bsp. für alle Blog-Nodes), aber danach tut sich nichts, der Hauptmenüpunkt wird nicht(!) als "active" markiert, auch nicht im html-code, habe kontrolliert.
Der 2. Teil bei den Modul-Einstellungen
- Menu Trails By Category in Forum
funktioniert nicht, der vergisst sofort die Einstellung, die wird nie gespeichert. Scheint noch nicht programmiert zu sein.
Weitere Einstellmöglichkeiten habe ich keine.
Daher verstehe ich nicht, was Du mit
Man kann sogar einzelne Kategorien zu Menüeinträgen zuordnen und sogar jedes einzelne Node beliebig zuordnen.
meinst.
Hat jemand eine Ahnung, warum sich bei mir bei diesem Modul absolut nichts tut und wie ich da draufkommen kann, woran das liegt?
Viel zu kompliziert
am 06.06.2007 - 16:08 Uhr
Also hier nur mal eine Zwischenbemerkung:
Das ganze ist viel zu kompliziert. Normalerweise ist es doch nicht schwer, einen Menüpunkt als "aktiv" zu markieren, aber in Drupal braucht man dafür haufenweise Code, ein eigenes Modul mit hunterten Zeilen Code. Das bläht die Seite voll auf.
Bereits im Menü "menu" sind einige "trail-Funktionen" drin, die ähnliches machen, aber anscheinend nicht vollständig, um übergeordnete Menüpunkte zu markieren.
Jetzt braucht man noch ein Modul und dann geht es vielleicht noch immer nicht in allen Fällen ... Das ist doch viel viel zu kompliziert.
DAS PROBLEM:
Schaut auch doch mal www.drupal.org an: Die Ladezeit dieser Seite beträgt mehrerer Sekunden, bei speziellen Aktionen (einfache Suche oder auch anderes) wartet man fast eine Minute oder zumindest viele viele Sekunden.
Eine Seite, die viele Sekunden zum Laden braucht, ist leider unbrauchbar.
Wenn es keine Möglichkeit gibt, Drupal zu beschleunigen, sehe ich hier ein riesiges Problem, mit jedem neuen Modul wird das Ding langsamer und langsamer ... EWIG SCHADE um das tolle Drupal.
Modul geht gar nicht
am 06.06.2007 - 16:34 Uhr
Ich habe das ganze Modul unter die Lupe genommen, es geht überhaupt nicht:
Wenn ich in "menutrails.module" in der Funktion "menutrails_primary_links()" innerhalb der foreach-Schleife die Zeile
$active = TRUE;
fix einbaue (also oberhalb der Zeile, wo das $active verwendet wird und außerhalb der IF-Abfrage), dann funktionert es trotzdem nicht.
In diesem Fall müsste doch "jeder" Menüpunkt als "active" markiert werden, wird aber nicht, habe im html-code kontrolliert.
Was ist hier los?
Hast du den entsprechenden
am 06.06.2007 - 19:47 Uhr
Hast du den entsprechenden Code schon in deine template.php eingefügt?
Menu Trails module implements an "active trail" in primary/secondary links, setting class="active" on parents to the current menu item.
It also allows nodes to be categorized by type or taxonomy as falling "under" existing menu items, triggering the above functionality.
To implement:
1) Install the module
2) Place the code-snippet below into your template.php file. You may want to excerpt the two lines which set $vars['primary_links'] and $vars['secondary_links'] and place them into a pre-existing _phptemplate_variables() funtion wherever page variables are set.
3) Visit admin/settings/menutrails to classify nodes
4) Enjoy!
CODE SNIPPET:
This is an example _phptemplate_variables() implementation. It will keep first level primary links open when secondary links are selected.
You need to add this code (or something like it) to your template.php file for this module to do anything useful.
function _phptemplate_variables($hook, $vars = array()) {
switch ($hook) { // what function is active?
case 'page': // page is where menu comes into play
// set the primary links
$vars['primary_links'] = menutrails_primary_links(1);
// you may want to also override secondary_links
$vars['secondary_links'] = menutrails_primary_links(2);
break;
}
}
Ist eingebaut
am 06.06.2007 - 23:12 Uhr
Ja natürlich, ist eingebaut.
Hab sogar nachgewiesen:
Wenn ich das Modul "menutrails" unter Verwalten deaktiviert, geht nichts mehr, weil eben immer eine Fehlermeldung kommt, denn da gehört ja auch in der template.php die Funktion wieder entfernt.
Geht einfach nicht.
DrupalFan wrote: Daher
am 08.06.2007 - 08:12 Uhr
Daher verstehe ich nicht, was Du mit
Man kann sogar einzelne Kategorien zu Menüeinträgen zuordnen und sogar jedes einzelne Node beliebig zuordnen.
meinst.
Auf der Einstellungs-Seite des Menutrail Moduls kannst du die Menüzugehörigkeit auch nach Taxonomie Kategorien einstellen. Die Einstellung für einzelne Nodes findest du wenn du einen neuen Node anlegst oder einen bestehenden bearbeitest. Dort unter "Menüeinstellungen" findest du "Übergeordneter Menüpunkt:"
Achte auch darauf, dass du als übergeordneten Menüpunkt die Primary-Links nimmst und nicht wie ich erst fälschlicherweise die "Inhalte erstellen"-Typen ausgewählt hatte.
Als Beweis das es funktioniert kannst du auf meiner Seite denhartenweg mal auf "Blog" und anschließend auf einen Blogeintrag klicken. Wie du sehen wirst bleibt der Hauptmenüpunkt aktiv.
-----
Christian geht denhartenweg.
Woran könnte es liegen?
am 08.06.2007 - 11:55 Uhr
Ich hab das Taxonomie-Modul noch nicht wirklich in Verwendung, ist zwar aktiviert aber es sind keine Kategorien oder Stichwörter angelegt.
Natürlich habe ich auch die Primary-Links bei den menutrails-Einstellungen angegeben, habe danach aber auch die anderen Probiert als Gegenproble.
Woran könnte es liegen, dass menutrails bei mir nicht funktioniert? Oder wie könnte ich draufkommen?
Vielen Dank.
Auch Probleme
am 08.06.2007 - 16:44 Uhr
Es ist zum verzweifeln. Bei meiner einen Seite hat es mit den Menutrails wunderbar funktionert... jetzt wollte ich das bei einer anderen Drupalseite installieren und habe plötzlich auch massive Probleme. Einmal gab es hefftige Fehlermeldungen und das andere Mal funktionierte das Modul nicht (es wurde keine Klasse "active" darangehangen).
Ich werde mich heute oder morgen nochmal intensiv dransetzen und versuche das zu lösen.
@DrupalFan ich kann dich jetzt total verstehen, es ist schrecklich wenn etwas da funktioniert aber dort nicht.
-----
Christian geht denhartenweg.
-----
Christian geht denhartenweg.
Ja, das ist wirklich nervig.
am 08.06.2007 - 20:54 Uhr
Ja, das ist wirklich nervig.
Noch eine Lösungmöglichkeit
am 11.06.2007 - 16:33 Uhr
Bei mir hat nicht alles funktioniert, hier meine Lösung:
Für die Startseite in den primary-links diese Funktion in die template.php reinspielen, bzw. eine anlegen, wenn keine vorhanden ist:
<?php
/**
* Implementation of theme_menu_links().
*
* Add active class to current primary-menu item links.
*/
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']. "\">\n";
foreach ($links as $index => $link) {
$output .= '<li';
if (stristr($index, 'active')) {
$output .= ' class="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 .= ' class="active"';//add class active to <a
}
$output .= ">". l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment']) ."</li>\n";
}
$output .= '</ul>';
return $output;
}
?>
In der page.tpl.php die primary- und secondary-links entsprechend anpassen, bspw. im zen-theme :
<?php print theme('menu_links', $primary_links); ?>
<?php print theme('menu_links', $secondary_links); ?>
- oder in garland und barlow.:
<?php print theme('menu_links', $primary_links, array('class' => 'links primary_menu')) ?>
<?php print theme('menu_links', $secondary_links, array('class' => 'links secondary_menu')) ?>
Um einen Startseiten-link in anderen Menüs active zu machen folgende diese Funktion in die template.php reinspielen, bzw. eine anlegen, wenn keine vorhanden ist: (http://drupal.org/node/87902)
<?php
/**
* Add frontpage 'active' state handling to menu links
* and section 'active' state handling when child is active
* and menu-[title] as css id
*
* modified from code originally posted at
* rogerlopez.net/handbook/primary_menu_tweaks
*
*/
function phptemplate_menu_item_link($item, $link_item) {
static $menu;
if (!isset($menu)) {
$menu = menu_get_menu();
}
$mid = $menu['path index'][$link_item['path']];
$front = variable_get('site_frontpage','node');
$attribs = isset($item['description']) ? array('title' => $item['description']) : array();
$attribs['id'] = 'menu-'. str_replace(' ', '-', strtolower($item['title']));
if((($link_item['path']=='<front>') && ($front==$_GET['q'])) ||
(menu_in_active_trail($mid))){
$attribs['class'] = 'active';
}
return l($item['title'], $link_item['path'], $attribs);
}
?>
Funktioniert für <front> in anderen Menüs. Funktioniert in garland, barlow, nonzero und zen (teilweise muß das css angepaßt werden - falls gewünscht, kann ich das auch posten).
Funktioniert nicht
am 13.06.2007 - 14:13 Uhr
Leider funktioniert auch diese Version NICHT!!!
Warum werden ständig Sachen gepostet, die nicht funktoinieren? Drupal kann ja nicht so schlecht programmiert sein, dass es bei einem funktoniert und beim anderen nicht mehr.
Aber liebe Petra auch auf Deiner Seite funktioniert es nicht, klick doch mal auf einen Untermenüpunkt, dann ist die Farbe schon wieder weg. Bei Dir selbst funktioniert es anscheinend auch nur teilweise!!!!
Wie sieht denn nun die wirkliche Lösung für dieses einfache Problem aus?
Vielen Dank.
Aktiver Menüpunkt
am 15.06.2007 - 17:37 Uhr
..ich werf dann auch noch etwas in die runde, was bei mir wunderbar funktioniert:
in meiner template.php steht drin (erster Teil ist fast wie der von Petra, leicht modifiziert)
function phptemplate_menu_item_link($item, $link_item) {
static $menu;
if (!isset($menu)) {
$menu = menu_get_menu();
}
$mid = $menu['path index'][$link_item['path']];
$front = variable_get('site_frontpage','node');
$attribs = isset($item['description']) ? array('title' => $item['description']) : array();
$attribs['id'] = 'menu-'. str_replace(' ', '-', strtolower($item['title']));
if((($link_item['path']=='<front>') && ($front==$_GET['q'])) || (menu_in_active_trail($mid))){
$attribs['class'] = 'active';
}
return THEME_l($item['title'], $link_item['path'], $attribs);
}
function THEME_l($text, $path, $attributes = array(), $query = NULL, $fragment = NULL, $absolute = FALSE, $html = FALSE) {
if(drupal_get_path_alias($_GET['q']).'/' == $path){
$attributes['class'] = 'active';
}elseif($_GET['q'] == $path){
$attributes['class'] = 'active';
}elseif($_GET['q'] == 'node' AND $path == ''){
$attributes['class'] = 'active';
}elseif($attributes['class'] == "" AND $path != ""){
if(strstr(drupal_get_path_alias($_GET['q']).'/',$path)){
$attributes['class'] = '"active';
}
}
else{
$attributes['class'] = 'active';
}
return '<a href="'. check_url(url($path, $query, $fragment, $absolute)) .'"'. drupal_attributes($attributes) .'>'. ($html ? $text : check_plain($text)) .'</a>';
}
Habe damit eine Seite aufgezogen und bei mir klappt es mit der richtigen Verlinkung. Aber kann sein, dass es bei Euch nicht funktioniert. Wäre schön, wenn :-)
Als Deklaration der aktiven CSSClass hab ich 'active' gewählt.
Gruß Andreas
edit: Bei mir liegen die Seiten mit URL Alias in Drupal, somit lasse ich den Pfad auslesen und mit dem Link vergleichen. Kann im Moment nicht sagen, ob es auch ohne URL Aliase funktioniert.
----------------------------------------
Browser Automatisierung / SEO On- und Offpage - http://www.cybercore.de
Nur primary links!
am 16.06.2007 - 13:06 Uhr
Danke!!!
Habe das genau getestest, aber hier werden doch alle Links durch die Funktion "THEME_l" geschickt. Wozu???? Es soll doch nur bei den Primary-Links ein "active" hinzugefügt werden, wenn eine dem Menüpunkt untergeordnete Seit angewählt wurde.
Die Secondary-Links könnte man noch hinzunehmen, ist aber im ersten Schritt gar nicht so wichtig.
Also: Primary Links mit "class = active" versehen, wenn eine untergeordneter Seite angewählt ist.
Z. Bsp: "Blogs" ist der Menüpunkt unter "Primary Links" (also im Hauptmenü). Nun wird ein beliebiger "Blogeintrag" oder die Seite "Blogs von user xxxx" aufgerufen, in all diesen Fällen soll der Hauptmenüpunkt "Blogs" mit "acitve" markiert sein, damit dann über die css-Datei dieser Menüunkt farblich hervorgehoben werden kann (was ja schon eingebaut ist, weil wenn man direkt auf "Blogs" klickt, ist die Hervorhebung ja korrekt, nur bei Unterseiten fehlt die Markierung mit "active".).
Also keinesfalls irgendwie alle Drupallinks durch irgendwelche Funktionen schicken, damit dann Drupal wieder langsamer wird, sondern ganz gezielt nur die primary links mit "active" versetzen.
Vielleicht hat jetzt noch jemand eine Idee. Vielen Dank.
Ewig ungelöst? Wo sind die Programmierer?
am 23.07.2007 - 14:25 Uhr
Seit Mitte April ist nun dieses Problem bekannt und bis heute gibt es keine Lösung. Jede Firma, die einen Kunden so lange links liegen lassen würde, hätte bald keine Kunden mehr.
Ich verstehen nicht, warum sich die Programmierer nicht einfach hinsetzen können, um dieses Problem sofort zu lösen.
Den aktiven Menüpunkt immer anzuzeigen, auch wenn man in tiefere Ebenen geklickt hat, das braucht doch fast jeder, es ist also ein Problem, das fast jeder gerne gelöst haben möchte, trotzdem passiert nichts. Das verstehe ich nicht.
Das Modul "Menu Trails" habe ich getestet und dann bei drupal.org gepostet, dass es nicht funktioniert. KEINE ANTWORT. Das kann irgendwie nicht wahr sein.
Es müssen wohl alle übersehen haben, denn es kann einfach nicht sein, dass so ein wichtiges Problem einfach liegen gelassen wird. Normalerweise muss man das innerhalb von 2-3 Tagen lösen und möglichst sofort posten, dass man an der Sache nun dran ist. So läuft das halt normalerweise ab. Aber hier scheint alles anders zu sein, bei drupal.org ist der Fehler bekannt, aber es TUT SICH TROTZDEM NICHTS!!!!
Daher meine Fragen:
- Wann wird es endlich eine Lösung für den "aktiven Menüpunkt" geben? Es sollte möglichst in wenigen Tagen soweit sein.
- Warum funktioniert das Modul "Menu Trails" absolut nicht? Warum kann niemand von drupalcenter.de einfach die Programmierer dieses Moduls ausfindich machen und ihnen oder ihm eine persönliche Mail schicken? Das Problem ist doch wirklich vordringlichst!!!
Vielen Dank an alle, die zu einer Lösung beitragen.
Wo auf drupal.org wird der
am 23.07.2007 - 14:35 Uhr
Wo auf drupal.org wird der "Fehler" denn diskutiert? Weiß nicht wie es bei Anderen ist, aber ich glaube nicht das sich darüber ein Besucher deiner Seite so Gedanken macht wie du hier, eher wird es wohl keinem auffallen wenn irgendwo ein Link nicht als aktiv gekennzeichnet ist...
Hast du denn mal bei dem MenuTrail Modul die Funktion aus der Readme Datei in deine template.php gepackt?
gruß pebosi
gruß pebosi
--
https://pebosi.net
M.m. ist die Problemlösung
am 23.07.2007 - 14:46 Uhr
M.m. ist die Problemlösung oben ausreichend beschrieben. Ich habe so es ähnlich bereits bei Kunden sehr zufriedenstellend umgesetzt.
Wann wird es endlich eine Lösung für den "aktiven Menüpunkt" geben?
Woher soll das hier jemand wissen?
Es sollte möglichst in wenigen Tagen soweit sein.
Ist das eine Drohung? Du bist hier doch nicht beim Data-Becker Homepage Baukasten, sondern bei einer Open Source-Software.
Warum kann niemand von drupalcenter.de einfach die Programmierer dieses Moduls ausfindich machen und ihnen oder ihm eine persönliche Mail schicken?
Wieso machst Du das nicht? Und worin sollte es sich denn unterscheiden, wenn wir das machen?
Das Problem ist doch wirklich vordringlichst!!!
Mich persönlich interessiert das Modul kein Stück. Es gibt für dieses Problem div. Lösungen. S.o.
--
bv - drupalcenter.de
Schön gesprochen
am 23.07.2007 - 15:12 Uhr
Schön gesprochen ;)
--
sanduhrs - drupalcenter
--------------------------------
Stefan Auditor
http://erdfisch.de
--
sanduhrs · Stefan Auditor · Drupalcenter
http://erdfisch.de · http://drupal.org/user/28074 · http://association.drupal.org/user/646
bv wrote: M.m. ist die
am 23.07.2007 - 16:07 Uhr
M.m. ist die Problemlösung oben ausreichend beschrieben. Ich habe so es ähnlich bereits bei Kunden sehr zufriedenstellend umgesetzt.
Welche Lösung von oben meinst Du genau?
Ich habe alles, was hier diskutiert wurde ausgiebigst getestet und auch großteils hier kommentiert, keine Lösung hat funktioniert.
Lediglich ein kleiner Teil des Problems, nämlich dass auf der Startseite der Menüpunkt "Startseite" (oder anderer Text) als markiert erscheint, ist gelöst, dafür wurden oben mehr als eine Löung gepostet, eine davon stammt von mir selbst, diese habe ich auch im Einsatz.
Dass überall der richtige Menüpunkt als "aktiv" markiert bleibt, oder zumindest bei allen Blogs und bei allen Foreneinträgen, das wär ja schon ein Hit, ist bei jetzt ungelöst, habe wirklich alles versucht und ausgiebig gestest und auch im Code Versuche gestartet, ohne Erfolg.
Sag mir daher bitte welche Lösung bei Dir funktioniert.
Woher soll das hier jemand wissen?
Ist das eine Drohung? Du bist hier doch nicht beim Data-Becker Homepage Baukasten, sondern bei einer Open Source-Software.
Ach geh, darum geht es doch gar nicht.
Es geht doch darum, dass auch ein Open Source Software irgendwie eine Qualität möglich sein muss, wie auch immer das organisiert ist. Ein so wichtiges Problem sollte auf jeden Fall rasch gelöst werden und statt hier einen Streitversuch zu starten, sollte jeder mithelfen und das persönliche Empfinden weglassen.
Wenn ich hier diese Zeilen etwas kritisch geschrieben habe, dann nur deshalb, damit es zu einer Lösung kommt. Niemand ist damit persönlich gemeint oder sollte sich persönlich betroffen fühlen, daher werde ich auf solche persönlichen Sätze gar nicht mehr eingehen.
Es geht lediglich um die Sache selbst und sonst um nichts. Eine Lösung ist wichtig, weil viele viele diese Lösung gebrauchen können.
Wieso machst Du das nicht? Und worin sollte es sich denn unterscheiden, wenn wir das machen?
Ich mache, alles was ich kann. Gib mir einen Tipp. Ich mach das gerne sogar. Sag mir, wie ich es machen soll, nenne mir die Emailadresse des Programmierers oder wie ich hier zum Ziel komme. Du kennst Dich damit sicher besser aus, daher ist jeder Tipp willkommen.
Mich persönlich interessiert das Modul kein Stück. Es gibt für dieses Problem div. Lösungen. S.o.
Wie bereits geschrieben, gibt es keine Lösung dafür. Natürlich interessiert es Dich auch, Du bist Teil dieser Community. Dass die Hauptmenüpunkte richtig angezeigt werden, interessiert jeden, niemand wird eine Seite online stellen, wo dieses Problem ungelöst ist.
Nenne mir die genau Lösung, falls Du eine hast, ich werde das sofort ausgiebigst testen und dann hier berichten, es ist für viele interessant. Bitte genau posten, wie die Lösung aussehen könnte.
ICH BITTE wirklich alle, hier zu einer Lösung beizutragen und NICHT auf eine persönliche Diskussion einzugehen. Es geht nicht um Persönliches, es geht absolut nur um die Sache, es geht darum, eine Lösung zu finden, die funktioniert.
Vielen Dank.
Natürlich alles eingebaut
am 23.07.2007 - 16:11 Uhr
Hast du denn mal bei dem MenuTrail Modul die Funktion aus der Readme Datei in deine template.php gepackt?
Natürlich, alles eingebaut und berücksichtigt.
Welche Lösung hast Du denn im Einsatz? MenuTrails? Andere? Gar keine "aktiv"ierung der Menüpunkte? Und warum hast Du sie nicht als "aktiv" markiert, obwohl es die Standard-Themes doch eingebaut haben?
@ sanduhrs
am 23.07.2007 - 16:25 Uhr
@ sanduhrs:
Welche Lösung hast Du im Einsatz?
@ pebosi
am 23.07.2007 - 16:50 Uhr
@ pebosi:
Welche Lösung hast Du im Einsatz?
Wie hast Du es geschafft, dass der aktive Menüpunkt immer angezeigt wird, z. Bsp. "Forum" immer als aktiv markiert wird, wenn man sich irgendwo im Forum bewegt, also Forumbeiträge liest, usw.
Vielen Dank.
gern: in der
am 16.12.2007 - 15:46 Uhr
gern: in der common.inc
function l($text, $path, $attributes = array(), $query = NULL, $fragment = NULL, $absolute = FALSE, $html = FALSE) {
if (($path == $_GET['q']) || (($path == "<front>") && ($_GET['q']=='node'))) {
if (isset($attributes['class'])) {
$attributes['class'] .= ' active';
}
else {
$attributes['class'] = 'active';
}
}
return '<a href="'. check_url(url($path, $query, $fragment, $absolute)) .'"'. drupal_attributes($attributes) .'>'. ($html ? $text : check_plain($text)) .'</a>';
}
Es ist nur die Zeile
if (($path == $_GET['q']) || (($path == "") && ($_GET['q']=='node'))) {
einzufügen!!!
lg
willi1
elias schrieb Dafür gibts
am 09.01.2008 - 15:34 Uhr
Dafür gibts schon ne Lösung, ja.
In deinem CSS kannst du nun alle aktiven Elemente folgendermassen ansprechen:
ul.menu li.active {
/* deine formatierungen für die aktiven menuelemente */
}
Hallo Elias,
danke für deine Infos. Die waren auch für mich sehr hilfreich.
Nun habe ich hier noch eine Frage an dich:
Ich möchte gerne den AKTIVEN Hauptmenüpunkt mit einem Rahmen umgeben - und nur diesen.
Der aktive Untermenüpunkt soll einfach nur eine besondere Schriftfarbe bekommen.
Wenn ich das nun so mache:
ul.menu li..active {
color: #2677e3;
background-image: url(images/leaf_main.gif);
background-position: -0px 4px;
background-repeat: no-repeat;
width: 130px;
border-bottom: 1px solid #fff;
border-top: 1px solid #fff;
}
ul.menu li li.active {
display: block;
color: #000000;
background: none;
border: none;
}
dann ist der untere Rahmen unter dem gesamten Block des gewählten Hauptpunktes (also unter dessen letzten Unterpunkt).
Wie muss ich nun den aktiven Hauptmenüpunkt ansprechen, so dass dieser auch bei gewähltem Untermenüpunkt noch die gewünschte Formatierung hat?
Gruß & Danke
Kai