Template - MenuID als Klasse oder ID
Manchmal wäre es nützlich, wenn man je nachdem auf welcher Seite man sich befindet einzelne Elemente speziell auszeichnen könnte. In der Regel geht das aber nicht, da eine Klasse oder ein HTML-Element auch auf anderen Inhaltsseiten erscheint, wo das spezielle Aussehen aber nicht erwünscht ist.
Ein typisches Beispiel hierfür ist der Inhaltsbereich der auf der Startseite nicht augegeben werden soll, da man dort nur Module anzeigen möchte. Setzt man nun den div mit dem Komponenteninhalt auf display:none, dann gilt das für alle Seiten, was sicher nicht so gewollt oder sinnvoll ist.
Diesem Umstand kann man relativ einfach abhelfen, indem man z.B. dem body-Tag oder einem x-beliebigen div die ID des entsprechenden Menüpunktes "mitgibt".
Dazu benötigt es folgende Codezeile im Head der index.php des Templates:
(Hier wird die Menü-ID ausgelesen und als Wert in einem arraya gespeichert, welches dann an der gewünschten Position ausgelesen werden kann.)
$currentMenuID = JSite::getMenu()->getActive()->id;
Im body- oder entsprechenden div-Tag muss dann $currentMenuID (der oben in einem arraya gespeicherte Wert) ausgelesen und eingefügt werden, was dann in etwa so aussehen sollte:
<body id="menu<?php echo $currentMenuID; ?>">
...
<div id="maincontent"><jdoc::include type="component"><div>
...
</body>
Die Ausgabe im effektiven Quelltext sieht dann so aus
<body id="menu12">
...
<div id="maincontent">...<div>
...
</body>
was uns dann die direkte und eindeutige Ansteuerung des Elementes via CSS erlaubt:
(Wie im Beispiel begonnen blenden wir hier also den #maincontent aus.)
#menu12 #maincontent {
display:none;
}
Mit dieser Lösung wird dann nur wenn der Menülink mit der ID 12 (in unserem Beispiel die Startseite) angezeigt wird der maincontent (die Komponentenausgabe) ausgeblendet. Auf allen anderen Seiten des eigenen Projektes wird die Komponentenausgabe normal ausgegeben. Selbstverständlich geht das nicht nur mit dem maincontent, sondern kann in gleicher Weise auch für jegliche anderen Elemente, Klassen etc. angewendet werden.


Kommentare
Danke für den Hinweis. Ich denke in vielen Situationen ist der Weg über den Page Class Suffix der einfachere. Wenn ich mich richtig erinnere, wird aber dieser nur dem Inhaltselement angefügt, also bleiben die Möglichkeiten eingeschränkt. Mit der oben beschriebenen (kompliziertere n) Methode hat man allerdings Zugriff auf ALLE Elemente einer Seite, da die eindeutige Identifikation im body-Tag liegt. ;-)
Dies ermöglicht die Wiederverwendun g und spart daher - je nach Umfang - eine Menge Code.
Tutorial dazu:
http://bit.ly/elsRxh
Gruß newchurches