Zum Inhalt springen

Nur eine globale Funktion hinzufügen

Erstellt am 10. April 2008 · 15 Antworten · letzte Antwort am 14. April 2008

Tags: PHP, Frage

froemken ·

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?

just2b ·

Hallo,

froemken schrieb

Wie lege ich diese class-Dateien mit dem Kickstarter an?

gar nicht. der kickstarter macht ein grundgerüst, nicht alles

georg

just2b ·

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

froemken ·

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

just2b ·

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

Stoneage ·

> TYPO3 lädt natürlich nicht einfach alle files drauflos

Ich glaube schon, hab' nämlich was der gleichem im Loader gesehen!

just2b ·
Tetramatrix schrieb

> TYPO3 lädt natürlich nicht einfach alle files drauflos

Ich glaube schon, hab' nämlich was der gleichem im Loader gesehen!

erzähl mir merh

froemken ·
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.

just2b ·

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

froemken ·

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?!

froemken ·

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

froemken ·

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

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*