Chain für Frontend-Ausgabe

Gesperrt
Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Chain für Frontend-Ausgabe

Beitrag von Dodger77 » Mo 16. Jan 2006, 11:43

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.

MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount » Mo 16. Jan 2006, 15:38

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.

SkyBlader
Beiträge: 303
Registriert: Do 18. Mär 2004, 16:23
Wohnort: Ratingen / NRW
Kontaktdaten:

Beitrag von SkyBlader » Mo 16. Jan 2006, 16:45

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 ?
Contenido 4.4.4/4.4.5 - Contenido 4.5.x

Module:sn_multinav für 4.5.x

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Mo 16. Jan 2006, 17:02

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.

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Vorschlag zur Umsetzung

Beitrag von Dodger77 » Di 17. Okt 2006, 07:53

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

Code: Alles auswählen

			eval ("?>\n".$code."\n<?php\n");
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:

Code: Alles auswählen

output  gzip  true
Das bringt eine ordentliche Reduzierung des übertragenen HTMLs, z.B. hier:

http://spielwiese.contenido-tutorials.de/vpguestbook/

von 37KB auf unter 6KB.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 17. Okt 2006, 09:48

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
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Di 17. Okt 2006, 10:12

reicht nicht aus - aber das schreibe ich dir eh mal ne mail, um dir das ausmaß der korrekturen zu erläutern ;)

Gesperrt