[gelöst] Farbiger Menüeintrag/andere H1-Farbe auf Produktdetailseite je nach Produktmerkmal
am 13.11.2012 - 00:59 Uhr in
Hallo Welt,
ich finde das hier kniffelig, aber vermute, dass ich da einfach nur zuwenig weiß. Also:
Ich habe einen kleinen Commerce Kickstart-Shop. Jedes Produkt gehört einer von drei Serien an, das ist einfach ein Merkmal des Inhaltstyps "Product Display". Die drei Serien sind Unterpunkte in meinem Hauptmenü.
Ich möchte nun auf der Detailseite jedes Produktes die Farbe der H1 je nach Serie, zu der das Produkt gehört, anpassen, und die Serie im Menü farbig hervorheben. Der Eintrag hat aber keine active
-Tag, und auch im content habe ich ja keinen Marker, der mir sagt, auf welche Serie sich das Produkt bezieht...
Wie kriege ich so einen Marker da rein?? Eine simple Klasse auf irgendeiner Containerebene über dem Menü würd's ja schon tun. Aber ich steh da wie der Ochs vorm Berg.
Vielen Dank für eure Tipps!
Nächtliche Grüße
Anna~
- Anmelden oder Registrieren um Kommentare zu schreiben
Du könntest über die
am 13.11.2012 - 09:45 Uhr
Du könntest über die preprocess_page-Funktion in der template.php in Deinem Theme dem body-Tag eine passende Klasse geben, die Du dann in CSS benutzen kannst.
Beste Grüße
Werner
Super! Woher weiß ich...
am 14.11.2012 - 12:08 Uhr
Hey Werner, vielen vielen Dank! Das war genau der Ansatz, den ich gesucht hatte.
Jetzt hab ich nur noch ein Problem: Woher weiß ich, wie die Variable heißt, deren Existenz und Inhalt ich überprüfen will? Ich vermute, es versteckt sich irgendwo in den Weiten des
$node
Objektes...Es ist ein Textfeld namens "field_series" am Inhaltstyp "product_display". Ich möchte mit
isset()
prüfen, ob diese Variable existiert (ist ja nicht auf allen Seiten der Fall) und dann per switch sagen, tu diese oder jene Klasse an mein body tag. Müsste so gehen, oder? Außer dass ich eben nicht weiß, wie die Variable heißt. Wie finde ich das denn raus?Vielen Dank schonmal
Anna~
Hilfreich ist hier das Devel
am 14.11.2012 - 12:46 Uhr
Hilfreich ist hier das Devel Modul, damit kannst Du dir dann eine Debugausgabe anzeigen lassen:
<?php
function THEME_preprocess_page(&$vars) {
dpm($vars);
}
?>
Wenn Du die Funktion angelegt hast musst Du den Cache leeren.
Hmmmmm...
am 15.11.2012 - 00:35 Uhr
Hmmmmm... also, eine Menge gelernt habe ich heute auf jeden Fall. Das Devel-Modul ist sehr spannend, danke für den Tipp!
Allerdings steh ich immer noch irgendwo aufm Schlauch %-) Der dpm-Befehl spuckt mir viele hübsch krumosortierte Variablen aus, denen ich aber auch nicht entnehmen kann, wie ich sie per PHP anspreche. Und so eine grundsätzliche Erklärung zu Krumo hab ich gerade auch nicht gefunden. Grübel...??
Kann mir bitte nochmal jemand auf die Sprünge helfen? Danke!
Jetzt dann müde Grüße
Anna~
Ich hab's fast!
am 15.11.2012 - 10:12 Uhr
Guten Morgen,
jetzt hab ich's fast... :-) Ich kann in meiner theme_preprocess_page Funktion den Inhalt des entsprechenden Feldes abfragen. ABER... in dieser Funktion kann ich keine Klasse dem body tag hinzufügen. (Oder?!)
Wie kriege ich das nun in die Funktion theme_preprocess_html übergeben?
Dankedankedanke
Anna~
Sieh Dir mal das an. Beste
am 15.11.2012 - 10:16 Uhr
Sieh Dir mal das an.
Beste Grüße
Werner
Wenn Du es dem Body
am 15.11.2012 - 10:17 Uhr
Wenn Du es dem Body hinzufügen willst musst das Ganze in der HOOK_preprocess_html() Funktion ablaufen. HOOK_preprocess_page() ist dafür nicht geeignet.
wla schriebSieh Dir mal das
am 15.11.2012 - 10:28 Uhr
Sieh Dir mal das an.
Das gilt aber nur für Drupal 6, in D7 ist es nunmehr über HOOK_preprocess_html() umsetzbar.
Hier der Code, den Du benötigst:
<?php
function THEME_preprocess_html(&$vars) {
if ($irgendwas == 'irgendwas') {
$vars['classes_array'][] = 'new-class';
}
}
?>
Leider nein...
am 15.11.2012 - 10:42 Uhr
Es sieht so aus, als stünde mir in
THEME_preprocess_html
nurpage
zur Verfügung, nicht abernode
... Mit anderen Worten, der Code, der mir inTHEME_preprocess_page
die richtige Variable ausspuckt, macht inTHEME_preprocess_html
gar nichts.:-\ Nur um sicherzugehen, dass ich keinen Flüchtigkeitsfehler drin habe, hier mein Code:
<?php
function kerns_preprocess_html(&$vars) {
dpm($vars);
if (isset($vars['node'])) {
$node = $vars['node'];
$value = field_get_items('node', $node, 'field_series');
}
if (isset($value[0])) {
switch ($value[0]['value']) {
case "tuebingen-publications-in-prehistory":
$vars['classes_array'][] = "tpp";
break;
case "tuebinger-monographien-zur-urgeschichte":
$vars['classes_array'][] = "tmu";
break;
case "the-archaeology-of-jebel-al-buhais":
$vars['classes_array'][] = "ajb";
break;
}
} else {
echo "not set!";
}
}
?>
Kann ich leider direkt nicht
am 15.11.2012 - 10:55 Uhr
Kann ich leider direkt nicht beantworten, welche Variablen bzw. Arrays Keys zur Verfügung stehen, alternativ sollte das hier funktionieren:
<?php
function kerns_preprocess_html(&$vars) {
dpm($vars);
if (arg(0) == 'node' && is_numeric(arg(1)) {
$node = menu_get_object(); // or node_load(arg(1))
if ($node->type == 'node-type') {
$value = field_get_items('node', $node, 'field_series');
}
}
if (isset($value[0])) {
switch ($value[0]['value']) {
case 'tuebingen-publications-in-prehistory':
$vars['classes_array'][] = 'tpp';
break;
case 'tuebinger-monographien-zur-urgeschichte':
$vars['classes_array'][] = 'tmu';
break;
case 'the-archaeology-of-jebel-al-buhais':
$vars['classes_array'][] = 'ajb';
break;
}
} else {
dpm('not set!');
}
}
?>
Funktioniert super
am 16.11.2012 - 08:32 Uhr
Zauberhaft! Funktioniert genau so wie ich's brauche (außer dass ich natürlich
'node-type'
in meinem Fall noch durch'product_display'
ersetzen musste).Auf
menu_get_object
etc. wäre ich noch eine ganze Weile nicht von selbst gekommen. Vielen, vielen Dank!Freut sich riesig und bastelt jetzt weiter
Anna~