Dann werde ich mal versuchen, das alles auseinanderzutüddeln. Da alles irgendwie zusammgehört, hab ich hier auch meine Gedanken zum Thema bbcode niedergeschrieben.
Thema TextfliterAPIZuerst sei die Bemerkung gestattet, das es sich um eine Transformation und um keinen Filter handelt. Wir tranformieren ja von einer Ausgabe (bbcode) in eine andere (HTML, Text). Filter "reinigen" nur eine Ausgangsbasis von nicht gewünschten Elementen, das ist ka hier nicht der Fall.
Die "Texttransform" Klasssen sollten nur eins machen und zwar von Format A nach Format B transformieren. Das ganze sollte soweit unabhängig sein, das der Code wiederverwendbar ist. Das kann dann so aussehen, das auch das Suchmodul die Klasse benutzen kann, um Beschreibungstexte zu einem Suchergebnis vernünftig formatiert darzustellen. Weitere Denkbare ANwendungen wären das Versenden eines BBcode Textes als Textemail oder die Generierung von RSS Feeds.
Das Paket, wo das reingehört, gibt es schon und heißt UTILS. Als Klassenname schlage ich jetzt einfach mal Texttranform vor. Somit gibt es folgende, neue API Klassen:
class.UTILS_TexttransformBbcode.php
class.UTILS_TexttransformHtml.php
class.UTILS_TexttransformText.php
class.UTILS_TexttransformSfLink.php (Die Klasse "TexttransformSfLink" soll die Möglichkeit geben, das auch die cmstags link und filelink in andere Formate transformiert werden können, weitere Klasssen für Radiobutton, Selectbox, Date sind ebenfalls denkbar).
Sinn dieser Klassen ist nun das beliebiger Content in einen anderen transformiert werden kanns. Jede Klasse sollte zumindest die Transformation in Text und HTML bieten.
Beispiel:
$bbcode =& sf_factoryGetObject('UTILS', 'TexttransformBbcode');
$html_out = $bbcode->getAsHtml($bbcode_input);
$text_out = $bbcode->getAsText($bbcode_input);
Bei Transformatoren kann es Sinn machen,
a: mit set Methoden Konfigurationsoptionen zu übergeben
b: neben den Output HTML und Text noch andere Transformationen zuzulassen
$html =& sf_factoryGetObject('UTILS', 'TexttransformHtml');
$html->setRenderer('Xhtml');
$bbcode_out = $html->getAsBbcode($html_in);
Also kurz: Ziel der Texttranform API ist, den Programmierer eine möglichst einfach zu bedienende Schnitstelle zu geben, womit man jeden cmstag Content in einen anderen transformieren kann.
Was fangen wir jetzt damit an?
Wir haben nun die Möglichkeit, jeden COntenttyp in einen anderen umwandeln zu können. Im Falles des BBcodes ist damit der PHP Unterbau da, den wir in der fnc.type.php benötigen. Auch Suchmodul, Content zu Textmail, Gästebuch mit bbcode etc. können davon partizipieren.
Thema: Textareas können beliebige Tranformationen zugewiesen werdenIdee war (auch im bbcode Thread), das z.B. dem cms:tag Textarea durch die Tagconfig eine beliebige Formatierung zugewwiesen werden kann. Dem muß ich eine klare Absage geben, den ich halte es für einen fatalen Fehler. Diese Funktionalität wird es nicht geben.
Begründung: Die Texttransformationen werden im cms:tag dynamisch zugewiesen. Damit kann rein theoretisch jeder Content anders formatiert sein. Stehen die Inhalte für sich alleine, ist das kein Problem, aber sobald Module wie der Categorywalker über den Content gehen, weiß dieser nicht mehr, wie die Inhalte zu formatieren sind, den darüber sind im System keine Informationen gespeichert. Jedes Modul, welches dann auf den Content zugreift, kann höchstens raten, wie dieser darzustellen ist. Im einem C>MANAGEMENT<S kann das nicht unser Ziel sein.
Meine Alternative: Für jeden neuen Contenttype gibt es ein eigenens cms:tag. Das wird ja erst einmal nur der bbcode Editor sein (Aus Gründen der Abwärtskompatibilität wird die Textarea dieses Feature auch erst einmal erhalten, allerdings in Vorhinein gleich als Deprecated gekennzeichnet. Die Textarea mit bbcode auszustatten war ein riesen Fehler und hat im DeDi Forum ja auch für einigen Trouble gesorgt, als den Leuten auf einmal Suchmodul und Categorywalker um die Ohren geflogen sind). Damit hat der bbcode eine feste Definition und jeder Modulprogrammierer weiß, das es sich um bbcode und nicht um xyz handelt.
Wir haben durch die schicken neuen Texttransformationsklassen nun die Möglichkeit, jeden Content in einen anderen umwandeln zu können. Nun möchte ich aus meinem Inhalt, den ich bis jetzt als HTML im WYSIWYG eingegeben habe, als bbcode weiterpflegen. Also brauche ich eine Funktionalität, welche mir den Inhalt vom cms:tag wysiwyg in den cms:tag bbcode überführt. Das kann so aussehen, das ich einen Konfigurationsbidschirm habe, wo ich die gesamten Inhalte einer Seite sehe und dort Typ, Id, Container, Seite (nicht vergessen: Wir unterhalten uns hier in erster Linie um den Typ
) neu zuweisen kann, bzw. den Content dorhin konvertieren kann. Damit ist genau das Ziel erreicht, welches auch von euch verfolgt wird: Jeder Inhalt kann beliebig formatiert werden. Bei genaueren Hinsehen ist diese Methode auch weitaus mächtiger und man tritt sich einige Nägl nicht ein, die mit der "eine Textarea für alles" Methode ganz schön schmerzen würden.
- Mit der Textareamethode dürfte man alle Inhalte manuell nachziehen, sobald man einen anderen Transormator verwenden würde. Mit dem zusätzlichen Configbereich passiert das nicht, den alles ist wohl definiert.
- Mit der Textareamethode crashen alle davon abhängigen Module oder müssen jedes mal nachgezogen werden, bei dem zusätlichen Configbereich nicht
- Der neue Configbereich gibt weitreichene Möglichkeiten für das "Geradeziehen" von Fehlkonfigurationen.
Thema JS bbcodeWichtig hierbei ist erst einmal, das wir ein in sich gekapseltes JS Framework habe. Im Idealfall ist das das Basisframework, welche eine Konfiguration ermöglicht, die man sich recht flexibel anpassen kann. Was da dann PHPseitig mit gemacht werden kann, ist erst einml nebensächlich. Siehe FCK Editor. Einfach Klasse initialisieren, betroffene Textarea angeben, Configs reinschieben, rennen lassen.
Ich möchte die bbcode JS Editorklasse so haben, das man sich die Toolbar recht frei zusammenstellen kann. Das sollte soweit gehen, das man für einfach- ([hr]) und zweifach- (
...) Ersetungen auch eigene Tags defineiren kann (<hr /> <b>....</b>), damit der Editor nicht nur mit bbcode läuft, sondern auch z.B. als Ersatz für den Sourcecodeeditor laufen kann, wenn vielleicht auch nicht mit allen Features (der Sourcecodeeditor gehört einfach ersetzt, der war einmal...).
Bei speziellen Dialogen wie Dateiauswahl, sollte zum einen der Ressourcebrowser zum Einsatz kommen, zum anderen sollte auch hier die endgültige Formatierung der AUsgabe nach Möglichkeit beinflussbar sein. Das könnte dann soweit gehehn, das man auch unter Design->Layouts mit dem JS Framework Bilder auswählen kann, die man ins layout packt. Sowas könnte man dann später auch um weitere Dialoge erweitern, wie einem CMS:LAY Tag Wizard.