Registrieren Hilfe Suche Mitgliederliste Wer ist online? Einloggen
Willkommen bei Tritanium Community! Falls dies Ihr erster Besuch hier ist, lesen Sie sich bitte die Hilfe mit den häufigsten Fragen und ausführlichen Erklärungen durch! Falls Sie an den Diskussionen teilnehmen wollen, sollten Sie sich registrieren oder, falls Sie das schon getan haben, sich einloggen. Wir wünschen Ihnen viel Spaß!

Tritanium Community » Tritanium Bulletin Board 1 » Andere Fragen und Probleme » Plugins einbauen

Seiten (1) [1] Neue Antwort erstellenNeues Thema erstellen

Autor Thema: Plugins einbauen
Samson
Lernt noch alles kennen

ID # 18



Plugins einbauen
webmaster@berlinerschachverband.de
Ich möchte in mein Schach-Forum Plugins zum Darstellen eines Schachbrettes oder einer ganzen Partie zum Nachspielen einbauen. Soweit ich weiß, gibt es aber keine Plugin-Schnittstelle. Das ließe sich sicher über den BBCode umsetzen.

Beim Schachbrett könnte man im Forum z.B. für die Grundstellung schreiben:

Code
1
[fen=rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR]


Bei der nachspielbaren Partie müßte vorher die PGN-Datei hochgeladen werden (z.B. über die Funktion "Datei hochladen") und das BBCode-Tag entsprechend geändert werden:

Code
1
[pgn=uploads/partie.pgn]


Wo wäre so ein externes PHP-Skript (Plugin) am besten einzubauen? In der BBCode.php? Oder gibt es eine bessere Stelle? Und zusätzliche BBCode-Buttons im Editor wären natürlich auch nicht schlecht.

-----------
Viele Grüße
Frank
Geposted: 31.07.2011 09:15
Chrissyx
Supermoderator

ID # 2285



Re: Plugins einbauen
E-Mail schicken
Für neue BBCodes musst Du die modules/BBCode.php erweitern. Die neuen Buttons für den Editor müssen in der templates/xxx/templates/BBCodes.tpl angelegt werden.

Um den Verwaltungsaufwand bei neuen Forenversionen gering zu halten, würde ich diese nicht gerade trivialen Parsererweiterungen in eine neue Datei auslagern und dann einfach in die BBCode.php einbinden. Füge also direkt in die zweite Zeile nach dem "<?php" ein:
Code
2
include_once('MyBBCode.php'); //Name der Datei ggf. anpassen

Lege in der neuen MyBBCode.php zwei neue Funktionen an:
Code
1
<?php
2
function cbFEN($elements)
3
{
4
    return $elements[1];
5
}
6
7
function cbPGN($elements)
8
{
9
    return $elements[1];
10
}
11
?>

Diese Funktionen soll der Parser nun aufrufen, wenn [fen]- oder [pgn]-Tags im Text gefunden wurden. Dazu muss die Funktion parse um die entsprechende Erkennung erweitert werden. Füge hinter Zeile 141 das ein:
Code
142
            $string preg_replace_callback("/\[fen\](.*?)\[\/fen\]/si"'cbFEN'$string);
143
            $string preg_replace_callback("/\[pgn\](.*?)\[\/pgn\]/si"'cbPGN'$string);

Zusammen mit dem include_once() wären das zukünftig die einzigen Anpassungen die bei jedem Forenupdate immer wieder durchgeführt werden müssen.

Zurück zu den Funktionen in der MyBBCode: In $elements[1] befindet sich der jeweils gefundene Text zwischen den Tags, den es jetzt weiter zu verarbeiten gilt. Im Moment wird dieser einfach so zurückgegeben, d.h. aus
Code
1
[fen]rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR[/fen]

entsteht im Beitrag:
Code
1
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR

Falls Du bereits eine fertige Klasse hast, die aus einer FEN ein passendes Bild generiert, kannst Du diese hier aufrufen und den fertigen XHTML-Bild-Code zurückgeben. Wenn nicht, musst Du diese Funktionalität hier selber implementieren.

Bei hochgeladenen PGN-Dateien fehlt noch die Erkennung beim Upload. Öffne dazu die modules/Upload.php und füge nach Zeile 141 ein:
Code
142
                        if(Functions::substr($_FILES['uploadedFile']['name'], -4) == '.pgn')
143
                            $this->bbCode sprintf('[pgn]%s[/pgn]'$uploadName);

Wird nun eine PGN-Datei hochgeladen, landet diese als
Code
1
[pgn]uploads/2011-07-31-17-26-25-partie.pgn[/pgn]

im Beitrag und wird vom BBCode-Parser erkannt, der wiederrum "uploads/2011-07-31-17-26-25-partie.pgn" an die cbPGN()-Funktion via $elements[1] liefert. Jetzt kannst Du die Datei öffnen und wie bei FEN weiter verarbeiten.

Fehlen noch die Buttons im Editor. Diese können einfach ans Ende der BBCodes.tpl eingefügt werden. Beispiel für das TBB2 Beta-Template:
Code
66
<input class="formBBCodeButton" type="button" value="FEN" onclick="setTag('[fen]', '[/fen]');" />

Für PGN braucht man eigentlich keinen Button, da dies implizit über Datei hochladen abgedeckt wird. Ausnahme wäre externe PGN-Dateien von anderen Servern einbinden.

-----------
Tritanium Scripts developer
Filebased rulez
Geposted: 31.07.2011 19:37

Seiten (1) [1] Neue Antwort erstellenNeues Thema erstellen
Tritanium Bulletin Board 2
© Tritanium Scripts