Ich will eine eigene Extension programmieren. Der Kickstarter bietet mir aber immer nur Backend-Modul und FE-Plugin an.
Ich will einfach nur gewisse Daten im List-Modul bei der Eingabe überprüfen. Heißt ich will in meine Extension einfach nur eine "globale Funktion" hinzufügen.
So wie diese MD5-Extension für die Newloginbox. Kein Backend, kein Frontend...Sie ist einfach irgendwo im System und funktioniert.
Ich hab mir mal eine solche Extension angeschaut und dort gibt es keine Verzeichnisse wie /pi1 oder /mod und /sv. Den einzigen unterschied, den ich gefunden habe, sind zusätzliche class-Dateien.
Wie lege ich diese class-Dateien mit dem Kickstarter an?
Hallo,
froemken schrieb
Wie lege ich diese class-Dateien mit dem Kickstarter an?
gar nicht. der kickstarter macht ein grundgerüst, nicht alles
georg
Ich möchte sowas ähnliches machen, wie diese Extension hier:
http://typo3.org/extensions/repository/view/cag_ajaxeval/0.1.0/info/class.ux_t3lib_tceforms.php/
Wie man sieht befindet sich diese Datei einfach im Root-Verzeichnis der Extension, aber wo wird die aufgerufen? Wird die überhaupt aufgerufen? Oder läd Typo3 automatisch alle class*-Dateien einer Extension einfach ein und verarbeitet sie?
TYPO3 lädt natürlich nicht einfach alle files drauflos!
ein klick weiter hätte schon das richtige ergebnis gebracht, schau dir die ext_localconf.php an
georg
Hab grad bei google das hier gefunden:
https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/Index.html
Mal schaun, wie weit ich damit komme.
Danke Dir.
So...meinen Meilenstein für heute habe ich erreicht. Hinter allen Feldern, die per Definition "unique" sind, steht nun "Trallala".
Die ganze Technik nennt sich XCLASS und falls eine weitere Extension auch mit dieser Instanz der Typo3-Klassen arbeitet, mit der auch ich arbeite, dann wirken sich die Änderungen nur bei der Extension aus, die zu letzt installiert wurde.
Ein paar Informationen bzgl. XCLASS sind auch in dem Buch "Das Typo3 Profihandbuch" zu finden.
Wenn ich das jetzt richtig verstanden habe, dann gibt es drei verschiedene Möglichkeiten Funktionen einzubinden:
XCLASS
Hocks
Services
Was davon ist den der "richtige" Weg?
froemken
Hallo,
das hast du schön zusammengefasst *gg*
richtigen weg gibts keinen.
- services braucht man um services zu erweitern wie den login im BE, FE usw
- hooks um die rückgabe einzelner funktionen zu manipulieren, zB in tt_news neue felder in der list/single view
- xclass ist immer der letzte weg wenns ersten beiden nicht gibt um eine komplette funktion zu überschreiben. nachteil hast du ja schon erwähnt. vorteil: man hat komplette freiheit
georg
> TYPO3 lädt natürlich nicht einfach alle files drauflos
Ich glaube schon, hab' nämlich was der gleichem im Loader gesehen!
just2b schrieb
- services braucht man um services zu erweitern wie den login im BE, FE usw
- hooks um die rückgabe einzelner funktionen zu manipulieren, zB in tt_news neue felder in der list/single view
- xclass ist immer der letzte weg wenns ersten beiden nicht gibt um eine komplette funktion zu überschreiben. nachteil hast du ja schon erwähnt. vorteil: man hat komplette freiheit
Ich will mich an die Reihenfolge halten, also muss ich die ersten Beiden erstmal verstehen und kennen lernen, bevor ich's mir mit XCLASS zu einfach mache. Na Gott-Sei-Dank gibt's darüber ein Kapitel in dem Typo3-Buch.
Für meine Test-Extension (Trallala hinter Textfeldern) werd ich wohl mehr Erfolg mit einem Hook haben, wah? Will ja keine neue Funktion, sondern eine Ausgabe manipulieren.
nein ganz und gar nicht.
services gibt es für die wenigsten sachen, hooks schon für mehr.. also das ist nur die reihenfolge wenns alle 3 für das gleiche gäbe.
also xclass ist fürn anfang schon sehr ok 😉
georg
Na dann mach ich mal weiter mit XCLASS. Ich möchte, dass onSubmit etwas geschieht...dazu habe ich in der class.t3lib_tceforms.php die Variable $additionalJS_submit = array(); gefunden:
// $this->additionalJS_post:
$additionalJS_submit = array("alert('Tach auch');", "alert('nAbend');", "return false;");
if ($additionalJS_submit) {
$additionalJS_submit = implode('', $additionalJS_submit);
$additionalJS_submit = str_replace("\r", '', $additionalJS_submit);
$additionalJS_submit = str_replace("\n", '', $additionalJS_submit);
$out .= '
TBE_EDITOR.addActionChecks("submit", "'.addslashes($additionalJS_submit).'");
';
}
Solange ich das "return false" raus lasse, werden die beiden Alerts auch ausgeführt, aber da ich den Submit ja Abbrechen will, muss dieses "return false" da rein. Tue ich das, funktioniert kein Befehl mehr aus dieser Zeile.
Ne Idee?!
sorry in den tceforms bin ich dann nicht so tief drinnen
georg
Au weia...ich geh kaputt...seit heute Morgen bin ich an diesem xajax dran und versuche das in meine Extension einzubinden.
Das Problem mit dem "return false" hat sich auch komplett erledigt, da alle Buttons im Typo3 Backend per type="image" und nicht per type="submit" eingebunden werden. Ich musste eine halbe Ewigkeit suchen bis ich herausgefunden habe, dass sämtliche Submit-Geschichten über JavaScript gesteuert werden. Ich müsste also diese JavaScript-Klasse verändern, damit ich in dieses onSubmit wirksam eingreifen könnte.
Meine nächste Idee war also per xajax herauszufinden, ob ein DS schon in der DB vorhanden ist, wenn ja, dann soll er wie bei vielen anderen Formularen, den SAVE-Button verschwinden lassen. Im Falle von Typo3-BE also die 3 Buttons oben und unten.
Meine ersten Tests mit einer einfachen JavaScript-Funktion waren erfolgreich und auch mein erster Mini-Test mit xajax war erfolgreich, aber xajax will in seinem "assign" immer eine ID eines Elements haben. Die save-Buttons haben aber einen Namen und müssten mit getElementsByName()[] angesprochen werden.
Werd mal am WE weiter programmieren und Euch auf dem Laufenden halten.
Stefan
OK...Ich hab's gefunden:
http://api.xajaxproject.org/files/xajax_core/xajaxResponse-inc-php.html#xajaxResponse.script
function dataunique() {
$objResponse = new tx_xajax_response();
$objResponse->script("document.getElementsByName('_savedok')[0].style.visibility = 'hidden';");
return $objResponse;
}
Es gibt tatsächlich keine Möglichkeit per xajax-Klasse auf Elemente mit Namen zuzugreifen. Tststs
Die Script-Variante ist die einzige Möglichkeiten diesen Kram zu umgehen.
Jetzt kann ich beruhigt ins WE gehen, hatte schon Angst 6 Stunden xajax in den Sand geworfen zu haben.
froemken
Wow...ich hab's geschafft...meine erste Extension steht zum Download bereit:
http://www.sfroemken.de/downloads/action/show-category/category/typo3/download//80924e99dc/
Wenn ich das mit dem Upload ins TER richtig verstanden habe, wird diese EXT Morgen auch dort in der Version 0.0.1 zur Verfügung stehen.
Ähm...Frage nebenbei, wie frage ich denn ab, ob eine Extension schon installiert ist oder nicht? Ich hab zwar im Kickstarter angegeben, dass xajax benötigt wird, aber meckern tut er bei der Installation nicht! *SchulterZuck*