# Dokumentation der `StringParser_BBCode`-Klasse

- Projektseite
- Dokumentation
- PHPDOC-Dokumentation
- Download
- This page in english

## 2. Definieren von eigenem BBCode

### 2.1 Einbinden der Klasse

Um die Klasse verwenden zu können, müssen zuerst die beiden Dateien stringparser.class.php und stringparser_bbcode.class.php in ein gemeinsames Verzeichnis kopiert werden. Die Datei stringparser_bbcode.class.php muss nun im eigenen PHP-Script eingebunden werden:

`<?php
require_once 'pfad/zu/stringparser_bbcode.class.php';
// weiterer PHP-Code
?>`

Nun steht die Klasse zur Verfügung. Um sie nutzen zu können, muss ein Objekt der Klasse erzeugt werden. Dies geschieht so:

`<?php
require_once 'pfad/zu/stringparser_bbcode.class.php';
$bbcode = new StringParser_BBCode ();
// weiterer PHP-Code
?>`

Somit ist die Klasse in das PHP-Script eingebunden und einsatzbereit.

### 2.2 Der erste Code

Um mit der Klasse einen Code zu definieren, verwendet man die Methode `addParser`. Nun soll folgender Code definiert werden:

- Der Code soll `[b]` sein.
- Der Code soll durch `<b>` und `</b>` ersetzt werden.
- Der Code soll innerhalb von Block- und Inline-Elementen vorkommen dürfen.
- Der Code soll selbst ein Inline-Element sein.

Dazu muss folgender Aufruf verwendet werden:

`<?php
require_once 'pfad/zu/stringparser_bbcode.class.php';
$bbcode = new StringParser_BBCode ();
$bbcode->addCode ('b', 'simple_replace', null, array ('start_tag' => '<b>', 'end_tag' => '</b>'),
'inline', array ('block', 'inline'), array ());
// weiterer PHP-Code
?>`

Die Methode addCode ist wie folgt definiert:

`void addCode (string $code, string $type, string $callback, string $params, string $content_type,
array $allowed_in, array $not_allowed_in);`

Hier sind alle Parameter des `addCode`-Aufrufs noch einmal zusammen mit einer Erklärung aufgeführt:

`$code` (im Beispiel `'b'`)
  Das ist der Name des Codes. Damit soll ausgedrückt werden, dass nach `[b]` gesucht werden soll. Falls dieser Parameter `'fangmich'` wäre, würde nach `[fangmich]` gesucht werden.
`$type` (im Beispiel `'simple_replace'`)
  Das ist die Art, wie der Code behandelt werden soll. `'simple_replace'` bedeutet, dass der Starttag (also `[b]`) und der Endtag (also `[/b]`) einfach durch feste Zeichenketten ersetzt werden sollen. Weiter unten mehr zu den Behandlungsarten.
`$callback` (im Beispiel `null`)
  Hier würde eine Funktion angegeben werden, die bei dem Ersetzen aufgerufen wird. Da für die Behandlungsart `'simple_replace'` keinerlei Funktionen notwendig sind, kann man hier getrost `null` angeben, er wird in diesem Fall schlichtweg nicht ausgewertet.
`$params` (im Beispiel `array ('start_tag' => '<b>', 'end_tag' => '</b>')`)
  Dieser Parameter beinhaltet eigentlich Werte, die der Funktion mit übergeben werden, sobald sie aufgerufen wird. Da hier keine Funktion notwendig ist, werden hier stattdessen direkt die Ersetzungen angegeben, die verwendet werden sollen.
`$content_type` (im Beispiel `'inline'`)
  Dies ist er Inhaltstyp dieses Codes.
`$allowed_in` (im Beispiel `array ('block', 'inline')`)
  Dieser Parameter gibt an, innerhalb von welchen Inhaltstypen sich der Code befinden darf. Falls der Code innerhalb eines anderen Inhaltstyps angetroffen wird, wird er ignoriert. Bei diesem Parameter werden allerdings nur der Inhaltstyp des Codes, in dem sich der aktuelle Code gerade befindet, betrachtet.
`$not_allowed_in` (im Beispiel `array ()`)
  Dieser Parameter gibt an, innerhalb von welchen Inhaltstypen sich der Code auf keinen Fall befinden darf. Hierfür werden die Inhaltstypen aller Elemente betrachtet, in denen sich der Code befindet. Wird auch nur eines gefunden, in dem der Code nicht erlaubt ist, wird der Code ignoriert.

### 2.3 Behandlungsarten

Die Klasse kann auf Codes unterschiedlich reagieren. Dazu gibt es die sogenannten Behandlungsarten.

`'simple_replace'`
  Bei dieser Behandlungsart werden Start- und End-Tags einfach durch feste Zeichenketten ersetzt. `[b]` kann man beispielsweise durch `<b>` ersetzen lassen und `[/b]` durch `</b>`. Bei dieser Behandlungsart sind keinerlei Attribute möglich. Die Zeichenketten, die zum Ersetzen verwendet werden, müssen in `$params['start_tag']` und `$params['end_tag']` stehen, siehe auch das Beispiel oben.
`'simple_replace_single'`
  Diese Behandlungsart ist wie `'simple_replace'`, allerdings wird davon ausgegangen, dass es ausschließlich den Starttag gibt und keinen Endtag, das Element also nur aus dem Starttag besteht und keinen Inhalt hat. Aus diesem Grund braucht auch nur `$params['start_tag']` gesetzt zu sein.
`'callback_replace'`
  Bei dieser Behandlungsart wird eine Funktion aufgerufen, die dann den Text zurückliefert, der als Ersetzung verwendet werden soll. Dies wird ausführlich im Kapitel Callback-Funktionen behandelt.
`'callback_replace_single'`
  Wie `'callback_replace'`, allerdings gibt es auch hier nur einen Starttag.
`'usecontent'`
  Diese Behandlungsart ist im Prinzip `'callback_replace'`, nur, dass innerhalb des Elements nicht nach weiteren BB-Codes gesucht wird. Eine ausführliche Erklärung dazu gibt es im Abschnitt Spezielle Codes.
`'usecontent?'`

  Diese Behandlungsart kann sich entweder wie `'usecontent'` oder aber auch wie `'callback_replace'` verhalten. Es wird geprüft, ob ein bestimmtes Attribut gesetzt ist. Wenn dies der Fall ist, wird `'callback_replace'` angenommen. Im anderen Fall wird `'usecontent'` angenommen. Der Name des Attributs, nach dem gesucht werden soll, ist in `$params['usecontent_param']` anzugeben. Diese Behandlungsart ist beispielsweise für den häufig verwendeten BB-Code `[url]` sinnvoll. Dieser kann nämlich auf zwei verschiedene Weisen verwendet werden: `[url]http://www.example.com/[/url]` und `[url=http://www.example.com/]Linktext, auch noch mit [b]fettem[/b] Text[/url]`. Im ersten Fall wäre hier `'usecontent'` als Behandlungsart angebracht, da der URL, auf den der Link zeigen soll, als normaler Text zwischen Start- und Endtag angegeben ist und es überhaupt nicht sinnvoll wäre, innerhalb des URL `http://www.example.org/` weitere BB-Codes zu ersetzen. Andererseits wäre im zwieten Beispiel `'callback_replace'` als Behandlungstyp angebracht, da hier der URL als Parameter angegeben wurde und der Linktext ja durchaus weitere BB-Codes enthalten dürfte.

  Hinweis: Es ist möglich, mehrere Parameter als `usecontent_param` anzugeben, indem man einfach ein Array übergibt anstelle einer Zeichenkette. Beispiel: `$bbcode->addCode (..., array('usecontent_param' => array ('parameter1', 'parameter2')), ...);`.

`'callback_replace?'`
  Diese Behandlungsart ist das genaue Gegenteil von `'usecontent?'` - wenn einer der Attribut, die in `usecontent_param` angegeben wurden, existiert, wird der Code wie `'usecontent'` behandelt, ansonsten wie `'callback_replace'`.

### 2.4 Parsen von Text

Um nun einen Text umzuwandeln, muss man die `parse`-Methode der Klasse aufrufen:

`// Code, um die Klasse einzubinden, addCode-Aufrufe, etc.
$neuer_text = $bbcode->parse ($alter_text);`

Somit wird der Inhalt von `$alter_text` verarbeitet und das Ergebnis ist dann in `$neuer_text` enthalten. Die Methode `parse` kann beliebig oft hintereinander aufgerufen werden, allerdings wird sie immer sofort `false` zurückgeben, wenn gerade noch ein Parsevorgang am Laufen ist.

- Weiter: 3. Parserfunktionen
- Zurück: 1. Einführung