Bedingung: $phpwcms['allow_ext_render'] = 1; → /config/phpwcms/conf.inc.php
Beschreibung:
Im /frontend_render/ -Ordner können php Skripte abgelegt werden, die während des Parsens (vereinfacht: Interne Verarbeitung) der Seite abgearbeitet werden, bevor die Seite an den Browser ausgeliefert wird.
Alle Dateien mit der Endung *.php werden vom System geladen und ausgeführt. Die Dateinamen sind frei wählbar (empfohlenes Muster: rt_mein_dateiname.php).
Die Reihenfolge der Abarbeitung ist ohne spezielle Programmierung nicht bestimmbar.
Das Kernstück ist in der Regel die Variable $content[“all”], in der der Inhalt des Contents der Seite liegt (zwischen <body> und </body>).
Es können natürlich auch andere systemfremde Funktionen ausgeführt werden.
In allen Dateien in diesem Ordner sollte aus Sicherheitsgründen am Anfang jeder Datei folgende Sequenz stehen:
<?php // ---------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) { die("You Cannot Access This Script Directly, Have a Nice Day."); } // ---------------------------------------------------------------- ... ...
Hier der Dateiinhalt einer sehr einfachen Prozedur, die einfach nur den Text “Das ist ein unsinniger Text” an das Seitenende jeder Seite schreibt:
<?php // ---------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) { die("You Cannot Access This Script Directly, Have a Nice Day."); } // ---------------------------------------------------------------- $content["all"] .= '<p>Das ist ein unsinniger Text</p>'; ?>
Hier der Dateiinhalt eines sehr einfachen Ersetzers:
<?php // ---------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) { die("You Cannot Access This Script Directly, Have a Nice Day."); } // ---------------------------------------------------------------- $content["all"] = str_replace('{My_TicTac}', 'My clock ist working very well.', $content["all"]); ?>
Der Tag hierzu hieße {My_TicTac}.
Eingesetzt in einen CP würde
{My_TicTac} {DATE_LONG}
im Frontend
My clock ist working very well. Freitag, 23. Januar 2009
ergeben.
Daher, die Stelle an der der Tag steht wird durch das Ergebnis aus der Datei im /frontend_render/ ersetzt. (Hier wurde noch der System-Tag {DATE_LONG} hinzugenommen).
<?php /* ================================================================ dd.mm.yyyy Short descrition Autor: My Name TAG: {My_Tag} Filename: my_tag_replacer.php Folder: /template/inc_script/frontend_render/ Switch: $phpwcms['allow_ext_render'] = 1; (/config/phpwcms/conf.inc.php) Forum: http://forum.phpwcms.org/viewtopic.php?p=xxxxx ================================================================ */ // ---------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) { die("You Cannot Access This Script Directly, Have a Nice Day."); } // ---------------------------------------------------------------- if( ! (strpos($content["all"],'{My_Tag:')===false)) { function func_my_specials ($spec1,$spec2) { $my_spec_result = ' ['. $spec2 . ' + '. $spec1 . ']'; return $my_spec_result; } function func_my_tag_replacer ($var1, $var2, $var3 = "no parameter catched") { // My_php_code/source; // e.g. $my_result = ' var1= '. $var1 . func_my_specials ($var3,$var2) . '<br /> var2= '. $var2 . '<br /> var3= '. $var3 . '<br />'. LF; return $my_result; } // {My_Tag:,,} or {My_Tag:} // ----------------------------------------------------- $content["all"] = str_replace('{My_Tag:}', func_my_tag_replacer("Werner","Ulla"), $content["all"]); $content["all"] = preg_replace('/{My_Tag:(.*?),(.*?),(.*?)}/e', 'func_my_tag_replacer("$1","$2","$3")', $content["all"]); // ----------------------------------------------------- } $content["all"] = str_replace('{My_TicTac}', 'My clock ist working very well.', $content["all"]); // -----------[ CLOSE ]---------------- ?>
Aufruf in einem CP:
{My_Tag:} {My_Tag: erster toller Text, zweiter toller text, dritter toller Text}
Ausgabe im Frontend:
var1= Werner [Ulla + no parameter catched] var2= Ulla var3= no parameter catched var1= erster toller Text [ zweiter toller text + dritter toller Text] var2= zweiter toller text var3= dritter toller Text
So ist es möglich sehr viel spezielle Fälle entsprechend zu behandeln.
— Knut Heermann (flip-flop) 2009/01/23 15:19
Wenn mehr als eine Datei im Ordner /frontend_render/ existieren und die Resultate dieser Routinen in Abhängigkeit zueinander stehen, taucht ein fundamentales Problem verursacht durch die Abarbeitungsreihenfolge auf.
Wir haben leider keinen direkten Einfluss auf die Abarbeitungsreihenfolge der Dateien im Ordner /frontend_render/.
Dargestellt am Beispiel NAV_HORIZ_DD und dem FE Sprachumschalter.
–> Forum [EN]
Wenn der Sprachumschalter vor dem NAV_HORIZ_DD Skript abgearbeitet wird, wird kein Sprach-Tag in der Navigation ersetzt.
[de]Das Haus[/de][en]The Hotel[/en][de]Urlaub & Familie[/de][en]Holidays & Family[/en]
Eine einfache Lösung:
Verschiebe die betroffenen Dateien in einen anderen Ordner und stelle die richtige Reihenfolge der betroffenen Dateien mit Hilfe einer dritten Datei her.
<?php // ---------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) { die("You Cannot Access This Script Directly, Have a Nice Day."); } // ---------------------------------------------------------------- // Specifies the sequence of processing files include ('special/rt_nav_horiz_drop_down.php'); // processing first include ('special/lang_replace.php'); // processing second ?>
Um die Skriptlaufzeit auf dem Server zu optimieren, können Sie die Inhalte aller Dateien in /frontend_render/* in der richtigen Reihenfolge in eine Datei schreiben z.B. master.php
Jetzt müssen natürlich alle anderen Dateien in diesem Ordner deaktiviert werden z.B. durch die Endung *.php_
Das ist alles, wir haben die Abarbeitungsreihenfolge bestimmt.
(Sie können das mit allen anderen php Skripten in /frontend_render/ praktizieren, wenn ähnliche Probleme auftauchen).