Zum Inhalt springen

Datenbankzugriff von PHP-Skript

Erstellt am 6. April 2010 · 2 Antworten · letzte Antwort am 7. April 2010

Tags: JavaScript & AJAX, Datenbank, Frage

TinaE ·

Hallo,

ich habe ein paar Fragen zur Entwicklung von Extensions. So langsam habe ich das Gefühl, je mehr ich zu dem Thema lese, desto verwirrter werde ich...

Mein Problem ist folgendes: Ich habe mit dem Kickstarter ein Frontend Plugin erstellt, funktioniert soweit auch sehr gut. Nun möchte ich bei Klick auf einen Button per AJAX Daten hinzufügen. Das heißt, ich rufe eine PHP-Datei auf. Auch dieser Schritt funktioniert. Nur habe ich in der "neuen" PHP-Datei keinen Datenbank-Zugriff und weiß nicht, wie ich diesen am besten herstelle.
Ich habe zwei Varianten ausprobiert:

Folgenden Code in die PHP-Datei eingebunden:

define('PATH_tslib', $_SERVER['DOCUMENT_ROOT'].'/typo3/sysext/cms/tslib/');
define('PATH_t3lib', $_SERVER['DOCUMENT_ROOT'].'/t3lib/');
define('PATH_typo3conf', $_SERVER['DOCUMENT_ROOT'].'/typo3conf/');

require_once(PATH_t3lib.'class.t3lib_extmgm.php');
require_once(PATH_tslib.'class.tslib_pibase.php');
require_once(PATH_t3lib.'class.t3lib_db.php');
require_once(PATH_t3lib.'class.t3lib_div.php');
require_once(PATH_t3lib.'config_default.php');
require_once(PATH_typo3conf.'localconf.php');

$GLOBALS['TYPO3_DB'] = t3lib_div::makeInstance('t3lib_DB');
$GLOBALS['TYPO3_DB']->connectDB();

Anschließend habe ich probiert, die PHP-Datei in Form einer Klasse anzulegen und in der ext_localconf.php zu registrieren. Dies habe ich auf 2 Arten ausprobiert, die ich aber beide nicht zum Laufen bringen konnte (vermutlich, weil ich nicht so 100%ig verstehe, was ich da eigentlich tue):

$TYPO3_CONF_VARS['FE']['eID_include']['te_skills'] = 'EXT:te_skills/pi1/class.create_new_skill.php';
$TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/te_skills/pi1/class.create_new_skill.php'] = t3lib_extMgm::extPath($_EXTKEY) . 'pi1/class.create_new_skill.php';

Ich verstehe noch nicht genau, wie ich grundsätzlich bei der Extension-Entwicklung vorgehen sollte. Irgendwo habe ich gelesen, dass man alle Funktionen als Methoden in PHP-Klassen anlegen sollte. Leider stand dort nicht, wieso. Wenn ich eine Funktion nur einmal benötige, warum soll ich dann extra eine Methode dafür anlegen?
Wenn ich mehrere Funktionen über AJAX aufrufen möchte, dann würde ich eigentlich für jede Funktion eine einzelnen PHP-Datei anlegen. Sollte ich dann in jeder Datei eine Klasse definieren? Ich verstehe den Sinn dahinter nicht.

Ich hoffe, es kann mir jemand helfen und etwas Licht in die Sache bringen. Im Moment weiß ich nicht so recht, wie ich weitermachen soll. So langsam verstehe ich immer mehr, warum gesagt wird, dass eine Einarbeitung in Typo3 Monate dauert ;-)

Schönen Gruß,
Tina

Julian.​Hofmann ·

Hallo Tina.

Ajax sollte normalerweise den Vorteil haben, dass es schnell und leicht daherkommt. Es macht daher im Allgemeinen wenig Sinn,w enn ein Ajax-Skript den ganze Rahmen von TYPO3 durchläuft, nur um am Ende ein paar Daten zu Speichern bzw. zu lesen. Daher wurde mit Version 4.2 der eID-Mechanismus eingeführt, der eine leichtgewichtiger Handhabung von Ajax-Aufrufen in TYPO3 ermöglicht.

Eine gute Einführung ist z.B. http://www.typo3-tutorials.org/tutorials/extensions/eid-mechanismus.html
Ansonsten gibt es auch einige Kommentare im TYPO3-Kochbuch bzw. findet sich mit dem nun bekannten Stichwort "eID" noch einiges im Netz.

Viele Grüße
Julian