[gelöst] Menu Block problem
am 13.07.2013 - 22:54 Uhr in
Hallo,
ich arbeite gerade an einer Seite und habe für die Submenus menu blocks verwendet.
Hiermit zeige ich in der "Sidebar first" alle untermenus ab dem 3. level an. (so erscheinenen z.b. auf der seite 1.2 alle untermenus zu 1.2, sprich 1.2.1, 1.2.2, 1.2.3)
Nun habe ich das Problem das ich abhängig vom übergeordneten Menu (2. level) die Farben der Untermenus via CSS anpassen will.
So das alle Submenus die zu 1.x gehören z.b. blau sind, alle die zu 2.x gehören grün, etc...
die menu-block-wrapper.tpl.php Datei erstellt um den Menu Block herum bereits einen Div Container:
<div class="content">
<div class="menu-block-wrapper menu-block-1 menu-name-main-menu parent-mlid-0 menu-level-3">
<ul class="menu"><li class="first leaf menu-mlid-377"><a href="/?q=node/14" class="hide">Item 1</a></li>
<li class="leaf menu-mlid-380"><a href="/?q=node/17" class="hide">Item 2</a></li>
<li class="leaf menu-mlid-383"><a href="/?q=node/20" class="hide">Item 3</a></li>
</ul>
</div>
</div>
nur dummerweise steht in der div class dann nur "menu-block-wrapper menu-block-1 menu-name-main-menu parent-mlid-0 menu-level-3"
und das bei jedem Menu. Also hab ich auf dem Weg keine Möglichkeit eine eindeutige class anzusprechen die sich abhängig vom parent class name unterscheided, somit haben auch alle untermenus die gleiche Farbe.
Weiss jemand Rat ?
VG
Kai
______
Lösung:
https://drupal.org/project/menu_attributes
https://drupal.org/project/menu_position
den rest kann man dann im menu block selber einstellen ohne update probs zu kriegen.
- Anmelden oder Registrieren um Kommentare zu schreiben
Hallo, Zitat: Nun habe ich
am 14.07.2013 - 07:32 Uhr
Hallo,
Nun habe ich das Problem das ich abhängig vom übergeordneten Menu (2. level) die Farben der Untermenus via CSS anpassen will.
So das alle Submenus die zu 1.x gehören z.b. blau sind, alle die zu 2.x gehören grün, etc...
nur dummerweise steht in der div class dann nur "menu-block-wrapper menu-block-1 menu-name-main-menu parent-mlid-0 menu-level-3"
-> menu-level-3
.. da hast du doch die Klasse der Hierarchieebene.
ja ich weiss, die menus
am 14.07.2013 - 09:02 Uhr
ja ich weiss, die menus funktionieren ja auch alle richtig, es soll ja auch nur die 3. klasse angezeigt werden.
ich will aber über das css den untermenus verschiedene farben geben (abhängig vom übergeordneten menu,
1.1.1 == Farbe von 1, 2.1.1 == Farbe von 2, etc..) und dafür müsste ich natürlich wissen welches das übergeordnete element ist.
ich hab mal eine skizze gemacht, denke das ist deutlicher:
da der klassenname IMMER gleich ist (egal von welchem parent element das menu kommt, weiss ich nicht wie ich die menus mit css skinnen kann.
oder geht das vielleicht anders noch einfacher ?
VG
kai
Wenn dir die CSS Klassen
am 14.07.2013 - 09:52 Uhr
Wenn dir die CSS Klassen fehlen, dann schaue dir
https://drupal.org/project/menu_attributes
an.
menu attributes hab ich schon
am 14.07.2013 - 10:01 Uhr
menu attributes hab ich schon drin, (das attributes modul setzt die Klassen ja gleich bei den "< a >" tags,
das hilft mir aber nicht viel, weil muss ja die div klasse "menu-block-1" skinnen, abhängig vom parent element
auf der 2. menu ebene.
<div class="content">
<div class="menu-block-wrapper menu-block-1 menu-name-main-menu parent-mlid-0 menu-level-3">
<ul class="menu">
<li class="first leaf menu-mlid-377"><a href="/?q=node/14" class="hide">Item 1</a></li>
<li class="leaf menu-mlid-380"><a href="/?q=node/17" class="hide">Item 2</a></li>
<li class="leaf menu-mlid-383"><a href="/?q=node/20" class="hide">Item 3</a></li>
</ul>
</div>
</div>
Mit dem theme_menu_link();
am 14.07.2013 - 10:24 Uhr
Mit dem theme_menu_link(); Hook kommst an die einzelnen Listenelemente und kannst dort dann eine Bedingung anhand der Hierarchiebene setzen (z.B. Überprüfung mit strpos(); welche Klasse sich im Link befindet).
Hier noch der Link zum Hook: https://api.drupal.org/api/drupal/includes!menu.inc/function/theme_menu_link/7
ich hab grad mal versucht die
am 14.07.2013 - 12:41 Uhr
ich hab grad mal versucht die menu.inc zu bearbeiten, aber im html kommen keine neuen tags an.
wie kann ich die variabeln ausgeben ?
Muss dazu sagen das ich aus der front-end Entwicklung komme und daher nicht soviel php erfahrung hab.
Die menu.inc solltest du
am 14.07.2013 - 13:28 Uhr
Die menu.inc solltest du nicht berarbeiten. Damit machst du dir nur dein Drupal kaputt und verlierst die Updatefähigkeit.
Mein Rat mit war mit dem theme_menu_link(); Hook. Da ersetzt du das "theme" durch den Maschinennamen deines Themes und dann kann man hier mit PHP If-Cases arbeiten.
Wenn du das Bisschen PHP nicht schaffst, kannst ja mit CSS Pseudo Klassen arbeiten: http://www.w3.org/wiki/CSS/Selectors/pseudo-classes/:nth-child. Da kriegst dann aber mit den älteren IEs Probleme.
:) Ups. hab die menu.inc
am 14.07.2013 - 14:11 Uhr
:) Ups.
hab die menu.inc wieder in den Urzustand versetzt, hatte den Post falsch verstanden.
Den "dirty" workaround mit CSS hab ich auch grad ausprobiert,
aber der geht leider nicht, weil die Menu Blocks NUR das 3. Level anzeigen
(so sind sie eingestellt in der konfiguration) sie haben auch einen titel, aber dummer weise
nicht als class oder id.
da das menu ein block ist, taucht es im page template (ich glaub du meinst damit die page.tpl.php oder ?)
garnicht auf.
vielleicht blöde fragen, aber ich hab mit drupal noch nicht soviel gemacht, gibts da echt keine einfachere
Möglichkeit 3.level menu Blöcke zu skinnen als extra dafür ein theme zu coden ?
VG
Kai
Hallo Kai, hier ist Peter
am 14.07.2013 - 14:49 Uhr
Hallo Kai, hier ist Peter :-)
Wenn du nicht programmieren kannst, musst du es halt andere für dich machen lassen. Und hey: wir sind bei Drupal und es gibt für Menüs einige Module. Wie sieht es mit dem Superfish Modul aus (= https://drupal.org/project/superfish/)? Vielleicht setzt das ja die Klassen, die du brauchst.
Moin Peter! ich probier das
am 14.07.2013 - 14:57 Uhr
Moin Peter!
ich probier das superfish menu gleich mal aus, danke für den Tip.
damit dürft ich mir ja nicht allzuviel zerballern. Hab mit drupal vorher noch nich
allzuviel gemacht und hatte mich vorhin gefragt ob es überhaupt module gibt
die sowas können ^^
VG
Kai