Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 11 Text
  gp 11.1 Text_Password
  gp 11.2 Text_CAPTCHA
  gp 11.3 Text_Wiki
  gp 11.4 Text_Highlighter
  gp 11.5 Text_Diff


Rheinwerk Computing

11.3 Text_Wiki  toptop


Besprochene Version: 1.0.0RC1 Lizenz: LGPL
Klassendatei(en): Text/Wiki.php

Das Paket Text_Wiki kann Texte, die in der Wiki-Syntax vorliegen, schnell und einfach in andere Formate wie XHTML konvertieren. Natürlich stellt sich zum Ersten die Frage, was ein Wiki ist. Ein Wiki ist üblicherweise eine Ansammlung von Seiten, die von mehreren Personen gleichberechtigt gepflegt werden. Wikis, deren Name übrigens aus dem Hawaiianischen kommt und »schnell« bedeutet, werden oft für Wissenssammlungen wie beispielsweise die Wikipedia (www.wikipedia.de) eingesetzt.

Das Paket stellt keine Funktionen zum Verwalten oder Speichern der Texte bereit. Es beinhaltet nur eine Konvertierung der Texte von der Wiki-Syntax in ein anderes Format. Momentan werden nur XHTML, das LaTeX-Format und einfacher Text als Ausgabeformate unterstützt. Renderer für weitere Ausgabeformate sind allerdings in Vorbereitung. Nachfolgend werde ich mich primär auf die Konvertierung nach XHTML konzentrieren, da es sicher die üblichste Ausgabe für ein Wiki ist.

Im Endeffekt ist die Vorgehensweise recht einfach. Sie formatieren den Text mit den entsprechenden Wiki-Platzhaltern und übergeben ihn dann an das Text_Wiki-Objekt. Diesem teilen Sie mit, welches Ausgabeformat Sie wünschen, und schon kann der Text gerendert werden. Unter Umständen benötigt das Paket noch einige weitere Informationen, aber grundsätzlich war’s das auch schon.

Dabei stellt sich natürlich die Frage, mit welchen Zeichen der eingegebene Text formatiert werden kann. Zeilenumbrüche, die Sie über die Tastatur eingegeben haben, werden direkt übernommen. Der Rest der Markup-Sprache wirkt anfangs ein wenig ungewöhnlich, aber Sie werden sich recht schnell daran gewöhnen. Um einen Text z. B. kursiv darzustellen, setzen Sie ihn in doppelte Slashes, also z. B. so: //Hallo//. Einen fetten Schriftschnitt erzielen Sie mit zwei Sternen vor und hinter dem Text: **Welt**. Möchten Sie die beiden Ausgabeformate miteinander kombinieren, ist es auch möglich, sie ineinander zu verschachteln, wie Sie es aus HTML kennen. //**Hallo Welt**// wird also kursiv und fett dargestellt. In Tabelle 11.2 finden Sie eine Liste mit Markup-Befehlen.


Tabelle 11.2 Unterstützte Wiki-Syntax
Befehl Bedeutung
//kursiv// Kursive Darstellung
**fett** Fette Darstellung
{{Teletyper}} Diktengleiche Darstellung (z. B. Schriftart Courier, bei der jeder Buchstabe gleich breit ist)
@@+++ unterstrichen @@ Unterstrichene Darstellung
@@--- durchgestrichen @@ Durchgestrichene Darstellung
+ Überschrift 1 ++ Überschrift 2 Überschrift erster und zweiter Ordnung; pro + wird die Unterschrift eine Hierarchiestufe herunter gesetzt. Das + muss direkt am Zeilenanfang stehen.
[[toc]] Dieser Befehl erstellt automatisch ein Inhaltsverzeichnis auf Basis der Überschriften.
---- Erstellt eine horizontale Linie.
* Ungeordnete Liste * Unterpunkt Ungeordnete Liste; pro Leerzeichen vor dem * wird der Unterpunkt eine Hierarchieebene nach unten gesetzt.
# nummerierte Liste # Unterpunkt Generiert eine nummerierte Liste; wobei jeder Punkt pro Leerzeichen vor dem # eine Hierarchieebene tiefer eingestuft wird.
|| Feld 1 || Feld 2 || Feld 3 || |||| Zelle mit colspan =”2” || || |||||| Zelle mit colspan=”3” || Erzeugt eine Tabelle; ein Feld wird jeweils mit || eingeleitet, und das Zeilenende wird dann mit || abgeschlossen. Mehrere ||-Paare generieren einen Colspan.
<code> Code </code> Text wird als Code ausgezeichnet; geben Sie im öffnenden Tag type="php" oder type="html" an, wird ein PHP- oder HTML-Syntax-Highlighting vorgenommen.
http://c2.com/wiki.gif [http://c2.com/wiki.gif Text] Bild einbinden; der URL muss mit http:// anfangen und auf gif, jpg oder png enden. In [ und ] kann noch ein Alternativ-Text angegeben werden.
http://www.abc.de [http://www.abc.de Text] Normaler Link, muss mit http:// anfangen. Schließen Sie den Link mit [ und ], können Sie einen Link-Text angeben.
> Einrücken \ zweite Zeile >> Tiefer eingerückt Mit > rücken Sie blockweise ein. Pro Größer-als-Zeichen wird eine Ebene weiter eingerückt. Um zu definieren, dass die nächste Zeile noch zu dem Block gehört, wird ein \ genutzt.
`` Nicht geparst `` Der Text zwischen den `` wird nicht geparst.

Nachdem Sie nun einen Großteil der Wiki-Syntax kennen, folgt ein kleines Beispiel zum Konvertieren nach XHTML. Folgender Wiki-Code soll nach XHTML konvertiert werden:

+ Ein kleines Beispiel 
* Wiki ist 
 # schnell 
 # einfach 
 
**Bilder** einzubinden geht 
@@+++ schnell und einfach @@: 
 
http://pear.php.net/gifs/pearsmall.gif 
 
||Eine Tabelle || kann || 
|| auch || schnell || 
||||gebaut werden, ohne HTML zu beherrschen ||

Listing 11.3 Text, der konvertiert werden soll

Der Code zum Umwandeln der Daten ist auch sehr einfach aufgebaut, wie Sie in Listing 11.4 sehen können.

<html> 
   <head><title></title></head> 
   <body> 
<?php 
// Klassendatei laden 
require_once 'Text/Wiki.php'; 
 
// Einlesen des Textes 
$text=file_get_contents('text.txt'); 
 
// Neues Objekt instanziieren 
$wiki = new Text_Wiki(); 
 
// Text nach XHTML formatieren 
$xhtml = $wiki->transform($text, 'Xhtml'); 
 
// Code ausgeben 
echo $xhtml; 
?> 
   </body> 
</html>

Listing 11.4 Code zum Konvertieren nach XHTML

Wie Sie sehen, benötigt der Konstruktor keine Informationen. Die Methode transform(), die die eigentliche Konvertierung vornimmt, bekommt als ersten Parameter den Text übergeben, der konvertiert werden soll, und als zweiten das Ziel, in das konvertiert werden soll. Neben Xhtml können Sie zurzeit auch Latex oder Plain angeben. Andere Formate wie PDF, Docbook oder RTF sind in Vorbereitung.

Abbildung 11.2 Ausgabe des gerenderten Texts im Browser

Mit dieser Vorgehensweise können Sie zwar schon einiges bewirken, aber ein paar Fragen sind noch offen. Zum Ersten stellt sich die Frage, wie Sie die Texte formatieren können, so dass nicht nur die Standard-HTML-Formatierung genutzt wird. Hierzu können Sie mit CSS arbeiten. Und zwar ist es möglich, den einzelnen Tags CSS-Klassen zuzuweisen, die dann von Ihnen frei definiert werden können. Leider hört sich das etwas einfacher an, als es ist.

Innerhalb einer Formatierungsvorschrift (format), also in diesem Fall XHTML, gibt es verschiedene Regeln (rules), in denen bestimmte Tags zusammengefasst sind. So umfasst die Rule Table alle Tags, die für die Erstellung einer Tabelle benötigt werden (<table>, <tr>, <td>, <th>). Für jedes dieser Tags ist dann ein config_key vorgesehen, mit dessen Hilfe der Name einer CSS-Klasse zugewiesen werden kann. Für das Tag <table> ist das z. B. der Schlüssel css_table, für das Tag <td> der Schlüssel css_td etc.

Um eine solche Klasse zuzuweisen, steht die Methode setRenderConf() zur Verfügung, die alle diese Werte in der genannten Reihenfolge übergeben bekommt.

$wiki->setRenderConf('Xhtml','Table','css_td','tab');

Mit diesem Aufruf würde für den Renderer Xhtml die Rule Table so verändert, dass jedem <td> das Attribut class="tab" hinzugefügt wird. Die eigentliche Definition der Styles muss dann an anderer Stelle erfolgen. Ein wenig einfacher gestaltet sich die Vorgehensweise bei Rules, die nur ein Tag enthalten, wie z. B. <i>. In einem solchen Fall ist der Schlüssel immer css.

Nun stellt sich nur noch die Frage, welche Rules es gibt und welche Schlüssel dort enthalten sind. Hierzu möchte ich Sie auf die externe Homepage des Pakets verweisen, da diese Darstellung hier einfach zu umfangreich wäre. Die externe Homepage finden Sie unter http://wiki.ciaweb.net/yawiki/index. php?area=Text_Wiki, wobei die Informationen zu den Rules unter http:// wiki.ciaweb.net/yawiki/index.php?area=Text_Wiki&page=WikiRules zu finden sind. Die Dokumentation des Pakets unter pear.php.net lässt doch leider ein wenig zu wünschen übrig.

Erwähnenswert ist noch die Rule toc, die für das Erstellen eines Inhaltsverzeichnisses zuständig ist. toc verfügt über verschiedene Schlüssel, mit denen den einzelnen Elementen des Inhaltsverzeichnisses eine Formatierung zugewiesen werden kann. Wichtig ist hierbei der Schlüssel title. Mit seiner Hilfe können Sie die Überschrift für das Inhaltsverzeichnis definieren. Die normale Ausgabe Table of Contents könnten Sie mit

$wiki->setRenderConf('Xhtml','toc', 
                      'title','Inhaltsverzeichnis');

durch den Text Inhaltsverzeichnis ersetzen.

Im Manual werden Sie auch noch einige Regeln finden, die sich nicht auf Tags, sondern auf das globale Konvertierungsverhalten beziehen. Das Verhalten dieser so genannten Filter wird üblicherweise nicht mit setRenderConf(), sondern mit setParseConf() festgelegt, da sie nicht erst beim Rendern, sondern schon beim Parsen des Textes genutzt werden.

Fehlt nur noch ein letzter Punkt, damit Sie ein Wiki auf Basis dieses Pakets erstellen können: Wiki-Links und InterWiki-Links. Hiermit werden Links bezeichnet, die auf eine andere Seite im selben Wiki bzw. auf Seiten in anderen Wikis verweisen. Diese Links werden innerhalb des Textes dadurch gekennzeichnet, dass Wörter direkt hintereinander geschrieben werden wie beispielsweise LinkZurSeite. In diesem Fall erscheint auch der Text »LinkZurSeite« auf der fertig gerenderten Seite. Um dem User einen anderen Text zu zeigen, geben Sie den Link in eckigen Klammern an und schreiben den gewünschten Text direkt dahinter, wie in diesem Beispiel: [LinkZurSeite Beschreibung des Links]

Damit das System das in einen sinnvollen Link umwandeln kann, fehlt aber noch die Information, welche URL der Server hat. Diese muss dem System mithilfe von setRenderConf() mitgeteilt werden. Hierbei ist wikilink die Rule und view_url der Schlüssel, der gesetzt werden muss.

$wiki->setRenderConf('Xhtml', 'wikilink', 
             'view_url','http://example.com/show.php?seite=');

Ein Link hätte dann das Format http://example.com/show.php?seite =LinkZurSeite. Dies ist der übliche Aufbau für Links in Wikis. Mit rein statischen Seiten wird nicht gearbeitet, wobei ein Caching der einmal erstellten Seiten sinnvoll ist. Damit die Links nicht ins Leere laufen, müssen Sie dem System auch noch mitteilen, welche Seiten denn überhaupt existieren. Hierzu muss dem Schlüssel pages noch ein Array mit existierenden Seiten übergeben werden:

$seiten = array('HomePage', 
                'LinkZurSeite', 
                'AndereSeite'); 
$wiki->setRenderConf('Xhtml', 'wikilink', 'pages', $seiten);

Eine ähnliche Vorgehensweise gilt für InterWiki-Links. Diese setzen sich allerdings immer aus einem Server- und Seitennamen zusammen, wie beispielsweise DerServer:DieSeite. Auch hierbei können Sie einen erklärenden Text mit angeben, wenn Sie mit eckigen Klammern arbeiten: [DerServer:DieSeite Hier geht’s zum anderen Wiki]. Auch hier muss der Renderer wissen, wie die URL des Servers lautet, was mit

$sites = array( 
   'MeatBall'    => 'http://www.usemod.com/cgi-bin/mb.pl?%s', 
   'Advogato'    => 'http://advogato.org/%s', 
   'MyWiki'      => 'http://c2.com/cgi/wiki?%s' 
); 
$wiki->setRenderConf('Xhtml', 'interwiki', 
                     'sites',$sites

festgelegt wird. Der Schlüssel sites aus der Rule interwiki bekommt ein Array mit einer Kombination aus Wiki-Namen und URLs übergeben. Bitte beachten Sie das %s am Ende der URL. Das wird für die Ausgabe benötigt und wird durch den Seitennamen ersetzt. Welche Seiten auf dem Ziel vorhanden sind, müssen Sie bei InterWiki-Links nicht definieren.

Text_Wiki ist alles in allem ein sehr leistungsfähiges Paket, das vielfältigste Möglichkeiten bietet. Sollten Sie es nutzen wollen, möchte ich nochmals auf die externe Homepage des Pakets hinweisen, die wirklich sehr hilfreich ist.

 <<   zurück
     
  Zum Katalog
Zum Katalog: PHP PEAR
PHP PEAR
Jetzt bestellen!
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Katalog: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Katalog: MySQL 5.6






 MySQL 5.6


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de