Anlegen und einfügen einer Tabelle mittels Migrations-Datei

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Antworten
Benutzeravatar
chris1278
Mitglied
Beiträge: 1684
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von chris1278 »

Hallo, folgende Thematik. Ich hatte meine eine meiner Extensions bei phpbb.com zur Validierung eingereicht. Natürlich wie zu erwarten noch einige Fehler zu beseitigen.

Unter anderem hat man mir nahegelegt die Einträge der Datenbank nicht alle in die config Tabelle zu schreiben, sondern dafür eine eigene Tabelle zu machen.

Also habe ich die Extension [3.2] Social Media Icons an verschiedenen Positionen etwas abgespeckt auf 3 einträge und habe dann versucht das in eine Tabelle zu schreiben.

Mein Testforum läuft local auf meinem Rechner unter php 7.2 und forenversion phpbb 3.2.8

Nun ja mittels Migrationsdatei und nach etwas längerem experimentieren habe ich es geschafft eine Tabelle zu erstellen die ähnlich aufgebaut wie _config ist.

Code: Alles auswählen

public function update_schema()
	{
		return array(
			'add_tables'		=> array(
			$this->table_prefix . 'social_icons'	=> array(
					'COLUMNS'		=> array(
						'social_name'				=> array('VCHAR:255', ''),
						'social_value'				=> array('VCHAR:255', ''),
						'is_dynamic'				=> array('BOOL',  0),	
					),
					'PRIMARY_KEY'	=> array('social_name'),
					'KEYS'			=> array(
						'is_dynamic'			=> array('INDEX', 'is_dynamic'),
					),

				),
				
			)
		);
	}

Mittels diesem Code wird eine Tabelle generiert mit dem Namen social_icons.

Das passt auch eigentlich.

Nun, wenn mein Gedanken Gang nicht falsch ist müsste nach Vorlage für die config Tabelle nur der Migration Befehl angepasst werden.

Also das Format, was ich normalerweise nutze, um Einträge zu machen, sieht folgendermaßen aus:

Code: Alles auswählen

array('config.add', array('social_icons_enable', 1)),
mit dieser Angabe wird auch der wert "social_icons_enable" mit 1 gefüllt in die Tabelle Config geschrieben.

Also habe ich mir gedacht, da ich eine neue Tabelle generiere die eigentlich dem Aifbau der config Tabelle nachempfunden ist müsste der Befehl eigentlich so aussehen um diesen Wert jetzt dot ein zu tragen:

Code: Alles auswählen

array('social_icons.add', array('social_icons_enable', 1)),
Allerdings wenn ich das so mache bekomme ich nur bei aktivierung folgende Fehlermeldung in einem Roten kasten angezeigt:

Während der Anpassung der Datenbank ist etwas falsch gelaufen und ein Fehler aufgetreten. Die Änderungen, die vor dem Fehler durchgeführt wurden, wurden so weit wie möglich rückgängig gemacht. Du solltest jedoch prüfen, ob dein Board fehlerfrei funktioniert.

Eine Migration ist ungültig. Ein undefiniertes Migrationstool wurde gefunden. („An undefined migration tool was encountered.“)

Zurück zur Liste der Erweiterungen

Die Tabelle wird dann nicht angelegt oder wieder gelöscht, und die Meldung erscheint.

Ich habe 3 Dateien für die Migration erstellt_

1. database.php <-Pastebin

-> Das ist der erste Schritt um die Tabelle selber zu erstellen.


2. acp_modul.php <-Pastebin

-> In der Datei werden die Module angelegt (in dem Fall nur das eine wegen Testzwecke)

3. initial.php <-Pastebin

-> Hier werden die Einträge in die Tabelle geschrieben.

Allerdings genau das funktioniert irgendwie nicht. Warum weiß ich leider nicht und komm auch nicht dahinter.

Eventuell hat hier jemand einen Typ für mich woran der Fehler liegt.

Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9283
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von gn#36 »

Der Config Befehl ist ein Spezialbefehl, der nur für die config Tabelle funktioniert. Siehe auch Tools.

In deinem Fall brauchst du somit eine Sonderbehandlung, indem du den Migration Installer anweist, eine Sonderfunktion von dir aufzurufen, die die nötigen SQL Befehle dann durchführt:
https://area51.phpbb.com/docs/dev/3.1.x ... tml#custom
https://area51.phpbb.com/docs/dev/3.2.x ... tml#custom
Auf der verlinkten Seite ist auch ein Beispiel.

Übrigens kannst du das Dateneinfügen und die Datenbankänderung in der selben Migration machen, wenn du willst, update_schema wird vor update_data ausgeführt.

EDIT: Hier kannst du das ganze in einer meiner Migrations sehen: https://github.com/gn36/phpbb-ext-hooku ... _1_0_0.php
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.

Benutzeravatar
chris1278
Mitglied
Beiträge: 1684
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von chris1278 »

Hi gn36 Danke erst mal für diese Zeilen. ICh wollte deine Extension mal Probehalber auf meiner Lokalen Testumgebung installieren aber da gibts bei mir ne fehler meldung.

Es fehlen Abhängigkeiten, die von dieser Erweiterung benötigt werden. Bitte verwende composer, um die fehlenden Abhängigkeiten zu installieren oder verwende ein vollständiges Installationspaket.

Installieren wollte ich es auf phpbb 3.2.8 und php 7.2

oder mus ich dazu die 3.1er schiene von phpbb haben.

Antworten

Zurück zu „Extension Bastelstube“