Erweiterte Template-Funktionen

Natürlich sind Inhaltsblöcke, Kopf- und Fußzeile und Navigationsbereiche nicht das einzige, was WBCE für den ambitionierten Templateersteller zu bieten hat. 

Suchmaske

WBCE hat eine ziemlich gute Suchfunktion - gerade auf umfangreicheren Auftritten mit viel Text (wie zum Beispiel diesem hier) ist ein Eingabefeld für eine Stichwortsuche ein wertvolles Hilfsmittel.

Die Suche kann entweder direkt ins Template codiert werden:


<?php if(SHOW_SEARCH) { ?>
<div class="search_box">
  <form name="search" action="<?php echo WB_URL; ?>/search/index.php" method="get">
  <input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID') ? REFERRER_ID : PAGE_ID; ?>" />
    <input type="text" name="string" class="search_string" />
    <input type="submit" name="submit" value="<?php echo $TEXT['SEARCH']; ?>" />
  </form>
</div>
<?php } ?>

Was passiert hier im einzelnen:

  • Zunächst wird geprüft, ob die Suche überhaupt angezeigt werden soll - das kann sowohl bei den Grundeinstellungen insgesamt oder auch seitenspezifisch abgeschaltet werden. (Inhalte, die auf Seiten stehen, deren Suche abgeschaltet ist, erscheinen auch nicht in den Suchergebnissen.)
  • Dann wird die WBCE-Suchfunktion aufgerufen, die sich im Verzeichnis /search befindet.
  • Es wird ein unsichtbarer Parameter übergeben, dies ist erforderlich, damit auf der Ergebnisseite nicht die Navigation verschwindet. (Nein, muss man nicht verstehen. Ist halt so.)
  • Der Begriff, nach dem gesucht werden soll, heißt search_string.
  • Der Such-Button wird je nach Benutzer-/Besuchersprache passend mit "Suchen", "Search", "Rechercher" oder ähnlichem beschriftet.

Ihren Vorstellungen zur Gestaltung des Suchfelds sind nur wenige Grenzen gesetzt: Der unsichtbare Parameter "Referrer" muss sein und das Eingabefeld muss den Namen "search_string" haben. Ansonsten ist es Ihnen überlassen, ob und wie der Suchknopf erscheint. wo die Suche platziert wird usw.

Eine andere Möglichkeit ist, das Droplet SearchBox zu verwenden, dann wird an der betr. Stelle im Template einfach nur die Anweisung [[ searchbox ]] (ohne Leerschritte) eingefügt und die Darstellung kann dann durch Bearbeiten des Droplets übers Backend angepasst werden.

Tipp: Wenn auf den Seiten, die aus der Suchergebnisseite heraus aufgerufen werden, die Fundstellen des Suchstrings farblich hrvorgehoben werden sollen, fügen Sie in das Stylesheet Ihres Templates folgende Zeile ein:


.highlight { background-color: #ffff00;}

Damit würden die Fundstellen beispielsweise gelb unterlegt.

Anmeldung übers Frontend

Wenn Sie mit Seiten arbeiten, die die Sichtbarkeit "Registriert" oder "Privat" haben, ist es sinnvoll, eine Anmeldemaske auf der Seite zu platzieren. 

Sie können entweder das Droplet [[ LoginBox ]] dafür verwenden oder die Anmeldung direkt ins Template schreiben. 


<?php
// Anmeldemaske für den Backendzugang einbinden
if(FRONTEND_LOGIN == 'enabled' AND VISIBILITY != 'private' 
  AND $wb->get_session('USER_ID') == '') {
?>
  <div id="loginmaske">
  <form name="login" action="<?php echo LOGIN_URL; ?>" method="post">
    <p><?php echo $TEXT['LOGIN']; ?></p>
    <?php echo $TEXT['USERNAME']; ?>:
    <input type="text" name="username" />
    <?php echo $TEXT['PASSWORD']; ?>:
    <input type="password" name="password" />
    <input type="submit" name="submit" value="<?php echo $TEXT['LOGIN']; ?>" />
    <a href="<?php echo FORGOT_URL; ?>">
    <?php echo $TEXT['FORGOT_DETAILS']; ?></a>
    <?php if(is_numeric(FRONTEND_SIGNUP)) { ?>
      <a href="<?php echo SIGNUP_URL; ?>"><?php echo $TEXT['SIGNUP']; ?></a>
    <?php } ?>
  </form>
  </div>
<?php
} elseif(FRONTEND_LOGIN=='enabled' AND is_numeric($wb->get_session('USER_ID'))){
?>
  <div id="loginmaske">
  <form name="logout" action="<?php echo LOGOUT_URL; ?>" method="post">
    <p><?php echo $TEXT['LOGGED_IN']; ?></p>
    <?php echo $TEXT['WELCOME_BACK']; ?>, <?php echo $wb->get_display_name(); ?>
    <br />
    <input type="submit" name="submit" value="<?php echo $MENU['LOGOUT']; ?>" />
    <br />
    <a href="<?php echo PREFERENCES_URL; ?>">
    <?php echo $MENU['PREFERENCES']; ?></a>
    <a href="<?php echo ADMIN_URL; ?>/index.php">
    <?php echo $TEXT['ADMINISTRATION']; ?></a>
  </form>
  </div>
<?php
}
?>

Sieht auf den ersten Blick schrecklich kompliziert aus, ist es aber eigentlich gar nicht. Letztlich werden da in Abhängigkeit davon, ob die Anmeldung grunsätzlich ein- oder ausgeschaltet ist, ob sich neue Benutzer registrieren können sollen und ob der Benutzer schon angemeldet ist oder nicht, jeweils die entsprechenden Eingabefelder angezeigt. 

Droplets und interne Links

Droplet-Aufrufe (PHP-Schnipsel, die kleine Funktionen ausführen und in doppelten eckigen Klammern, ggf. mit Parametern aufgerufen werden), stehen nicht nur in den Seiten, sondern auch im Template zur Verfügung. So können Sie beispielsweise das Droplet [[ Oneliner ]] in Ihr Template einbinden, um auf jeder Seite einen zufälligen Sinnspruch anzuzeigen.

Auch direkte Verlinkungen zu WBCE-Seiten sind anhand ihrer Seiten-ID möglich. Das heißt konkret: Nehmen wir an, die Seite "Wir über uns" hat die ID 42, dann brauchen Sie für einen Link dorthin nicht zu schreiben

<a href="http://www.meinedomain.tld/pages/wir-ueber-uns.php">Wir über uns</a>

sondern es genügt

<a href="[ wblink42 ]">Wir über uns</a>

(Schreibweise ist eigentlich ohne Leerschritte - hier nur zur Darstellung erforderlich)

Optionale Blöcke

Mit Mut zum Coden lassen sich auch Templates programmieren, bei denen je nach Bedarf bestimmte Seitenbereiche angezeigt werden oder nicht, wodurch dann andere Bereiche entsprechend vergrößert werden und ähnliches.

Eine sehr gute Erklärung (allerdings auf Englisch) gibt es auf wbhelp.org.

Topics im zweiten Block

Das Modul Topics kann, was andere Module nicht können, nämlich zwei Blöcke nutzen - z.B. um dort das Beitragsbild zu platzieren, Links zu älteren/neueren Beiträgen anzuzeigen oder ähnliches. Dafür sind dann statt des simplen page_content(2) -Aufrufs folgende Codezeilen erforderlich: 


if(defined('TOPIC_BLOCK2') AND TOPIC_BLOCK2 != '') { 
		 	$page_content_2 = TOPIC_BLOCK2; 
	} else {
		ob_start();
		page_content(2);
		$page_content_2 = ob_get_contents();
		ob_end_clean();
	}
echo $page_content_2;