[gelöst] In page.tpl.php gezielt einzelne Seiten ansprechen
am 07.04.2009 - 15:45 Uhr in
Hallo Community,
kennt jemand einen Weg, wie ich in der page.tpl.php mittels Variablen eine gezielte Seite bestimmen kann?
Ausgangslage:
Ich habe in meinem Theme Regionen, in denen auf manchen Seiten von Views erzeugte Blöcke ausgegeben werden sollen. Views und Blöcke sind dazu entsprechend eingestellt. Auf allen übrigen Seiten sollen diese Blöcke und der sie umgebende Quellcode nicht erscheinen.
Vereinfachter Beispiel-Code:
<?php if (($portlinks || $portrechts) && !$is_admin): ?>
<div id="portallinks"><?php print $portlinks ?></div>
<div id="portalrechts"><?php print $portrechts ?></div>
<?php endif; ?>Das Problem:
Ohne !$is_admin spuckt Drupal mir die Blöcke in der Blöcke-Übersichtsseite als gelbe Layout-Darstellung aus und überschreibt damit die reguläre Inhaltsausgabe, so dass ich die tabellarische Blöcke-Ansicht nicht mehr zu sehen bekomme. Mit der Angabe !$is_admin - wie oben im Beispiel-Code - bekommen meine Redakteure, die auch erweiterte Admin-Zugriffe haben, die Blöcke und die Views auf den vorgesehenen Seiten nicht mehr angezeigt, wenn sie angemeldet sind.
Wunschlösung:
Gibt es eine Möglichkeit, anstelle von !$is_admin gezielt die Seite admin/build/block anzusprechen und nur auf dieser den Code nicht auszugeben?
Für alle Fälle: Drupal ist 6.10, Views ist 6.x-2.3.
Danke schon mal und Grüße,
benraaa
- Anmelden oder Registrieren um Kommentare zu schreiben

arg
am 07.04.2009 - 16:52 Uhr
Moin!
Mit der Funktion arg() kannst Du den aktuellen Pfad bestimmen.
Das sollte Dir (glaube ich zumindest) weiterhelfen.
hth,
Stefan
Wenn du Blöcke nur einem
am 07.04.2009 - 17:28 Uhr
Wenn du Blöcke nur einem bestimmten Pfad / php Bedingung ausgeben willst. Tuest du das , indem du diesen Block bearbeitest unten bei Seitenspezifische Sichtbarkeitseinstellung dies eingibst.
Und in der Blöckeverwaltungseite sind die Bereiche mit der gelben Bezeichnung eine Region, in der man ein Block verschieben/ausgeben kann.
----------------------------------------
http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Vielen Dank!
am 07.04.2009 - 22:21 Uhr
Das war es, was ich gesucht habe. Danke, Stefan. Bin zwar auf die arg() Funktion schon einige Male gestoßen, hielt sie aber immer für eine komplexere Geschichte, die nichts mit meinem Problem zu tun habe. Ich bin kein php-Meister und kann mir immer nur aus Beispielen meine Schnipsel nachbasteln, deshalb ist mein Ergebnis jetzt sicher auch zu umständlich, aber es erfüllt genau den Zweck:
<?php if (arg(0) != 'admin' && arg(1) != 'build' && arg(2) != 'block'): ?>@Spartacus: danke auch für die Tipps, auch wenn mir das schon klar war. Mein Problem war auch der Code, der sich in der page.tpl.php um die Region, in der der Block ausgegeben werden soll, befindet. Insofern würde hier die Sichtbarkeitseinstellung des Blocks nicht helfen. Trotzdem danke.
Im Übrigen: ich bin, wie wohl so einige, ein Ex-Joomla-Nutzer, der schrottgenervt zu Drupal gewechselt ist. Und ich bin begeistert von den Möglichkeiten, die ich endlich habe.
Grüße,
benraaa
Was willst du mit diesem
am 07.04.2009 - 22:52 Uhr
Was willst du mit diesem Code erreichen? Sehe grad den Sinn nicht?
----------------------------------------
http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Da du gefragt hast, nochmal
am 08.04.2009 - 12:16 Uhr
Da du gefragt hast, nochmal ein etwas ausführlicher Erklärungsversuch. Ich habe ein 3-spaltiges Grundlayout. In der mittleren Spalte wird der Inhalt ausgegeben. Auf manchen Portalseiten (Übersichtsseiten der Rubriken) soll diese Spalte aber noch einmal in 2 Spalten unterteilt werden, in denen jeweils links und rechts die angerissenen Artikel gelistet sind. Die Redakteure können mittels CCK-gestalteter Checkbox in ihren Artikeln einstellen, ob der Artikel links oder rechts gelistet werden soll. Das heißt: ich habe Seiten, in denen dort, wo sonst der Content angezeigt wird, dieser nicht angezeigt werden darf, sondern die beiden Spalten, die jeweils einen eigenen Block enthalten. Beide Blöcke werden über ein View ausgegeben.
Die page.tpl.php sieht nun in etwa so aus (vereinfachte Darstellung):
<?php if ($portlinks || $portrechts): ?>
<?php if (arg(0) != 'admin' && arg(1) != 'build' && arg(2) != 'block'): ?>
<div id="portallinks">
<?php print $portlinks ?>
</div>
<div id="portalrechts">
<?php print $portrechts ?>
</div>
<?php endif; ?>
<?php endif; ?>
<?php if (!$portlinks || !$portrechts || $is_admin): ?>
<?php print $content; ?>
<?php endif; ?>
Das Problem war, dass mir die erste If-Abfrage, die auf den Seiten, auf denen die Blöcke erscheinen sollen, die Spalten erzeugen soll, auf der Blöckeverwaltungseite in die Quere kommt, weil die Blöcke dort exemplarisch in den Regionen anagezeigt werden. Deshalb kommt die zweite If-Abfrage nicht mehr zum Zug. Die wäre aber nötig, um die Blöcke verwalten zu können. Ohne $content wird eben nichts angezeigt. Durch die Abfrage mit den Argumenten konnte ich das jetzt umgehen.
Ich kann mir vorstellen, dass mein Ziel - zwei Spezial-Blöcke auf manchen Seiten in zwei Spalten ausgeben zu lassen - anders zu lösen ist. Womöglich tatsächlich über die php-basierte Sichtbarkeits-Einstellung direkt in den Blöcken. Ich werde das später mal testen. Im Moment bin ich mit dem Ergebnis zufrieden. Und da ich noch immer mehr in HTML/CSS denke als in PHP, gehe ich die Sachen gewohnheitsbedingt auch von dieser Seite her an. In einem CMS sicher nicht immer die effizienteste Methode, aber der Rest ergibt sich eben erst nach und nach.
Gruß,
benraaa