Archiv verlassen und diese Seite im Standarddesign anzeigen : vBGo Add-on Standards 1.0 *Draft*
vBGo Add-on Standards 1.0 *Draft*
Richtlinien für die Erstellung von vBulletin Modifikationen
Zusammenfassung
Dieses Dokument beschreibt den Entwurf für Standards die bei der Erstellung von vBulletin Modifikationen
eingehalten werden müssen oder eingehalten werden sollten.
Status dieses Dokuments
Dieses Dokument wurde vom vBulletin-Germany.org Team erstellt.
Der Entwurf erhebt keinen Anspruch auf Vollständigkeit und Korrektheit.
Inhalt
vBGo Add-on Standards?
Was sind die vBGo Add-on Standards?
Warum sind diese Standards notwendig?
Definitionen
Terminologie
Allgemeine Begriffe
Code-Standards
Klammern
Zeileneinzüge
Schleifen und Verzweigungen
Verwendung von Leerzeichen
Zeichenketten
Array-Schlüssel
$_GET, $_POST und $_REQUEST
Boole'sche Rückgabewerte
Logische Operatoren (AND, &&, etc.)
Kommentare
Vergleich von Variablen
SQL-Abfragen
'DO'-Abschnitte
Variablen- und Funktionsnamen
Einstellungen
Templates
Allgemeines
Variablen/Bedingte Abschnitte
Phrasen und Style-Variablen
Validität gemäß XMHTL 1.0
PHP
Notwendige Angaben für eigene Scripte
Sicherheitsaspekte
Effizenzaspekte
Add-ons
Datenstrukturen
Veröffentlichung
1. vBGo Add-on Standards?
1.1 Was sind die vBGo Add-on Standards?
Die vBulletin-Modifikations-Standards beschreiben allgemeine Standards und Eigenschaften an die sich Entwickler von vBulletin Modifikationen halten sollten.
vBulletin-Modifikationen welche die verpflichtenden Richtlinien einhalten können nach erfolgreicher Prüfung eine entsprechende Auszeichnung erhalten.
1.2 Warum sind diese Standards notwendig?
vBulletin ist ein sehr leistungsfähiges Community-Framework welches sich durch einfache Erweiterbarkeit auszeichnet.
Doch auch wenn vBulletin umfangreiche Funktionalität 'Out-of-the-Box' mitbringt, so reicht diese doch hin und wieder nicht aus, sodass der Wunsch auftaucht weitere Funktionen zu realisieren.
Dementsprechend groß ist das Angebot an Erweiterungen und Modifikationen für vBulletin.
Leider sorgt dies auch für eine gewisse Unübersichtlichkeit der verfügbaren Modifikationen und macht es gerade für Anwender ohne HTML/PHP-Kenntnisse schwierig sich zurechtzufinden:
Welche Modifikation brauche ich?
Welche Auswirkungen auf die Geschwindigkeit meines Forums hat eine Modifikation?
Ist eine Modifikation sicher?
Die vBGO Add-on Standards sollen helfen, das teilweise unübersichtliche Angebot an Modifikationen zu ordnen, zu standardisieren und somit die Handhabung für Entwickler und Anwender von vBulletin Modifikationen weiter zu vereinfachen.
Bei Modifikationen welche die genanntne Kriterien erfüllen kann sich der Anwender sicher sein dass diese die hier dargelegten Mindeststandards an Sicherheit, Effizienz und Interoperabilität erfüllen.
2. Definitionen
2.1 Terminologie
Die folgenden Begriffe werden in dieser Spezifikation verwendet.
Darf
"Darf" ist als optionales Merkmal/Vorgehensweise zu interpretieren. Der Begriff "optional" unterliegt der gleichen Definition.
Muss/Darf nicht/Ist zu verwenden/Ist nicht zu verwenden
Im Sinne dieser Spezifikation soll das Wort "muss" als verbindliche Erfordernis einer Modifikation/Implementierungsverfahren interpretiert werden.
Sollte
Das Wort "sollte" kennzeichnet Empfehlungen im Bezug auf die Eigenschaften einer Modifikation oder deren Implementierung.
Es handelt sich hierbei um empfohlene Verfahrensweisen die als Bedingung für hoch qualitiative Produkte anzusehen sind.
2.2 Allgemeine Begriffe
Plugin
Als Plugin wird ein einzelner Code-Abschnitt für einen Einstiegspunkt in vBulletin bezeichnet
Phrase
Als Phrase wird ein variabler Text für eine Sprache von vBulletin bezeichnet
Template
Ein Template ist ein HTML-Codeteil, ggf. mit Variablen und bedingten Anweisungsblöcken (<if>...</if>)
Produkt
Als Produkt wird eine Einheit aller Bestandteile einer Modifikation bezeichnet. Hierzu gehören Plugins, Phrasen, Einstellungen, Templates, Hilfetexte und
Einstellung
Eine Einstellung ist ein Eintrag im Abschnitt vBulletin Einstellungen. Dieser besteht aus einem Variablennamen, Datentyp, Titel & Beschreibung sowie ggf. PHP-Code zur Verarbeitung
Datastore
Eine von vBulletin verwendete Tabelle für häufig benötigten Datenobjekte
Administratives Script
Dies ist ein Script welches im Administrator- oder Moderator-Kontrollzentrum läuft
3. Code-Standards
In den folgenden Abschnitte wird beschrieben wie PHP-Code zu formatieren ist.
Die Regeln dienen der Standardisierung der Dateien und Plugins, helfen typische Programmierfehler (z.B. & anstatt &&) zu vermeiden.
Hierdurch wird eine einheitliche Code-Struktur erreicht, welche zu einer guten Lesbarkeit und Verständlichkeit des Codes führt.
Die meisten Abschnitte enthalten Beispiel für Falschen und Korrekten Code.
Soweit keine expliziten Ausnahmen aufgeführt werden, sind die Regelungen immer einzuhalten.
3.1 Klammern
Geschweifte Klammern sind in eine neue Zeile zu schreiben.
Es sind immer geschweifte Klammern zu verwenden, auch dann wenn der auszuführende Code-Teil nur aus einer Zeile besteht.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
3.2 Zeileneinzüge
Für Zeileneinzüge ist immer ein einfacher Tabulator zu verwenden
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
3.3 Schleifen und Verzweigungen
Für Schleifen und Verzweigungen ist nach dem Schlüsselwort ein Leerzeichen vor der Klammer für die Bedingung einzufügen.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Bei Verzweigungen ist 'else if' anstatt 'elseif' zu verwenden.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
3.4 Verwendung von Leerzeichen
Operatoren mit Ausnahme der Post- und Prä-Inkrement/Dekrement Operatoren (++ und --) sind mit einfachen Leerzeichen zu umschließen.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Funktionsaufrufe und -deklarationen sind mit einem Leerzeichen vor der Klammer der Parameterliste zu versehen.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Argumente einer Funktion sind durch ein Leerzeichen nach dem Komma zu trennen.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Auf die Verwendung zusätzlicher Leerzeichen ist zu verzichten.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
3.5 Zeichenketten
Zeichenketten sind durch einfache Anführungszeichen zu umschließen falls sie keine Variablen oder Steuerzeichen enthalten, andernfalls durch doppelte.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------SQL Abfragen sind durch doppelte Anführungszeichen zu umschließen.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Variablen sind nicht in Zeichenketten zu setzen wenn dies nicht nötig ist.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Aufrufe der Funktion eval() sind wenn möglich mit einfachen Anführungszeichen zu verfassen.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
3.6 Array-Schlüssel
Array-Schlüssel sind immer in Anführungszeichen zu setzen wenn es sich um Zeichenketten oder Variablen handelt. Hierbei gelten die gleichen Regeln wie für Zeichenketten.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Array-Schlüssel die selbst aus Arrays bestehen sind auf der höchsten Ebene mit doppelten Anführungszeichen zu versehen.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Verschachtelte Arrays in Zeichenketten sind nach Möglichkeit zu vermeiden indem die Zeichenkette unterbrochen und mit Hilfe des Punkt-Operators zusammengesetzt werden. Sollte dies nicht möglich sein kann die {}-Syntax verwendet werden.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
3.7 $_GET, $_POST und $_REQUEST
Um sicherzustellen dass Eingabedaten den erwarteten Formaten entsprechen, sind Inhalte der folgenden Arrays nicht direkt zu verarbeiten:
$_GET
$_POST
$_REQUEST
$_COOKIE
$_FILES
Auf diese Variablen ist nur für die Entscheidung über die durchzuführende Aktion eines Scripts zuzugreifen, d.h. $_GET['do'], $_POST['do'] bzw. $_REQUEST['do'].
In speziellen Ausnahmefällen kann es nötig sein direkt auf die oben genannten Variablen zugreifen zu müssen, dies sollte jedoch unter allen Umständen vermieden werden.
Die oben genannten Variablen sind nicht in Templates oder Phrasen zu verwenden.
Die Methoden clean_gpc() und clean_array_gpc() der Klasse vB_Input_Clenaner sind zu verwenden um Benutzer-Eingabedaten zu bereinigen.
Die gültigen Datentypen sind:
TYPE_BOOL - Bool'scher Wert
TYPE_INT - Integer
TYPE_UINT - Vorzeichenloser Integer
TYPE_NUM - Fließkommawert
TYPE_UNUM - Vorzeichenloser Fließkommawert
TYPE_UNIXTIME - UN*X Zeitstempel (Sekunden seit dem 01.01.1970 00:00h, Vorzeichenloser Integer)
TYPE_STR - beschnittene Zeichenkette (enthält keine führenden oder abschließenden Leerzeichen)
TYPE_NOTRIM - Zeichenkette
TYPE_NOHTML - Beschnittene Zeichenkette auf die htmlspecialchars_uni() angewandt wurde (HTML sicher)
TYPE_ARRAY - Array
TYPE_FILE - Datei
TYPE_NOCLEAN - Unbehandelt
Alle Datentypen außer TYPE_NOCLEAN stehen auch als Array-Typ zur Verfügung, d.h. die Werte des Arrays entsprechen dem jeweiligen Datentyp. Beispiel: TYPE_ARRAY_BOOL für ein Array bool'scher Werte
Auf die bereinigten Werte wird über das Array $vbulletin->GPC mit dem Namen des Werts als Schlüssel zugegriffen, d.h. $vbulletin->GPC['field1']. Hierbei ist sichergestellt dass die Daten den erwarteten Datentyp haben, unabhängig davon wie die Rohdaten ausgesehen habe. So kann beispielsweise eine mit dem Typ TYPE_NOHTML bereinigte Variable direkt in HTML dargestellt werden ohne dabei Rücksicht darauf nehmen zu müssen ob deren Inhalt HTML-sicher ist.
Der erste Paramater von clean_gpc() und clean_array_gpc() bezeichnet den Anfangsbuchstaben das Array welchem die Rohdaten entnommen werden sollen. Hierbei ist es nicht möglich in einem Aufruf mehrerer Arrays zu verarbeiten, so ist es beispielsweise nicht möglich gleichzetig Werte ais $_COOKIE und $_POST zu verarbeiten - hierfür sind mehrere Aufrufe nötig. Alle Werte werden dem Array $vbulletin->GPC hinzugefügt, es ist also darauf zu achten dass Werte aus verschiedenen Quell-Arrays sich nicht überschreiben.
Hinweis: Werte aus $_COOKIE müssen mit COOKIE_PREFIX angesprochen werden:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
3.8 Boole'sche Rückgabewerte
Für Funktionen die nur 2 Werte zurückliefern sind die bool'schen Werte true/false anstatt 0/1 als Rückgabewerte zu verwenden.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Es ist true/fals anstatt TRUE/FALSE zu verwenden; Großschreibweise ist für eigene Konstanten zu verwenden.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
3.9 Logische Operatoren (AND, &&, etc.)
Es ist 'AND' anstatt 'and' oder '&& zu verwenden; 'OR' anstatt 'or' oder '||'.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------In foreach-Anweisungen ist 'AS' zu verwenden.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
3.10 Kommentare
Kommentare sind in englisch zu verfassen.
Für einzeilige bzw. kurze Kommentare ist // zu verwenden, für längere Kommentar-Blöcke /* ... */.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Kommentare sind vor den Code zu setzen den sie beschreiben.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Bei Schleifen oder Verzweigungen können Kommentare in den Codeblock gesetzt gesetzt werden.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------'DO'-Abschnitte sind wie folgt zu kommentieren. Falls eine Beschreibung für den Abschnitt angegeben werden soll, so ist diese unter der Trennlinie anzugeben.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Funktions-/Methodendefinitionen sind wie folgt zu kommentieren
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Wenn die Funktion keinen Rückgabewert hat ist die @return-Zeile wegzulassen.
3.11 Vergleich von Variablen
Die folgenden Standards sind zu beachten.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Wenn der Datentyp streng geprüft werden soll, ist !== bzw. === zu verwenden.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Wichtig, bitte beachten:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
3.12 SQL-Abfragen
Für SQL-Abfragen sind doppelte Anführungszeichen zu verwenden, auch wenn keine Variablen enthalten sind.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Nach SQL-Funktionsaufrufen sind keine Leerzeichen zu verwenden.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Wenn der Text einer Abfrage lang ist und daher besser in mehr als einer Zeile zu lesen, so ist die Abfrage derart in mehrere Zeilen zu zerlegen dass das Schlüsselwort jeweils am Anfang steht:
Doppeltes Anführungszeichen, Zeilenumbruch, Zeileneinzug, [Teil der Abfrage], Zeilenumbruch, doppeltes Anführungszeichen
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Zusätzliche 'AND' bedingungen für 'WHERE' sind einzurücken falls die Abfrage über mehrerer Zeilen geht.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Numerische Werte sind nicht in Anführungszeichen zu setzen, statt dessen ist intval() oder $var += 0; zu verwenden um den Datentyp sicherzustellen.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Für numerische Felder ist keine Länge anzugeben, es sei denn es wird 'UNSIGNED ZEROFILL' verwendet.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Bei Änderung von Tabellenstrukturen ist das Schlüsselwort 'AFTER' nicht zu verwenden, da dies auf einigen Servern zu Problemen führt.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------INSERT / REPLACE Abfragen sind wie folgt zu formulieren:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Bei INSERT / REPLACE Abfragen sind immer alle Felder anzugeben.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Mit AUTO_INCREMENT gekennzeichnete Felder sind in INSERT Abfragen nicht zu verwenden.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
3.13 'DO'-Abschnitte
Die meisten vBulletin-Scripte enthalten 'DO'-Abschnitte. Die folgenden Namenskonventionen sind zu beachten.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Soweit möglich sind die Abschnitte in obiger Reihenfolge zu verfassen, der Abschnitt 'modify' am Ende des Scripts.
Falls das Script Abschnitte zur Bearbeitung verschiedener Objekte beinhaltet (wie z.B. template.php für Templates und Styles),
so ist den Abschnittsbezeichnern der Name des Objekts hinzuzufügen.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Falls die obenen genannten Abschnitte nicht ausreichen um alle benötigte Funktionalität zu implementieren, so sind sprechender Bezeichner zu wählen, d.h. der Bezeichner sollte die Funktion des jweiligen Abschnitts zusammenfassen.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Hierbei sollten die Abschnitte innerhalb des Scripts nach Objekttyp gruppiert werden.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
3.14 Variablen- und Funktionsnamen
Variablen- und Funktionsnamen sollten soweit als möglich beschreiben, wofür diese verwendet werden ("sprechende Bezeichner").
Bezeichner sind in kleingeschriebenem Englisch zu verfassen, Worte sind hierbei durch einen Unterstrich zu trennen.
Falsch:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Korrekt:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Weiterhin sind folgende Namenskonventionen zu beachten
print_*
Funktionen die direkten Ausgabecode für den Browser oder Ausgabepuffer per print()/echo() erzeugen
Beispiele: print_input_row(), print_standard_error(), print_cp_header()
construct_*
Funktionen die HTML-Code zur weiteren Verarbeitung als Variable zurückliefern
Beispiele: construct_edit_toolbar(), construct_forum_jump()
is_*, contains_*
Funktionen die true/false anhand der übergegenen Argumente zurückliefern
Beispiele: is_valid_email(), is_wysiwyg_compatible(), contains_bbcode_img_tags()
can_*
Funktionen die true/false anhand von Rechten zurückliefern
Beispiele: can_moderate(), can_administer(), can_announce()
verify_*
Funktionen die Bedingungen prüfen und eine Fehlermeldung erzeugen wenn bestimmte Bedingungen erfüllt sind
Beispiele: verify_ip_ban(), verify_post_errors(), verify_word_allowed()
convert_*
Funktionen um Eingabedaten zu konvertieren
Beispiele: convert_mb_to_kb(), convert_html_to_bbcode(), convert_bits_to_array()
convert_*
Funktionen um Daten aus der Datenbank zu laden und in PHP Cache Variablen vorzuhalten um die Datenbanklast zu verringern
Beispiele: cache_templates(), cache_forums(), cache_birthdays()
fetch_*
Funktionen die verschiedene Datentypen zurückliefern. Falls der Datentyp nicht dem Funktionsnamen zu entnehmen ist, so ist dieser hinzuzufügen (z.B. fetch_reminders_array())
Beispiele: fetch_template(), fetch_user_search_sql(), fetch_user_location_array()
process_*
Funktionen die Arrays für weitere Verarbeitung aufbereiten
Beispiele: process_thread_array(), process_post_preview(), process_online_location()
build_*
Funktionen die Daten zur späteren Verwendung in der Datenbank speichern
Beispiele: build_bbcode_cache(), build_new_post(), build_attachment()
delete_*
Funktionen die Daten aus der Datenbank löschen
Beispiele: delete_thread(), delete_post_index(), delete_user_pms()
undelete_*
Funktionen die wiederherstellbar gelöschte Daten wiederherstellen
Beispiele: undelete_thread(), undelete_post()
sanitize_*
Funktionen die Eingabedaten auf Validität prüfen und für weiter Verarbeitung aufbereiten
Beispiele: sanitize_perpage(), sanitize_url(), sanitize_remider_date()
handle_*
Callback-Funktionen des BBCode-Parser für bestimmte BBCodes
Beispiele: handle_bbcode_img(), handle_bbcode_list(), handle_bbcode_parameter()
file_*
Funktionen für Dateioperationen
Beispiele: file_read(), file_download(), file_append()
log_*
Funktionen für vBulletin Protokolle
Beispiele: log_admin_action(), log_vbulletin_error(), log_upgrade_step()
exec_*
Funktionen die etwas ausführen anstatt einen Rückgabewert zu liefern
Beispiele: exec_shutdown(), exec_queries(), exec_cron()
sort_*
Funktionen die Daten sortieren
Beispiele: sort_search_items(), sort_threaded_posts()
strip_*
Funktionen um Elemente aus einer Zeichenkette zu entfernen
Beispiele: strip_bbcode(), strip_blank_ascii(), strip_empty_bbcode()
xml_*
Funktionen die XML lesen oder erzeugen
Beispiele: xml_import_style(), xml_parse_language_otag(), xml_escape_cdata()
vb*, vb_*
Funktionen die PHP-Funktionen mit vBulletin-Funktionen ersetzen um diese zu erweitern oder in der Funktion anzupassen.
Falls der Funktionsname unterstriche enthält, so ist vb_ als Präfix zu verwenden, andernfalls vb.
Beispiele: vbmail(), vb_number_format(), vbcookie()
js_*
JavaScript-Funktionen die in PHP definieirt sind (und nicht in .js-Dateien)
Beispiele: js_dots(), js_confirm_clear_db(), js_forum_jump()
4. Einstellungen
Für Einstellungen sind "sprechende Bezeichner" zu verwenden, d.h. anhand des Variablennames sollte die Funktion ersichtlich sein; Bezeichner sind in englisch zu verfassen.
Auf Aufforderungen zur Eingabe von IDs (BenutzerID, ForumID, etc.) ist zu verzichten. Statt dessen sollte dem Benutzer eine Auswahl (Select-Menü oder Radio-Buttons) angeboten werden bzw. für BenutzerIDs eine Eingabefeld zur Eingabe des Benutzernamens.
Auf einen "globalen Ein-/Ausschalter" für eine Modifkkation ist zu verzichten, da dieser unnötig ist.
Einstellungen sollten nach Möglichkeit in die vorhandenen Einstellungsgruppen eingefügt werden, damit die logische Gruppierung der Einstellungen erhalten bleibt.
Die Formulierung der Titel/Beschreibungen sollte sich an Standardeinstellungen orientieren.
Bei der Vergabe der Reihenfolge sollten 10er Schritte eingehalten werden.
Für Einstellungen sollten Hilfetexte verfasst werden.
5. Templates
5.1 Allgemeines
Templates sind nicht für Texte in eMails, Privaten Nachrichten o.ä. zu verwenden, da dies zu Problemen führen kann.
Für Templates sind "sprechende Bezeichner" zu verwenden, d.h. anhand des Templatenamens sollte ersichtlich sein wofür ein Template verwendet wird.
Hierfür sind englische Bezeichenr derart zu wählen, dass für Haupttemplates (z.B. vollständige HTML-Seiten) durchgängig Großbuchstaben verwendet werden - für sonstige Templates Kleinbuchstaben.
Für Zeileneinzüge ist ein Tabulator zu verwenden
CODE:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Falls eine Modifikation über viele Templates verfügt, so sollten diese gruppiert werden. vBulletin gruppiert Templates anhand des verwendeten Präfix, d.h. es werden alle Templates mit einem bestimmten Text am Anfang zu einer Gruppe zusammengefasst.
Um eigene Templates zu gruppieren ist ein Plugin für den Einstiegspunkt template_groups:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Die Phrase group_prefix enthält hierbei den Text 'Präfix'. vBulletin fügt diesem Text das Wort Templates bei der Anzeige im Style-Manager hinzu.
5.2 Variablen/Bedingte Abschnitte
Für Variablen in Bedingungen gelten die Reglen aus Abschnitt 3.
Es sollten nach Möglichkeit nur einfache Variablen/Arrays verwendet werden. Falls dies nicht möglich ist, kann die {...}-Syntax verwendet werden.
CODE:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
In Templates sind nur einfache Bedingungen zu prüfen. Falls komplexere Konstrukte nötig sind, so ist im aufrufenden PHP eine $show-Variable entsprechend zu setzen.
Falsch:
CODE:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Korrekt:
CODE:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
5.3 Phrasen und Style-Variablen
In Templates sind keine Texte fest einzucodieren, statt dessen müssen Phrasen verwendet werden.
Falsch:
CODE:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Korrekt:
CODE:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Für Pfade zu Grafiken sind die entsprechenden Style-Variablen zu verwenden.
Falsch:
CODE:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Korrekt:
CODE:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Für die Angaben rechts/links sind im Regelfall die entsprechenden Style-Variablen zu verwenden.
CODE:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
5.4 Validität gemäß XHTML 1.0
Templates sind valide gemäß XHTML 1.0 Transitional (http://www.w3.org/TR/xhtml1/) zu verfassen.
Hier einige der wichtigsten Regeln:
Alle Tags müssen geschlossen werden. Wenn für ein Tag kein Ende-Tag existiert so ist ein selbstschließendes Tag zu verwenden, z.B. <br /> anstatt <br>
Alle Attribute müssen in der Schreibweise name="wert" verfasst werden, z.B. alt="$vbphrase[img_alt_text]"
Wenn reservierte Zeichen verwendet werden sollen (z.B. &), so müssen diese als Entities geschrieben werden:
CODE:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Jedes Dokument ist mit dem verwendeten Dokumenttyp & Zeichensatz zu kennzeichnen:
CODE:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Tags sind in Kleinbuchstaben zu schreiben
6. PHP
Dieser Abschnitt beschäftigt sich mit Eigenschaften von PHP-Code in eigenen Scripten oder Plugins, welche über die Code-Standrds gemäß Punkt 3) hinausgehen.
6.1 Notwendige Angaben
Ein allgemeines Frontend-Script sollte folgendermaßen aussehen:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Für die Konstante THIS_SCRIPT ist ein eundeutiger Bezeichner zu verwenden, im Regelfall der Dateiname ohne .php.
Die Arrays $phrasegroups, $specialtemplates, $globaltemplates und $actiontemplates müssen definiert werden.
Für AdminCP-Scripte ist hingegen folgendes Framework zu verwenden:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Die Rechteprüfung mittels can_admninister() ist hierbei verpflichtent. Es könnnen hierfür bereits bestehende Rechte benutzt werden (z.B. canadminusers für Benutzer-bezogene Aktionen) oder, für umfangreichere Modifikationen, auch neue Rechte eingeführt werden.
Falls das Script Eingabewerte verarbeitet welche eine Aktion für ein bestimmtes Element weiter spezifizieren (z.B. wenn eine ID übergeben wird), so sind diese im Aufruf von log_admin_Action() als String im Format
CODE:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------zu übergeben.
Phrasen sind nach Möglichkeit nicht in der Gruppe Kontrollzentrum (global) anzulegen sondern in entsprechend spezialisierten Gruppen, ggf. müssen eigene Phrasengruppen angelegt werden.
Die Konstate NO_REGISTER_GLOBALS ist nicht zu setzen.
6.2 Sicherheitsaspekte
Wie bereits in Abschnitt 3) dargelegt, kommt der Validierung der Ein- und Ausgabedaten eine zentrale Bedeutung zu.
Soweit möglich sind daher Datamanager zu verwenden um schreibend auf Tabellen zuzugreifen.
Daten aus den Arrays $_POST, $_GET und $_COOKIE dürfen nicht direkt verarbeietet werden, statt dessen ist die Klasse vB_Input_Cleaner wie in Abschnitt 3.7 dargelegt zu verwenden.
Bei der Verwendung von Variablen in Queries ist ebenso sicherzustellen dass diese den erwarteten Typ haben und entsprechend gereinigt sind sodass keine SQL Injections auftreten können.
Strings müssen somit mittels escape_string() gereinigt werden.
Bei der Ausgabe der Daten ist sicherzustellen dass diese kein HTML enthalten (es sei denn dies ist explzit gewünscht/erlaubt).
Hierzu muss für Daten die nicht bereits zuvor gereinigt wurden (z.B. beim Speichern in die Datenbank über einen Datamanger) die Funktion htmlspecialchars_uni() aufgerufen werden.
Beim Aufruf der Funktionen include()/require()/require_once()/include_once() dürfen außer in speziellen Ausnahmefällen im Paramater keine Variablen verwendet werden.
Die Anzahl der bei einem Scriptdurchlauf zu verarbeitenden Datensätze ist dahingehend zu begrenzen dass es nicht möglich ist durch Benutzereingaben eine extrem lange Scriptlaufzeit erreichen kann, da dies Angriffsmöglichkeiten bietet (Denial-of-Service Attack, DoS).
Alle Frontend-Scripte müssen den CSRF (Cross-Site Request Forgery) Schutz aktivieren.
Nährere Informationen hierzu im Artikel zum vBulletin CSRF Schutz (http://www.vbulletin-germany.org/showthread.php?t=3515)
6.3 Effizienzaspekte
Bei der Erstellung von Modifikationen sollten einige Grundaspekte berücksichtigt werden:
Plugin-Code sollte möglichst kompakt gehalten werden. Falls derselbe Code an mehreren Stellen verwendet wird bietet es sich an, diesen in eine Funktionsbibliothek auszulagern welche dann per require() geladen wird.
Sofern keine Umstände dagegen sprechen (Code kann mehrfach aufgerufen werden) sollte require() anstelle von require_once() verwendet werden.
Auf Manipulationen am Template-Cache (z.B. für dynamische Templateanpassungen) beispielsweise per str_replace() sollte verzichtet werden da dies bei jedem Aufruf unnötigen Overhead produziert.
Wenn möglich sollte auf Template Hooks zurückgegriffen werden.
Falls sich die benötigte GUI-Funktionalität nicht über Template Hooks realisieren lässt und Änderungen am Template-Chce durchgeführt werden, so müssen diese Änderungen in der Installationsanleitung dokumentiert sein und die automatische Änderung muss dauerhaft abschaltbar sein, z.B. durch eine Einstellung.
Queries sollten nicht in Schleifen ausgeführt werden. Falls dies nötig erscheint, so liegt in den meisten Fällen ein Fehler im Datenbankdesign vor.
Achtung: Mitunter ist es nicht offensichtlich dass eine Bfrage in einer Schleife ausgeführt wird. Häufig benutzte Einstiegspunkte in Schleifen sind beispielsweise: postbit_display_*, threadbit_process.
Es empfiehlt sich daher bei der Entwicklung die erzeugten Abfragen im Auge zu behalten.
Es sollten keine Funktionen verwendet werden die als deprecated gekennzeichnet sind, also z.B. iif() oder print_standard_error().
Bei Datenbankabfragen muss auf die korrekte Verwendung der Funktionen geachtet werden:
Schreibzugriffe müssen auf dem Master-Server ausgeführt werden
Zeitunkritische Lesezugriffe sollten auf dem Slave-Server durchgeführt werden.
Zeitkritische Lesezugriffe müssen auf den Master-Server durchgeführt werden Wenn nach einem Schreibzugriff ein Lesezugriff stattfindet der sich auf die geschriebenen Daten bezieht so muss dieser auf dem Master-Server erfolgen.
query_first() darf nur für Lesezugriffe verwendet werden
query() (deprecated) darf nicht verwendet werden
Templates sind im Regelfall über die Arrays $globaltemplates bzw. $actiontemplates zu cachen um zusätzliche Datebankabfragen zu vermeiden. Hierbei muss darauf geachtet werden dass nur die jeweils benötigten Templates gecached werden.
Auf Objekte wie Themen, Benutzer, etc. sollte über die Funktionen fetch_threadinfo(), fetch_userinfo() etc. zugegriffen werden da diese Caches verwenden um Datenbankabfragen zu minimieren
Weniger Datenbankabfragen sind nicht zwangsläufig effizienter. Mitunter macht es daher Sinn mehrere, aber einfachere Abfragen anstatt einer sehr komplexen einzusetzen.
Im Zweifelsfall sollte daher vor einer Veröffentlichung nachgefragt werdne ob das gewählte Konstrukt effizient ist bzw. wie es sich verbessern lässt.
Templates und Phrasen sollten so kompakt wie möglich gehalten werden um Datenbanktransfer und Speicherbedarf zu minimieren
Nicht mehr benötigte Variablen sind per unset() freizugeben um den Speicherbedarf zu minimieren
7. Add-ons
Für Add-ons sind die folgenden Angaben vorzunehmen:
Titel
Dies sollte ein aussagekfäftiger Titel für die Modifikation sein der bereits auf die Funktion schließen lässt
Beschreibung
Hier sollte ein kurze Beschreibung der Funktion der Modifikation erfolgen.
Version
Hier ist die Versionsnummer der Modifikation einzutragen.
Diese muss folgenden Schema entsprechen:
v.w[[.x].y] [Aplha|Beta|Gamma|Release Candidate|Patch Level z]
Beispiele: 3.6.0 Beta 1, 1.0, 2.0.3 Patch Level 4
Achtung: Versionsnummern wie 1.00 sind nicht zulässig.
Darüber hinaus empfiehlt es sich URLs für Support und Versionsüberprüfung einzutragen.
Für Veröffentlichungen auf vBGo können hierbei die folgenden URLs verwendet werden:
Versionsüberprüfung: http://www.vbulletin-germany.org/modifications.php?do=checkversion&productid=X
Support: http://www.vbulletin-germany.org/modifications.php?do=findrelease&productid=X
X steht hierbei für die Add-on ID der Modifikation.
Falls ein Add-on über administrative Scripte verfügt, so sind für diese Eintrage in der Administrator-Hilfe bereitzustellen.
Für umfangreichere Modifikationen im Frontend sollten FAQ-Einträge bereitgestellt werden.
8. Datenstrukturen
Die folgenden Standards sind zu beachten:
Für Tabellen- und Feldnamen sind keine Unterstriche zu verwenden. Neue Tabellen sowie neue Felder in Standard vBulletin-Tabellen dürfen mit einem Präfix versehen werden der auch einen Unterstrich enthalten darf (Beispiel: myaddon_).
Für Tabellen- und Feldnamen sind englischsprachige Bezeichner in Kleinschreibung zu verwenden
Es ist darauf zu achten dass benötigte Indexe vorhanden sind bzw angelegt werden
9. Veröffentlichung
Installationspakete müssen alle notwendigen Informationen enthalten um eine Modifikation installieren und auch wieder entfernen zu können.
Hierzu zählen unter anderem
Alle Dateien der Modifikation
Installations-/Deinstallationsanleitung
ggf. Anleitung zur Modifikation von Templates
Installationspakete sollten in einem gängigen Format (z.B. ZIP) bereitgestellt werden.
Aus dem Paket muss klar hervorgehen um welche Version es sich handelt, wer der Autor ist und wo das Paket bzw. Support erhältlich ist.
Powered by vBulletin™ Version 4.1.3 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.