Hallo zusammen!
ich versuche gerade, ein bestehendes System in eine Typo3 Extension zu packen. Der schon bestehende PHP Code definiert in einer settings Datei Konstanten für die Datenbank Verbindung (host,username,password, db). Diese möchte ich nun mit den Datenbank Verbindungsparametern der Typo3 Installation überschreiben.
Gibt es eine Möglichkeit, diese Daten aus der Typo3 Installation rauszulesen?
Besten Dank!
aemka schrieb
typo3conf/localconf.php
Besten Dank, genau was ich gesucht habe!🙂
Jetzt muss ich doch noch mal nachfragen:
Aus einer eigenen Extension funktioniert das wunderbar, da habe ich Zugriff auf die Variablen aus der localconf.
Wenn ich jetzt aber ein externes PHP Script verwenden möchte, kann ich die /typo3conf/localconf.php nicht so einfach einbinden:
Fatal error: Class 't3lib_div' not found
Weiß jemand, wie ich innerhalb eines externen PHP Script die /typo3conf/localconf.php includen kann, bzw. Zugriff auf ihre Variablen bekomme?
Danke schön
In deiner localconf.php sollte eigtl. kein Aufruf der t3lib_div Klasse drin stehen, dennoch ist das wohl der Fall, dass die Klasse genutzt wird. Also sorg doch einfach dafür, dass die Klasse entweder geladen ist oder nicht benutzt wird, wenn sie nicht zur verfügung steht.
Ich möchte, dass die Extension nicht nur auf meiner Typo3 Installation funktioniert, sondern prinzipiell auf jeder.
Hab noch nicht so viel Erfahrung mit der Typo3 Programmierung wie du siehst.
aemka schrieb
Also sorg doch einfach dafür, dass die Klasse entweder geladen ist
Die typo3lib_div einfach includen bringt nichts. Muss ich sie auch instanzieren?
aemka schrieb
oder nicht benutzt wird, wenn sie nicht zur verfügung steht.
Das hört sich interessant an. Wie kann ich das bewerkstelligen?
Danke im Voraus!
sorry ich steh auf dem Schlauch ich weiß nicht, inwieweit mir diese Funktion da helfen könnte. Mit class_exists() könnte ich prüfen, ob die t3lib_div Klasse zur Verfügung steht, und wenn nicht, die localconf halt nicht einbinden, damit es zu keiner Fehlermeldung kommt. Aber das bringt mir ja nichts, da ich ja die Daten aus der localconf auslesen möchte :-/
Wie hast du das denn umgesetzt? In deinem 1. Post schreibst du
jhonnyR schrieb
ich versuche gerade, ein bestehendes System in eine Typo3 Extension zu packen.
In einer TYPO3-Extension steht dir t3lib_div automatisch zur Verfügung, da brauchst du nichts inkludieren oder instanziieren. Da bräuchtest du dir auch keine Gedanken um die DB-Verbindung zu machen
Das hört sich für mich so an, dass deine Skripte noch völlig eigenständig laufen und du die TYPO3-Extension nur darum baust um auf TYPO3-Funktionen und Variablen zuzugreifen, oder?
Aber wie aemka schon sagt, wundert es mich auch, dass in der localconf.php auf die t3lib_div zugegriffen wird.
Wenn es nicht mit include geht, les die localconf doch anders aus.
Ok, ich habe mich vll falsch ausgedrückt. Ich habe ein bestehendes System, und das soll in Typo3 integriert werden. Dazu soll dieses System eigenständig auf dem Server existieren, meine Extension greift nur auf dessen Schnittstellen zu.
Das hört sich für mich so an, dass deine Skripte noch völlig eigenständig laufen und du die TYPO3-Extension nur darum baust um auf TYPO3-Funktionen und Variablen zuzugreifen, oder?
völlig richtig, ja 🙂
Aber wie aemka schon sagt, wundert es mich auch, dass in der localconf.php auf die t3lib_div zugegriffen wird.
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = t3lib_div::getIndpEnv('TYPO3_SITE_URL').'index.php?id=16';
Das ist die Zeile. Meine Typo3 Installation besteht (abgesehen von meiner extension) nur aus dem Introduction package, cc_debug und sr_feuser_register sonst habe ich nichts installiert oder verändert.
Wenn es nicht mit include geht, les die localconf doch anders aus.
Die Holzfällermethode, die localconf über file() oder fopen() einzulesen, die betreffende Zeilen rauszusuchen und in die richtige Datei zurückschreiben funktioniert leider auch nicht richtig, ich vermute weil gleichzeitig auf die selbe Datei, aus der der Aufruf zum lesen der localconf kommt, wieder geschrieben werden soll. Denke dass ich da früher oder später auf eine Lösung kommen werde, aber diese Lösung wird sehr unschön und mit wird mit viel Aufwand verbunden sein, ich habe die Hoffnungs noch nicht aufgegeben, dass ich noch irgendwie komfortabler auf die Konstanten zugreifen kann 😉
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = t3lib_div::getIndpEnv('TYPO3_SITE_URL').'index.php?id=16';
Dann mach doch um die Zeile ein if mit class_exists() und du kannst sie extern ausserhalb von typo3 einbinden.
Dann würde es halt nur auf meiner Typo3 Installation funktionieren, ich will ja aber, dass es mit jeder Typo3 Installation kompatibel ist. Wenn jemand anderes zufällig halt auch so einen t3lib_div funktionsaufruf in seiner localconf stehen hätte, würde es bei ihm auch wieder nicht funktionieren.
Wenn du etwas für TYPO3 bauen willst, was auf jeder TYPO3 Installation funktioniert, würde ich eine standardkonforme (oldschool pibased oder mit extbase) TYPO3-Extension entwickeln und kein Konstrukt, wo man irgendwas um TYPO3 aussenrum entwickelt.
Da hast du sicher recht, nur möchte mein "Auftraggeber" das halt genau so 😉
Ist ne Studienarbeit..
Wenn es nur für diesen einen Auftraggeber ist, dann trag doch die Parameter direkt in die Konfiguration dieser externen Webanwendung ein.
igorshmigor schrieb
Wenn es nur für diesen einen Auftraggeber ist, dann trag doch die Parameter direkt in die Konfiguration dieser externen Webanwendung ein.
Es soll auf jeder Typo3 Installation funktionieren, nicht nur auf meiner 😉
Dann musst Du Dich an das halten, was aemka geschrieben hat.
Beispielsweise reicht es nicht, wenn Deine Anwendung die Datenbankparameter kennt, sie muss auch die TYPO3-eigene Datenbankabstraktionsschicht nutzen und die TYPO3 Datenbank-API nutzen.
Guter Artikel hierzu:
http://buzz.typo3.org/teams/core/article/typo3-45-lts-prepared-queries-are-the-way-to-go/
Wenn dein Auftraggeber etwas möchte, was inhaltlich blödsinn und auch nicht zu realisieren ist, solltest du ihm das vlt. sagen.