[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Best Practice: Funktion in mehreren Modulen
Seite 1 von 1

Best Practice: Funktion in mehreren Modulen

Verfasst: 13. Nov 2016, 13:31
von joachim123
hi all,

bräuchte mal einen Tipp zur Wiederverwendung von kleinen Helper Funktionen in Modulen. Derzeit mache ich das innerhalb eines Modules so:

Code: Alles auswählen

        if (!function_exists('returnTextile')) {
            function returnTextile($inputValue) {
                # ...
                # ...
                return $inputValueModified;
            };
        }
Das habe ich dann in mehrerenModulen :( Wenn ich das stattdessen einmal in ein Template integriere habe ich es zwar überall im Frontend, im Backend gibts dann aber natürlich Fehler. Gibts einen schlauen Weg das so zu includen, dass es in Backend und Frontend zur Verfügung steht? Ich habe zwar mit Themes herumgespielt, aber mir gefällt die Idee nicht so, Basis-Helper dahin auszulagern...

Grüsse, Jo

Re: Best Practice: Funktion in mehreren Modulen

Verfasst: 13. Nov 2016, 16:17
von runstop64
Hi,

ausser dem Theme-Addon gibt es noch die Möglichkeit, das Project-Addon oder ein eigenes Addon zu nutzen. Das Prinzip ist jedoch bei allen Varianten ähnlich. Wenn Deine Funktionen überall zur Verfügung haben möchtest, ist die eine oder andere Form der Auslagerung nötig.

Mit Kombination von Theme- und Developer-Addon kannst Du übrigens den Modul-Code zusammen mit Deinen übrigen Dateien auch über den Theme-Ordner verwalten und hast damit alle Daten Deiner Website an einem Ort.

Re: Best Practice: Funktion in mehreren Modulen

Verfasst: 13. Nov 2016, 16:36
von runstop64
Du kannst allerdings auch versuchen, das Template mit REX_TEMPLATE[...] jeweils direkt in Deinen Module aufzurufen.

Re: Best Practice: Funktion in mehreren Modulen

Verfasst: 13. Nov 2016, 16:50
von joachim123
runstop64 hat geschrieben:Du kannst allerdings auch versuchen, das Template mit REX_TEMPLATE[...] jeweils direkt in Deinen Module aufzurufen.
Das ist ja lustig, wusste nicht, dass man auch Templates in Module einbinden kann. Wäre für kleine Helper ja durchaus eine Möglichkeit...

Merci, Joachim

Re: Best Practice: Funktion in mehreren Modulen

Verfasst: 16. Nov 2016, 09:30
von Phoebus Ryan
Die bessere Möglichkeit, wäre im Addon 'project' eine Klasse anzulegen und alle Funktionen als statische Methoden anzulegen. Die Klasse wird dann via autoload geladen und ist überall verfügbar. Die Lösung wäre halt nicht so hacky...

Re: Best Practice: Funktion in mehreren Modulen

Verfasst: 16. Nov 2016, 22:22
von joachim123
Phoebus Ryan hat geschrieben:Die bessere Möglichkeit, wäre im Addon 'project' eine Klasse anzulegen und alle Funktionen als statische Methoden anzulegen. Die Klasse wird dann via autoload geladen und ist überall verfügbar. Die Lösung wäre halt nicht so hacky...
klingt sauber, aber "project" find ich net für Redaxo5. Ich habe es mit "Theme" probiert, aber verstehe nicht ganz, wie ich das mit dem Autoload läuft. Füge ich in theme/privat/lib/functions.php eine Klasse "wasAuchImmer" hinzu bekomme ich immer solche Fehler: Fatal error: Cannot redeclare class "wasAuchImmer"

[UPDATE]
wenn ich das richtig verstanden habe, kann man im Ordner theme/privat/lib/ z.B MyHelper.php mit der Klasse MyHelper ablegen und dann problemlos überall mit MyHelper::myStaticMethod() nutzen.

Grüsse, Jo

Re: Best Practice: Funktion in mehreren Modulen

Verfasst: 17. Nov 2016, 09:15
von Phoebus Ryan
Das Addon 'project' ist standardmässig dabei in Redaxo 5.2. Wenn du eine kleinere Version hast und nicht updaten möchtest, kannst du das auch einfach aus der neusten Version nehmen. Es ist kompatibel und das Addon ist extra für genau deinen Zweck gemacht. :-)

Damit könntest du wie du richtig geschrieben hast einfach im Addon project, also unter /redaxo/addons/project im Ordner 'lib' oder 'vendor' Klassen anlegen, die automatisch geladen werden.

Re: Best Practice: Funktion in mehreren Modulen

Verfasst: 17. Nov 2016, 10:33
von joachim123
Phoebus Ryan hat geschrieben: Damit könntest du wie du richtig geschrieben hast einfach im Addon project, also unter /redaxo/addons/project im Ordner 'lib' oder 'vendor' Klassen anlegen, die automatisch geladen werden.
Ahh, cool, klappt problemlos. Kann man per project auch customized Backend-Css-Dateien integrieren? Würde man den Pfad dann in der Boot.php notieren?

Danke erstmal für die Hilfe :)

Grüsse, Jo

Re: Best Practice: Funktion in mehreren Modulen

Verfasst: 18. Nov 2016, 09:31
von Phoebus Ryan
Ja klar. Einfach in der boot.php des 'project'-Addons folgendes einfügen:

rex_view::addCssFile($this->getAssetsUrl('xxx.css'));

oder natürlich

rex_view::addJsFile($this->getAssetsUrl(''xxx.js''));

Die Files müssten jeweils im Ordner /redaxo/src/addons/project/assets liegen.

Re: Best Practice: Funktion in mehreren Modulen

Verfasst: 29. Nov 2016, 00:51
von joachim123
Servus nochmal,

so wirds gemacht, klappt prima, danke Euch für die raschen Antworten :)

Grüsse und schöne Zeit, Joachim