# Funktionen und Funktionsweise

## Layoutdatei erstellen

Eine Layoutdatei ist eine ganz normale HTML-Seite mit allem was dazu gehört. Layoutdateien dienen als Vorlage zum erstellen neuer Seiten und werden mit der Endung .tpl im Verzeichnis /content/layouts gespeichert.

## Platzhalter für Menüs, Blöcke und bearbeitbare Bereiche setzen

Wichtig! Wenn keine Platzhalter vergeben und keine Menü- und Blockdateien angelegt werden, erscheint der Punkt "Bearbeiten" nicht im Adminmenü. Wenn diese Funktionsweise erwünscht ist, kann in der Datei "/settings/globalvars.php" die Variable $webutler_config['fullpageedit'] auf 1 gesetzt werden, um den Punkt "Aktuelle Seite bearbeiten" ins Adminmenü zu verschieben. !!!

### Mit Platzhaltern arbeiten

Damit neue Links automatisch auf allen Seiten erscheinen, können Menüs in separaten Dateien gespeichert werden. Damit ein Menü geladen wird, muß der Dateiname mit Kommentarfeldern in die Layoutdatei bzw. Seite geschrieben werden. Format:
<!-- begin_menu_MENÜDATEINAME -->
<!-- menu_MENÜDATEINAME -->
<!-- end_menu_MENÜDATEINAME -->
Blöcke bieten sich an, wenn ein Inhalt auf verschiedenen Seiten angezeigt werden soll und man diesen Inhalt zentral ändern möchte. Die Formatierung ist gleich der für Menüs:
<!-- begin_block_BLOCKDATEINAME -->
<!-- block_BLOCKDATEINAME -->
<!-- end_block_BLOCKDATEINAME -->
Inhaltsbereiche, die sich im Editor öffnen sollen, werden in Kommentare eingefasst. Format:
<!-- begin_content -->
bearbeitbarer Inhalt
<!-- end_content -->
Die Kommentare sollten von einem HTML-Blockelement (am besten DIV) umschlossen sein und dürfen nicht verschachtelt werden, z.B. ein Menü innerhalb von <!-- begin_content --> und <!-- end_content -->.

## Raster-Elemente

Für ein reibungsloses einfügen neuer Raster-Elemente ist die Vergabe von CSS-Klassen an die verschiedenen Seitenelemente zwingend erforderlich.

Wer die Raster-Elemente nicht nutzen möchte, kann in der Datei /settings/globalvars.php die Variablen $webutler_config['insertgrid'] und $webutler_config['admingrids'] jeweils auf 0 setzen.

### Elemente durch CSS-Klassen kennzeichnen

wb_menuelement - für Menüs
wb_blockelement - für Blöcke
wb_contentelement - für bearbeitbaren Inhalt
Die Klassen können einfach an ein umschliessendes DIV vergeben werden.

Die Raster-Elemente selbst haben die Klasse
wb_gridelement

Alle 4 Klassen werden benötigt damit neue Raster-Elemente nur außerhalb von DIVs mit diesen Klassen eingefügt werden. Wenn die Klassen nicht gesetzt werden, können Verschachtelungen entstehen, die die Administration unbedienbar machen würden.

wb_menuelement und wb_blockelement ersetzen außerdem die alte Klasse "block_border" und wb_contentelement ersetzt die Klasse "content_border".

### Neues Raster einfügen

Nachdem ein neues Raster-Elemente aus dem Adminmenü ausgewählt wurde, kann es vor oder nach jedem in der Seite befindlichem DIV mit einem der 4 CSS-Klassen eingefügt werden. Wenn keine der Klassen existiert, kann kein Raster ausgewählt werden. Es sollte deshalb mindestens einmal die Klasse wb_contentelement in der Layoutdatei stehen.

### Raster bearbeiten

Eigene Raster-Elemente hinzufügen sowie die Bearbeitung der Standard-Raster ist unter "System > Raster" möglich. Einstellungen wie die Raster-Breite oder Spalten-Abstände können in der CSS-Datei "columns.css" vorgenommen werden.

## Seiten kategorisieren und Menüpunkte highlighten

Seit Version 2.3 können virtuelle Kategorien angelegt werden. Seiten werden diesen zugeordnet und bei Aufruf erscheint die Kategorie in der URL.

Dem Menüpunkt der aktuellen Seite kann mit einer CSS-Klasse ein anderes Aussehen gegeben werden. Bei mehreren Menüs ist für jedes Menü eine andere Klasse möglich. Selbiges gilt für Kategorien. Menülinks von Elternkategorien können mit einer CSS-Klasse visualisiert werden. Wenn es mehrere Menüs auf einer Seite gibt, macht man damit quasi den Pfad sichtbar. Beispiel:
URL: domain.de/kat_1/kat_2/kat_3/seite.phtml
Kategorie: /kat_1/kat_2/kat_3
Seite: info.phtml
Wenn die Seite info.phtml aufgerufen wird, wird die CSS-Klasse auf alle Links angewendet die /kat_1 und /kat_1/kat_2 in der URL haben. Auch die aktuelle Kategorien hervorheben bedeutet, daß die Klasse auch auf Links angewendet wird die /kat_1/kat_2/kat_3 in der URL haben.
Die Funktionsweise "auch aktuelle Kategorie hervorheben" wird man in der Regel nicht benötigen, ich wollte diese Möglichkeit aber nicht ausschließen. Die Checkbox kann in der "globalvars.php" deaktiviert werden:
$webutler_config['highlite_current'] = "0";

## Javascript und PHP Code

<script> ... </script> und <?PHP ... ?> Codeschnippsel dürfen nur im <head> und <body> Bereich einer Seite eingefügt werden. Codeschnippsel die außerhalb von <head> und <body> gesetzt werden bringen die Validierung im Editor durcheinander.

## Zusätzliche Header- / Footerdateien

Dateien wie CSS oder Javascript können dynamisch in eine oder alle Seiten geladen werden. Dafür muß die Datei an die Seite übergeben werden. Dafür gibt es 2 Möglichkeiten. Wenn allgemeine Dateien in alle Seiten eingefügt werden sollen, können sie über die Datei "globalvars.php" geladen werden. Einfach die folgenden Zeilen in die Datei kopieren oder eine neue Datei anlegen und in die "globalvars.php" includen:
$webutler_autoheaderdata[] = '<script type="text/javascript" src="headerscript.js"></script>';
$webutler_autofooterdata[] = '<script type="text/javascript" src="footerscript.js"></script>';
Wenn Dateien über Module geladen werden sollen, kann man folgendes in die Includedatei eingefügen:
$webutlercouple->autoheaderdata[] = '<script type="text/javascript" src="headerscript.js"></script>';
$webutlercouple->autofooterdata[] = '<script type="text/javascript" src="footerscript.js"></script>';

## Sessiondaten

Machmal ist es nützlich den Dateinamen der letzten Seite zu kennen, z.B für Weiterleitungen oder als Alternative zu "history.back()". Dafür kann auf die Sessionvariable $_SESSION['history']['lastpage'] zugegriffen werden.
Wenn die Benutzerverwaltung installiert ist, werden die Authentifizierungsdaten des Users in der Sessionvariablen $_SESSION['userauth'] gespeichert.
Bei mehrsprachigen Seiten kann mit der Sessionvariablen $_SESSION['language'] die vom Besucher gewählte Sprache abgefragt werden.

## Formulare

In jedes auf einer Seite befindliche Formular wird ein zusätzliches, verstecktes Feld eingefügt. Sobald von einer Seite ein Formular per POST verschickt wird, wird der Wert des versteckten Feldes mit dem Wert der Sessionvariablen $_SESSION['antixpost'] verglichen. Das Formular wird nur versendet, wenn die Werte übereinstimmen. Diese Funktionsweise soll dabei helfen Spammerei ein wenig einzudämmen.