Seite 1 von 1
Chain für Frontend-Ausgabe
Verfasst: Mo 16. Jan 2006, 11:43
von Dodger77
Ich habe mir mal ein paar Gedanken gemacht zu der Einbindung von Erweiterungen, die an der Ausgabe des Frontends ansetzen. Beispiele dafür sind das Advanced Mod Rewriting von stese oder meine vpTransformationen. Wäre es nicht sinnvoll, dafür eine Chain einzubauen, die den Code, der durch eval() erzeugt wurde, dann noch ändern kann.
Das ließe sich dann für einen Haufen Sachen nutzen, z.B. auch für eine abschließende (X)HTML-Validierung mit libtidy o.ä.
Ich werde mir das mal anschauen und den Code dann hier posten, soweit das interessant sein sollte.
Verfasst: Mo 16. Jan 2006, 15:38
von MyAccount
Nennt man das auch Wrapper oder Adapter, was Du meinst? Ich fänd's Klasse. Kann mir allerdings vorstellen, dass man da schnell aus Performancegründen an die Grenzen des Machbaren kommt. Serielles Parsen nochmals parsen usw.
Verfasst: Mo 16. Jan 2006, 16:45
von SkyBlader
meinst du damit, den frontendoutput chain gesteuert zu machen, so das sich mode "anmelden" können, um dann der reihe nach den outputcode manipulieren zu dürfen ?
Verfasst: Mo 16. Jan 2006, 17:02
von Dodger77
SkyBlader hat geschrieben:meinst du damit, den frontendoutput chain gesteuert zu machen, so das sich mode "anmelden" können, um dann der reihe nach den outputcode manipulieren zu dürfen ?
Genau. Das wird ja zurzeit schon in einigen Erweiterungen genutzt.
Die Idee dahinter ist, dass man durch die Nutzung des Contenido Extension Chainers Änderungen, die jetzt für solche Erweiterungen am Contenido-Code gemacht werden müssen, vermeiden könnte. Man packt dann einfach eine Chain in den Ordner "contenido/plugins/chains/". Diese wird dann auch nicht bei einem Update von Contenido überschrieben.
MyAccount hat geschrieben:Kann mir allerdings vorstellen, dass man da schnell aus Performancegründen an die Grenzen des Machbaren kommt. Serielles Parsen nochmals parsen usw.
Man darf das sicher nicht überstrapazieren. Aber Output-Manipulationen in dem Rahmen von den genannten Modulen dürften IMO nicht so wild sein.
Vorschlag zur Umsetzung
Verfasst: Di 17. Okt 2006, 07:53
von Dodger77
So, ich habe mich mit dem Thema ein wenig beschätigt und das läuft bei mir jetzt. Notwendige Änderungen (Zeilenangaben beziehen sich auf die 4.6.15):
front_content.php (Zeile 884):
ersetzen zu:
Code: Alles auswählen
ob_start();
eval("?>\n".$code."\n<?php\n");
$exec_php_str = ob_get_contents();
ob_end_clean();
$_cecIterator = $_cecRegistry->getIterator("Contenido.Frontend.OutputManipulation");
if ($_cecIterator->count() > 0)
{
while ($chainEntry = $_cecIterator->next())
{
$exec_php_str = $chainEntry->execute($exec_php_str);
}
}
$compressOutput = getEffectiveSetting('output', 'gzip', "false");
if ($compressOutput == "true") ob_start(ob_gzhandler);
echo $exec_php_str;
Und in der
config.chains.php müsste man dann folgendes ergänzen:
Code: Alles auswählen
/* Chain Contenido.Frontend.OutputManipulation
* This chain is called everytime the output is brought to the browser
*
* Parameters & order:
* string eval()'ed output from front_content.php
*
* Returns:
* string Returns manipulated output
*/
$_cecRegistry->registerChain("Contenido.Frontend.OutputManipulation", "string");
Zusätzlich zur Manipulation des Outputs kann man nun auch per System-/Mandanteneinstellung gzip-Komprimierung für das Frontend anschalten über:
Das bringt eine ordentliche Reduzierung des übertragenen HTMLs, z.B. hier:
http://spielwiese.contenido-tutorials.de/vpguestbook/
von 37KB auf unter 6KB.
Verfasst: Di 17. Okt 2006, 09:48
von HerrB
Verschoben nach Bugs, damit ich es nicht übersehe. Sehr sinnvoll, da mod_rewrite von stese als Plugin realisiert werden soll...
Muss man sich natürlich noch ansehen, ob das ausreicht.
Gruß
HerrB
Verfasst: Di 17. Okt 2006, 10:12
von stese
reicht nicht aus - aber das schreibe ich dir eh mal ne mail, um dir das ausmaß der korrekturen zu erläutern ;)