knollsen wrote:Hm, das hat aber eigentlich nichts mit der Ladereihenfolge der Plugins zu tun, denn ....
Muss aber, denn andersrum funktioniert die Übergabe.
Das erste Plugin ist im template ganz oben nach <body> <?php echo myFunction("1",false") ;?> ..... nach 5 divs wird dann die Seite mit Content() geladen und auf einer Unter-Seite das 2 Plugin mit {{{my2-Function("2",false");}}}
Jetzt frag ich mich halt, warum myFunction die Variable nicht an my2-Function übergeben kann, aber my2-Function die Variable an myFunction.???
Pluginaufrufe im Content werden nicht erst mit dem Aufruf der content() Funktion ausgewertet[1], sondern
bereits bevor das
Template geladen wird, aber nachdem die Plugins geladen wurden. Daher kann my2-Function() eine globale Variable setzen, die in myFunction() verfügbar ist, aber eben nicht umgekehrt.
knollsen wrote:...globalen Variable statt per Funktionsaufruf im Template auch einfach vom User manuell ...
Klaro geht das, aber wenn sowas automatisch funktioniert kann, warum nicht.
Na ja, was heißt automatisch? So wie es jetzt ist, muss ja irgendjemand den Funktionsaufruf mit dem Parameter im Template einfügen. Dann könnte man auch zusätzlich (oder alternativ?) zu diesem Funktionsaufruf den entsprechenden Parameter in die Pluginkonfiguration schreiben. Damit der selbe Wert nicht zweimal notiert werden muss (
DRY) kann er in der Funktion ebenfalls aus der Konfiguration gelesen werden.
Grundsätzlich sollte man aber hinterfragen, ob der Informationsaustausch mittels globaler Variable (eine Pluginkonfigurationsoption ist letztlich auch eine solche) sinnvoll ist. Ich selbst finde das immer suboptimal. In diesem Fall wäre es auch denkbar, dass nicht Plugin1 die Variable setzt und Plugin2 sie liest, sondern dass Plugin2 eine Funktion von Plugin1 aufruft, die den Wert zurückliefert. Das hilft dir hier nicht direkt (da es an der Ausführungsreihenfolge nichts wirklich ändert), aber es wäre zusätzlich eine Option.
Jedenfalls kommt mir diese Pluginabhängigkeit seltsam vor (was nicht heißt, dass sie nicht sinnvoll sein kann).
- Können die beiden Plugins denn überhaupt unabhängig voneinander genutzt werden (also nur Plugin1 bzw. nur Plugin2)? Falls nein, dann macht man vielleicht besser ein Plugin daraus.
- Enthalten sie gleiche oder sehr ähnliche Funktionalität? Falls ja, dann könnte es sinnvoll sein die gemeinsame Funktionalität irgendwie auszugliedern.
[1] Ehrlich gesagt, weiß ich nicht wirklich, warum das so ist. Scheint irgendwie fraglich. Auf jeden Fall ist es schon immer so, und das könnte daran liegen, dass die Evaluierung von CMSimple-Skripting früher nicht in einer Funktion erfolgt ist, sondern im globalen Gültigkeitsbereich, der eben aus content() heraus nicht aufgerufen werden kann. Das wäre seit XH 1.5 möglich, aber dann stünden, wie ich gerade feststelle, z.B. die
$description und die $keywords im Template nicht zur Verfügung. Ohne Bruch mit der Abwärtskompatibilität kann das also nicht geändert werden.