Wie man Schema-Files für einen eigenen Mod herstellt

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Wie man Schema-Files für einen eigenen Mod herstellt

Beitrag von Boecki91 »

Schema-Files Was ist denn das?

Wenn man sich verschiedene Mods anschaut, stellt man fest das viele einen Installation-Ordner haben mit einem Unterverzeichnis "schemas", in diesem Ordner liegen verschiedene sql-Dateien, für unterschiedliche DB-Systeme.

Dies ist auch bei phpBB3 selbst der Fall.

Schreibt jeder MOD-Autor diese ganzen Schema Dateien?

Da ich mir nicht vorstellen konnte das jeder MOD-Autor selbst für alle unterstützen Systeme etwas geschrieben hat, habe ich an verschiedenen Stellen gesucht, und bin schließlich bei Dr.Death F1- Webtipp fündig geworden, "creat_schema_files.php" heist die Datei, die ich dann auch unter
http://code.phpbb.com/svn/phpbb/branche ... _files.php fand.

Wie benutzt man die Datei?

Als erstes passt man den schema-Pfad an:

Code: Alles auswählen

$schema_path = './../install/schemas/';
Dann kommt eine Weile lang Code der uns nicht weiter interressiert, bis irgendwann etwas wichtiges kommt:

Code: Alles auswählen

/**
* Define the basic structure
* The format:
*		array('{TABLE_NAME}' => {TABLE_DATA})
*		{TABLE_DATA}:
*			COLUMNS = array({column_name} = array({column_type}, {default}, {auto_increment}))
*			PRIMARY_KEY = {column_name(s)}
*			KEYS = array({key_name} = array({key_type}, {column_name(s)})),
*
*	Column Types:
*	INT:x		=> SIGNED int(x)
*	BINT		=> BIGINT
*	UINT		=> mediumint(8) UNSIGNED
*	UINT:x		=> int(x) UNSIGNED
*	TINT:x		=> tinyint(x)
*	USINT		=> smallint(4) UNSIGNED (for _order columns)
*	BOOL		=> tinyint(1) UNSIGNED
*	VCHAR		=> varchar(255)
*	CHAR:x		=> char(x)
*	XSTEXT_UNI	=> text for storing 100 characters (topic_title for example)
*	STEXT_UNI	=> text for storing 255 characters (normal input field with a max of 255 single-byte chars) - same as VCHAR_UNI
*	TEXT_UNI	=> text for storing 3000 characters (short text, descriptions, comments, etc.)
*	MTEXT_UNI	=> mediumtext (post text, large text)
*	VCHAR:x		=> varchar(x)
*	TIMESTAMP	=> int(11) UNSIGNED
*	DECIMAL		=> decimal number (5,2)
*	DECIMAL:	=> decimal number (x,2)
*	PDECIMAL	=> precision decimal number (6,3)
*	PDECIMAL:	=> precision decimal number (x,3)
*	VCHAR_UNI	=> varchar(255) BINARY
*	VCHAR_CI	=> varchar_ci for postgresql, others VCHAR
*/
function get_schema_struct()
{
	$schema_data = array();
Dadrüber findet ihr eine paar Erklärungen damit ihr später wisst was was ist.

Da drunter findet eine Liste von Arrays, das wird die spätere Tabellenstruktur, nicht benötige Teile einfach löschen (also alles was von dem Code da oben bis nach folgendemem Code geht)

Code: Alles auswählen

	return $schema_data;
Wie ist das Ganze aufgebaut?
$schema_data['tabellenname_mit_phpbb__am_anfang'] = array(
'COLUMNS' => array(
'spalte_1' => array('UINT', NULL, 'auto_increment'),
'spalte_2' => array('UINT', 0),
'spalte_3' => array('BOOL', 0),

),
'PRIMARY_KEY' => 'spalte_1',
'KEYS' => array(
'spalte_2' => array('INDEX', 'spalte_2'),
'key_name' => array('KEY_ART', 'spalte_des_key'),
),
);
Von diesen Arrays könnt Ihr so viele wie nötig machen.
Was z.B. UINT heist steht am Anfang der Funktion

Und nun?
Nachdem ihr alles gemacht habt, prüft nochmal ob der Pfad richtig ist, die Eintragungen alle passen etc.

Bevor das Script erfolgreich ausgeführt werden kann müsst Ihr sicherstellen das der schema Pfad beschreibbar ist und der "Noobschutz" :wink: entfernt wurde.

Im Erfolgsfall erscheint "done", sonst eine Fehlermeldung.

Was ist der "Noobschutz"?
Damit nicht jeder (der keine Ahnung hat) das Script ausführt, ist eine kleine Sperre drin, die entfernt werden muss, somit ist gewährleistet das der das Script nutzen will zumindest etwas PHP kann :wink:


Ich hoffe das das soweit richtig ist und euch eventuell sogar hilft.

Den Rest des Installationsprozesses werde ich mir auch noch anschauen.
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Beitrag von nickvergessen »

Wo ich das gerade lese, vllt kann ich meinen Gallery-Installer mal ausbauen, damit man ihn generell benutzen kann, falls Interesse besteht.
kein Support per PN
Benutzeravatar
Würzi
Ehemaliges Teammitglied
Beiträge: 3187
Registriert: 30.10.2005 02:51
Wohnort: Niedernberg
Kontaktdaten:

Beitrag von Würzi »

Hallo zusammen :)

*Puh* *Schwitz*

Ich hab mir grad nen Installer angeschaut. :-?

Also ich hab als Vorlage mal den Installer von Dr. Death genommen vom F1 Webtipp. Nun erkläre ich mal was ich bis jetzt rausgefunden habe und ich würd mich freuen, wenn mir jemand mitteilt, ob ich ungefähr richtig liege.

In den Column Types sind verschiede Typen definiert.
Beispiel: VCHAR => varchar(255)

Gehe ich dann recht in der Annahme, daß ich dann in den jeweiligen Datenbanktypen vergleichen muss, wie da der Befehl lautet?

In den jeweiligen Arrays der Datenbanktypen find ich dann z.B. 'VCHAR' => 'varbinary(255)',

Und die Schemas im Ordner müssen dann einzeln dementsprechend angelegt bzw. angepasst werden?

Oder habe ich da nun einen total falschen Gedankengang? :oops:

Habs zumindest schon mal hinbekommen, daß bei meinem Installer die Tabelle richtig angelegt wird egal was für ein Präfix die Datenbank hat.

Aber ich kann ja nur eines testen, weil ich hab ja nicht verschiedene Datenbanksysteme. Woher soll ich wissen, ob das dann alles richtig ist? Noch nie was von Firebird oder oracle gehört. :-?

Wäre für jeden Tip dankbar. :)
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

So wie ich das sehe geht alles "automatisch" richtig, in der Datei findest du auch die Umwandlungen vom "universal Format" nach mysql oracel etc. ob das wirklich funktioniert kann man nur durch testen herrausfinden, vielleicht findet sich ja ein freiwilliger Firebird etc. zum Testen :wink: aber die Datei wird anscheinend auch von den phpBB Entwicklern benutzt, daher gehe ich mal davon aus das alles richtig ist

@nickvergessen

Einen Installer, der einfach einzustellen ist, wäre optimal ich dachte daran das man eventuell die phpBB3-Installation soweit umbauen kann das man nur noch ein paar Dinge ändern muss (Schema-Files, sonstige SQL Befehle, Sprachdateien bezüglich Support und Benutzung)
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
Würzi
Ehemaliges Teammitglied
Beiträge: 3187
Registriert: 30.10.2005 02:51
Wohnort: Niedernberg
Kontaktdaten:

Beitrag von Würzi »

Hallo Boecki,

wie meinst das, dass das alles automatisch geht? :o

Die einzelnen sql Dateien im Ordner Schemas müssen doch auch beschrieben werden z.B. die _mysql_41_schema

Da muss doch rein, daß die Tabelle erstellt wird. Automatisch wird die nicht beschrieben.

Also ich hab z.B nun in der create_schema_files.php

Code: Alles auswählen

	// Create schon gewusst table
	$schema_data['phpbb_schon_gewusst'] = array(
		'COLUMNS'		=> array(
			'word_id'			=> array('UINT', NOT NULL, 'auto_increment'),
			'word'			=> array('MTEXT_UNI', NOT NULL),
			'bbcode_bitfield'			=> array('VCHAR', NOT NULL default, ''),
			'bbcode_uid'			=> array('VCHAR', NOT NULL),
      'bbcode_options'			=> array('UINT', NOT NULL),
		),
		'PRIMARY_KEY'	=> 'word_id',
	);
Steht ja dann auch kurz darüber dass dies die Struktur ist. Vermute mal in der Art ne Grundstruktur z.b. UINT => mediumint(8 ) UNSIGNED
Dies wird dann hergenommen und aus den Arrays (z.B. mysql_41' => array) wird wiederrum aus dem schema Ordner die richtige Datei hergeholt.

Ach ist das komplziert zu erklären. :lol:

Also ich denke: Grundstruktur = create_schema_files.php
Dann wird logischerweise abgefragt, was für ein Datenbanktyp und die richtige Formatierung bzw. SQL Anweisung holt er sich dann aus dem Ordner mit den sql Dateien.

Hoffe ich lieg richtig mit meinem Gedankengang. :lol:

Die frage welche sich mir aber immernoch stellt, wie kann ich das testen ob z.B. das sql schema file von firebird richtig ist. :-?

Ich hab es ja soweit, daß der Installer bei mir funzt, aber ich denke daß es nicht Sinn der Sache ist, daß er nur bei mysql_41 geht. :-? :lol:
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“