Spielereien mit Blöcken

Chio (admin) am 20.07.2008

WebsiteBaker unterstützt beliebig viele Abschnitte auf einer Seite. Diese können zb. untereinander stehen, oder - wenn das Template das zulässt und die Option dazu eingeschaltet ist - in verschiedenen Bereichen = Blöcken der Seite. Diese Seite hier hat zb 2 Blöcke: Diesen hier und die rechte Spalte.

 

Mit Blöcken kann man allerhand zaubern.
Einige typische Fragen aus dem Forum:

  1. Ich möchte, dass im zweiten Block immer eine Ankündigung steht, und zwar auf jeder Seite. Ich will aber die Ankündigung nur einmal ändern müssen.
  2. Ich möchte, dass ein bestimmter Standard-Block erscheint, wenn ich auf einer Seite keinen eigenen (zweiten) Block angelegt habe.
  3. Ich möchte, dass in der rechten Spalte zb. Google-Anzeigen erscheinen, wenn ich keinen zweiten Block angegeben habe.
  4. Ich habe Seiten mit einer Inhaltsübersicht und solche mit einer Detailansicht. Die Inhaltsübersichten sollen keine rechte Spalte haben, die Detailseiten aber schon.
  5. Ich möchte, dass auch auf der Suche-Seite ein bestimmter Block erscheint

Eine Seite enthält immer mindestens einen Block, und der wiederum mindestens einen Abschnitt (=Section). Normalerweise ist also ein Block und eine Section gleichbedeutend. Man kann aber mehrere Abschnitte pro Block haben, etwa oben WYSIWYG und darunter ein Gästebuch. Und auf der selben Seite im 2. Block oben eine Bildergalerie und darunter ein Code-Modul.

 

Trick 1: Wysiwyg-Sections von anderen Seiten verwenden.

Idealerweise legst du dir dazu eine spezielle Seite an, auf unsichtbar gestellt, mit einem auffälligen Namen, zb „Extrablöcke“. Die erste Section benutze ich gerne für Anmerkungen, etwa die, dass diese Seite nie gelöscht werden darf. Und wofür die weiteren Sections gut sind.
Dann füge ich auf dieser Seite untereinander die nötigen Sections ein. (die Zuordnung zu Blöcken ist egal, die Seite ist ohnehin nie sichtbar)

Jetzt musst du die Nummer der Section herausfinden, die du woanders verwenden willst:
-> Anschnitte verwalten, auf den gesuchten Abschnitt klicken, dann steht oben im URL nach page_id noch: #Zahl. Das ist die gesuchte section_id. Du kannst auch in der Editor-Ansicht im Quelltext stochern, suche nach „<input type="hidden" name="section_id" value=“.

Wenn diese Section auf allen Seiten erscheinen soll, ist es sinnvoll, folgendes ins Template zu kopieren; und zwar an der Stelle, an der die Section auftauchen soll:
// bedeutet: Ab hier ist das eine Anmerkung

<?php //php einschalten
$get_content = $database->query("SELECT content FROM ".TABLE_PREFIX."mod_wysiwyg WHERE section_id = '50'");
$fetch_content = $get_content->fetchRow();
$content = ($fetch_content['content']);
$wb->preprocess($content);
echo $content ;
?> //php ausschalten

Die Zahl 50 hier im Beispiel musst du gegen die section_id DEINER Wunsch-Section austauschen.
Testweise kannst du das auch in einen Abschnitt vom Code-Modul kopieren (ohne erste und letzte Zeile: <? php bzw. ?> )

Was tut das?

Das Stückchen PHP-Code holt diese Section aus der Datenbank, genauso wie WebsiteBaker normalerweise eine Section holt – und schreibt sie in die Variable (=Behälter) $content. Wenn du WB-interne Links hast, werden diese noch zurechtgebogen. Andernfalls kannst du die Zeile $wb->preprocess($content); „auskommentieren“, indem du „//“ davor schreibst. Sie wird dann nicht ausgeführt und spart Rechenzeit.
Ich erwähne die Variable $content deswegen extra, weil du damit noch bestimmte weitere Veränderungen machen könntest. Hier wird sie einfach ausgegeben (echo)



Trick 2: Überprüfen, ob ein Block Inhalt hat

Du möchtest, dass diese Section nur dann erscheint, wenn sonst keine angegeben ist; wenn sie also leer ist. Oder dass statt leeren Blöcken Adsense erscheint, oder...

Man kann im Template nicht direkt abfragen, ob ein Block Inhalt hat, aber indirekt. Das Vorgehen ist immer gleich:

<?php //php einschalten
ob_start(); //Bewirkt, dass der folgende Inhalt nicht ausgegeben, sondern zwischengespeichert wird
page_content(2); //Ausgeben
$content=ob_get_contents(); //den zwischengespeicherten Inhalt in eine Variable schreiben.
ob_end_clean(); //Ende der Zwischenspeicherung, normal weiter.

Jetzt enthält die Variable $content den Inhalt von Block 2 (das könnten auch mehrere Sections sein, eben das, was ausgegeben worden wäre)

Jetzt überprüfen, ob da was ist:

if ($content=="") {
//Nichts da, also hier zb das obige Stückchen Code, oder Adsense-Code, oder...

} else {
//Da ist was: also normal ausgeben:
echo ($content);
}
?> //php ausschalten


Mit einer Kombination aus beiden Tricks kannst du allerhand machen. Du musst dazu nicht besonders php können, nur aufpassen, dass du alles richtig zusammenkopiert hast. Und Sicherungskopien machen, bevor du etwas änderst!


Mehr:

 

Back

Comments

Keine gefunden

News mit Extra

Wie bekommt man ins Newsmodul zu den Posts jeweils individuelle zweite Blöcke?

Ganz einfach: Der rechte Block ist ein Abschnitt vom Typ "Code" - und der holt sich die Sections von einer versteckten Seite.

  zurück    [ home ]   [ websitebaker ]   [ start ]

www.beesign.com - webdesign in wien