Seite 1 von 1

wie funktioniert das include von module

Verfasst: Do 13. Apr 2006, 09:13
von donny
Hallo,
kann mir jemand sagen, wie eigentlich das include von module in das layout funktioniert ?
Ich stelle mir vor, dass das Layout einfach ge-echo-ed wird und dann an der Stelle wo z.B. CMS_CONTAINER[x] steht einfach durch das Inhalt vom Module ersetzt wird. Aber wenn das Module selbst PHP Code enthält dann kann das ja nicht ge-echo-ed. Wie funktioniert das eigentlich im Hintergrund, so dass PHP Code, das von einer Datenbank eingelesen wird ausgeführt werden kann ?
Danke.

Verfasst: Do 13. Apr 2006, 09:24
von emergence
das ausführen erfolgt mittels -> eval
siehe http://at.php.net/manual/en/function.eval.php

grundsätzlicher ablauf:

1. innerhalb der konfigurierten module wird zu allererst CMS_VALUE durch den konfigurationswert ersetzt...
2. anschließend werden die module in dem entsprechenden layout eingebettet
3. anschließend werden die cms_type platzhalter ersetzt
4. code wird in der con_code hinterlegt
5. gesamter code wird in der front_content bei aufruf evaluiert

Verfasst: Do 13. Apr 2006, 09:32
von donny
1. innerhalb der konfigurierten module wird zu allererst CMS_VALUE durch den konfigurationswert ersetzt...
2. anschließend werden die module in dem entsprechenden layout eingebettet
3. anschließend werden die cms_type platzhalter ersetzt
4. code wird in der con_code hinterlegt
5. gesamter code wird in der front_content bei aufruf evaluiert
Da ich jetzt nicht weiss was con_code ist :oops:.Was wird in Schritt 2 genau gemacht ? Wird da das PHP Code von dem Module in das Layout hingeschrieben ? kann ich es mir wie folgt vorstellen ?

Code: Alles auswählen

$layout = ".... CMS_CONTAINER[2] ...";
$mod = "<?php echo "X"; ?>;
$seite = str_replace("CMS_CONTAINER[2]",$mod,$layout);
Aber wenn es so ist, und dann nacher sage ich :

Code: Alles auswählen

eval($seite);
geht doch eigentlich nicht oder ?

Verfasst: Do 13. Apr 2006, 09:43
von kummer
zuerst werden die CMS_VAR, respektive CMS_VALUE in den modulen durch die konfigurierten werte ersetzt. dann werden gemäss deinen angaben im template die module in das layout eingepflegt. das ganze ergibt dann ein html-php-gemisch. dieses wird in der con_code gespeichert und bei einem seitenaufruf mit eval interpretiert und die ausgabe an die standardausgabe ausgegeben.

Verfasst: Do 13. Apr 2006, 09:48
von donny
verstehe ich das richtig, dass in con_code sozusagen eine Temporäreseite erzeugt wird, wo das Html-Code von layout auch schon mit echo versehen wird ?
Mein Problem ist eigentlich, man kann ja so was nicht ausgeben oder ?

Code: Alles auswählen

eval("<html><body><?php echo \"x\"; ?></body></html>");
oder anders gesagt, kannst du vielleicht ein einfaches Beispiel geben, wie das Inhalt von con_code aussieht, so dass man es mit eval interpretiern kann ?

Verfasst: Do 13. Apr 2006, 09:59
von emergence
donny hat geschrieben:kann ich es mir wie folgt vorstellen ?

Code: Alles auswählen

$layout = ".... CMS_CONTAINER[2] ...";
$mod = "<?php echo "X"; ?>;
$seite = str_replace("CMS_CONTAINER[2]",$mod,$layout);
Aber wenn es so ist, und dann nacher sage ich :

Code: Alles auswählen

eval($seite);
geht doch eigentlich nicht oder ?
fast...

eval erwartet aber php code

Code: Alles auswählen

eval(" ?".">".$seite."<"."?php ");
müsste gehen...

Verfasst: Do 13. Apr 2006, 10:55
von donny
eval erwartet aber php code

Code: Alles auswählen

Code:
eval(" ?".">".$seite."<"."?php ");
müsste gehen...
Leider geht es nicht.
Sogar wenn in der Variable $seite nur "blablabla" steht, wird es nicht angezeigt.

Verfasst: Do 13. Apr 2006, 11:03
von emergence
also das ist sowieso falsch

Code: Alles auswählen

$mod = "<?php echo "X"; ?>; 
folgendes müsste schon eher funktionieren...

Code: Alles auswählen

$mod = "<"."?php echo \"X\"; ?".">"; 
wenn du schreibst es geht was nicht... -> dann bitte mit genauer fehlermeldung...

gesamter code sieht dann eigentlich so aus

Code: Alles auswählen

<?php

$layout = ".... CMS_CONTAINER[2] ...";
$mod = "<"."?php echo \"X\"; ?".">";
$seite = str_replace("CMS_CONTAINER[2]",$mod,$layout);


eval(" ?".">".$seite."<"."?php ");

?>

Verfasst: Do 13. Apr 2006, 11:14
von donny
Danke für die schnelle Antwort emerge.
ich habe das Problem jetzt vereinfacht, indem ich keine Module mehr benutze, sondern habe jetzt direkt das PHP Code auf der Seite geschrieben. Und mit deinem eval(" ?".">".$seite."<"."?php "); geht es jetzt.
Super Danke vielmals :D

Verfasst: Do 13. Apr 2006, 16:03
von kummer
wenn das eine vereinfachung ist... :roll: