Strict Standards: Declaration of action_plugin_dlcount::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /home/www/wiki/lib/plugins/dlcount/action.php on line 14

Strict Standards: Declaration of action_plugin_indexmenu::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /home/www/wiki/lib/plugins/indexmenu/action.php on line 169

Strict Standards: Declaration of action_plugin_ipban::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /home/www/wiki/lib/plugins/ipban/action.php on line 67

Strict Standards: Declaration of action_plugin_loglog::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /home/www/wiki/lib/plugins/loglog/action.php on line 82

Strict Standards: Declaration of action_plugin_navi::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /home/www/wiki/lib/plugins/navi/action.php on line 46

Strict Standards: Declaration of action_plugin_uparrow::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /home/www/wiki/lib/plugins/uparrow/action.php on line 69

Strict Standards: Declaration of action_plugin_userspagecreate::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /home/www/wiki/lib/plugins/userspagecreate/action.php on line 97

Strict Standards: Declaration of cache_instructions::retrieveCache() should be compatible with cache::retrieveCache($clean = true) in /home/www/wiki/inc/cache.php on line 289

Warning: Cannot modify header information - headers already sent by (output started at /home/www/wiki/lib/plugins/dlcount/action.php:14) in /home/www/wiki/inc/auth.php on line 312

Strict Standards: Only variables should be passed by reference in /home/www/wiki/doku.php on line 71

Warning: Cannot modify header information - headers already sent by (output started at /home/www/wiki/lib/plugins/dlcount/action.php:14) in /home/www/wiki/inc/actions.php on line 154
/frontend_render/ [phpwcms-HowTo:wiki]

Strict Standards: Declaration of syntax_plugin_code::render() should be compatible with DokuWiki_Syntax_Plugin::render($format, &$renderer, $data) in /home/www/wiki/lib/plugins/code/syntax.php on line 41

Strict Standards: Declaration of syntax_plugin_tip::render() should be compatible with DokuWiki_Syntax_Plugin::render($format, &$renderer, $data) in /home/www/wiki/lib/plugins/tip/syntax.php on line 38

/frontend_render/

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.


Wichtig

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."); }
// ----------------------------------------------------------------
...
...


Einfaches Beispiel:

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>';
 
?>

Beispiel 2:

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).

Beispiel 3:

rt_my_tag.php

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


Abarbeitungsreihenfolge der Dateien in /frontend_render/

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/.

Lösung 01

Dargestellt am Beispiel NAV_HORIZ_DD und dem FE Sprachumschalter.

–> Forum [EN]

  1. Wir verwenden eine externe Navigation wie {NAV_HORIZ_DD:xx,yy}
  2. Wir verwenden den externen /frontend_render/ -Sprachumschalter.

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.

  1. Erstelle ein Verzeichnis z.B. /frontend_render/special
  2. Verschiebe die beiden Dateien rt_nav_horiz_drop_down.php und lang_replace.php aus /frontend_render/ nach /frontend_render/special/
  3. Erstelle eine Datei z.B. processing_order.php in /frontend_render/


processing_order.php

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


Lösung 02

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. :-D
(Sie können das mit allen anderen php Skripten in /frontend_render/ praktizieren, wenn ähnliche Probleme auftauchen).


Kleine Linkübersicht

deutsch/ersetzer_rts/frontend_render.txt · Last modified: 2012/09/06 10:06 by Knut Heermann (flip-flop)
www.planmatrix.de www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0

Strict Standards: Only variables should be passed by reference in /home/www/wiki/doku.php on line 79