Zum Inhalt springen

PHP-Skript einmalig nach Installation einer Extension ausführen

Erstellt am 13. Juni 2007 · 8 Antworten · letzte Antwort am 24. November 2011

Tags: Frage

webzigartig ·

Weiß jemand, ob folgendes möglich ist:

Nachdem (m)eine Extension per ExtensionManager installiert wurde, soll ein kleines PHP-Skript ausgeführt werden (aber wirklich nur ein einziges mal).

Hintergrund: ich muss an einer der von der Extension eingerichteten DB-Tabellen eine Änderungen "per Hand" vornehmen, nämlich einen Volltextindex setzen. Das ist über ext_tables.php leider nicht möglich. Den Grund für diese Restriktion habe ich verstanden (Kompatibilität mit anderen Datenbanken als MySQL, die nicht über diese Möglichkeit verfügen). Da wir aber in unserer Installation wirklich nur MySQL einsetzen werden, möchte ich die Restriktion auf diese Weise umgehen.

Mein "Traum" also: Änderung sollte durch ein PHP-Skript vorgenommen werden, dass nach Installation der Extension automatisch ausgeführt wird. Das Skript habe ich schon, aber wie sage ich Typo3: Ausführen sobald Extension installiert wurde?

steffenk ·

dafür gibt es den update-Automatismus.
Lege im root der Extension das file class.ext_update.php an, dann hast DU im EM den Punkt update und das script wird dann ausgeführt.

NickD ·

mach doch einfach so:

1) extension anlegen
2) änderung an table vornehmen (slo wie du magst)
3) in phpmyadmin gehen -> exportieren -> tablestruktur kopieren
4) koperte tablestruktur in ext_tables.sql kopieren

wenn du nun die extension exportierst und diese wird dann auf einem anderen system installiert, wird diese sql datei ausgeführt und die einstellungen für dein table sind so wie von dir gewollt 😉

webzigartig ·

Mannomann - kaum abgeschickt, schon zwei Antworten! #giggle#

@NickD: Das geht leider nicht. Beim Export würde dann in der relevanten DB-Tabelle stehen: FULLTEXT KEY fulltext (title,description). Wenn ich das dann in die ext_tables.sql kopiere und die Extension z.B. in einer anderen T3-Installation importiere, wird diese Zeile bei der Abarbeitung einfach ignoriert (so zumindest die Ergebnisse meiner Versuche heute)... 🙁

@steffenk: Deine Lösung funktioniert, vielen Dank! 😃 Jetzt will es allerdings richtig machen und genau verstehen, wie das mit der class.ext_update.php genau funktioniert. Z.B. habe ich in einer anderen Extension abgeschaut, das eine Funktion namens access vorhanden sein muss. Die wird wohl immer ausgeführt, wenn man sich die Extension im EM anschaut. Die main-Funktion dagegen wird wohl nur einmal ausgeführt. Aber woher weiß der EM, dass sie schon einmal ausgeführt wurde?
Habe gerade nach eine entsprechenden Doku gesucht aber leider noch nichts gefunden. Vielleicht hast Du ja einen Tipp für mich? 😉

steffenk ·

der EM weiss da gar nix 😉

Die Klasse wird immer aufgerufen, wenn man im EM auf update geht. Daher muss man die Logik schon selber einbauen und erkennen, ob das Update schon durchgeführt wurde. Das kann anhand von DB entschieden werden, oder man erzeugt ein File im Extdir o.ä.

achso: aufgerufen wird immer die Function main.

webzigartig ·

Ehrlich gesagt verstehe ich diese "Update-Automatik" immer noch nicht vollständig. Zumal ich im EM überhaupt keinen Punkt "Update" entdecken kann... Trotzdem ist mein Problem mittlerweile dank Eurer Hilfe gelöst. Vielen Dank!

Zusammenfassend meine Erkenntnisse bisher:
1.) Die Klasse ext_udpdate aus der Datei class.ext_update.php wird "angefaßt", wenn man die Extension im EM öffnet/editiert.
2.) Und zwar wird jedesmal wenn man die Extension anklickt und auch wenn man darin zu einer anderen Seite "blättert" die Funktion access() der Klasse ausgeführt. Darin habe ich jetzt meinen Code untergebracht - der wird aber nur dann ausgeführt, wenn er zuvor nicht schon einmal ausgeführt wurde (habe einen entsprechenden Mechanismus eingebaut).
3.) Die Funktion main() wird (lt. steffenk 😉) dann ausgeführt, wenn jemand den bei mir nicht sichtbaren Punkt "Update" anklickt. Konnte ich bislang leider nicht nachvollziehen.

Ich lasse den Thread noch ein paar Tage offen, vielleicht hat ja noch jemand einen Beitrag dazu?

Flink ·
Babyschlumpf schrieb

3.) Die Funktion main() wird (lt. steffenk 😉) dann ausgeführt, wenn jemand den bei mir nicht sichtbaren Punkt "Update" anklickt. Konnte ich bislang leider nicht nachvollziehen.

Rechts oben im Extension Manager gibt es eine Select Box. Darin erscheint der Unterpunkt 'UPDATE!', wenn eine Datei class.ext_update.php vorhanden ist.

webzigartig ·

Danke für die Info!
Zwischenzeitlich weiß ich auch, warum der Menüpunkt bei mir nicht vorhanden war - der wird nur dann angezeigt, wenn die Funktion access() TRUE zurückliefert. Und das war bei mir anfangs nicht der Fall.

Unbekannter Benutzer ·

Ich entschuldige mich jetzt schon mal dafür, diesen Thread nochmal hervorgeholt zu haben, aber meine Frage baut im Prinzip genau darauf auf:

steffenk schrieb

dafür gibt es den update-Automatismus.
Lege im root der Extension das file class.ext_update.php an, dann hast DU im EM den Punkt update und das script wird dann ausgeführt.

Gibt es eine Möglichkeit, genau das zu automatisieren?
Also dass der Benutzer wenn er die Extension installiert nicht extra danach noch auf 'Update!' klicken muss, sondern dies bei der Installation automatisch gleich mit aufgerufen wird?
Besten Dank!