Code minimieren

Ideen für neue Funktionen in CONTENIDO?
Antworten
samse
Beiträge: 48
Registriert: Di 1. Sep 2015, 09:05
Kontaktdaten:

Code minimieren

Beitrag von samse » Mi 2. Okt 2019, 15:28

Hi Zusammen

Cool wäre es, wenn man eine Variable setzen könnte, welche den ausgegebenen HMTL-Code minimiert.

Also von:

Code: Alles auswählen

<html>
	<head></head>
	<body>
		<p>Hallo</p>
	</body>
</html>
zu:

Code: Alles auswählen

<html><head></head><body><p>Hallo</p></body></html>
Ein paar gesparte Bytes sind ein paar gesparte Bytes :D

Grüsse
Samse

Faar
Beiträge: 1511
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Code minimieren

Beitrag von Faar » Mi 2. Okt 2019, 18:11

:?
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

bodil
Beiträge: 153
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Code minimieren

Beitrag von bodil » Mi 2. Okt 2019, 21:58

Ich habe da mal eine Chain gebaut:

Code: Alles auswählen

<?php
defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');

function cecHtmlCodeOutput($htmlCode) {
	if (getEffectiveSetting('output', 'htmlcompress', 0) == 1) {
		preg_match_all('!(<(?:code|pre|script).*>[^<]+</(?:code|pre|script)>)!',$htmlCode,$pre);
		$htmlCode = preg_replace('!<(?:code|pre).*>[^<]+</(?:code|pre)>!', '#pre#', $htmlCode);
		$htmlCode = preg_replace('#<!–[^\[].+–>#', '', $htmlCode);
		$htmlCode = preg_replace('/[\r\n\t]+/', ' ', $htmlCode);
		$htmlCode = preg_replace('/>\s+</', '><', $htmlCode);
		$htmlCode = preg_replace('/\s+/', ' ', $htmlCode);
		if (!empty($pre[0])) {
				foreach ($pre[0] as $tag) {
						$htmlCode = preg_replace('!#pre#!', $tag, $htmlCode,1);
				}
		}
	}
	return $htmlCode;
}
?>
Gut. Den eigentlichen Kompressor habe ich mir nicht selbst ausgedacht. Funktioniert aber 1a! (Und ist über eine Mandanten-Variable ein- und ausschaltbar.)

samse
Beiträge: 48
Registriert: Di 1. Sep 2015, 09:05
Kontaktdaten:

Re: Code minimieren

Beitrag von samse » Do 3. Okt 2019, 10:04

:?
Wie soll ich den Kommentar deuten? :D
Gut. Den eigentlichen Kompressor habe ich mir nicht selbst ausgedacht. Funktioniert aber 1a! (Und ist über eine Mandanten-Variable ein- und ausschaltbar.)
Genau sowas habe ich gesucht! Ich habe noch nie mit Chains gearbeitet, wie und wo kann ich den Code einfügen?

bodil
Beiträge: 153
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Code minimieren

Beitrag von bodil » Do 3. Okt 2019, 15:02

Hmmm ... das ist irgendwo erklärt. Mach mal folgendes:
Leg eine Datei im Ordner /contenido/includes/chains an, die du include.chain.frontend.htmlcodeoutput.php nennst. In diese Datei kopierst den Code oben.
Öffne die Datei /data/config/production/config.chains.load.php und ergänze dort ganz unten die Zeilen:

Code: Alles auswählen

cInclude('includes', 'chains/include.chain.frontend.htmlcodeoutput.php');
$_cecRegistry->addChainFunction('Contenido.Frontend.HTMLCodeOutput', 'cecHtmlCodeOutput');
Den Eintrag in die Mandanteneinstellungen nicht vergessen!

Hinweis: Sollte da Javascript-Code in deinem HTML-Code stehen, lösch bitte händisch alle Kommentare, die mit einem // beginnen. Der Kompressor entfernt Zeilenumbrüche. Aller JS-Code der dann hinter dem // steht wäre auskommentiert.
Hinweis: Eigene Chains überleben System-Updates nicht. Ergo: die Datei include.chain.frontend.htmlcodeoutput.php aus dem alten ins neue System kopieren, die Zeilen in die Config-Datei wieder reinkopieren.

Oldperl
Beiträge: 4067
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Code minimieren

Beitrag von Oldperl » Fr 4. Okt 2019, 12:51

Servus,

die Chain greift nicht bei Artikeln ohne Output-Buffering.

Gruß aus Franken

Ortwin
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

bodil
Beiträge: 153
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Code minimieren

Beitrag von bodil » So 13. Okt 2019, 09:56

Hi Oldperl
Oldperl hat geschrieben:
Fr 4. Okt 2019, 12:51
die Chain greift nicht bei Artikeln ohne Output-Buffering.
Was meinst du mit Output-Buffering?
B.

Oldperl
Beiträge: 4067
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Code minimieren

Beitrag von Oldperl » Mo 14. Okt 2019, 10:57

Servus,

CONTENIDO nutzt die Ausgabepufferung von PHP :arrow: https://www.php.net/manual/de/function.ob-start.php bei der Ausgabe im Frontend. Dieses kann per Artikel abgeschaltet werden (contenido/includes/frontend/include.front_content.php ab Zeile 750). Auch für die Anzeige von Offline-Artikeln im Backend wird weder Ausgabepufferung noch die Chain genutzt.

Die Chain greift nur bei gepuffertem Code (contenido/includes/frontend/include.front_content.php ab Zeile 758)

Code: Alles auswählen

} else {
                // Write html output into output buffer and assign it to an
                // variable
                ob_start();
                eval("?>\n" . $code . "\n<?php\n");
                $htmlCode = ob_get_contents();
                ob_end_clean();

                // Process CEC to do some preparations before output
                $htmlCode = cApiCecHook::executeAndReturn('Contenido.Frontend.HTMLCodeOutput', $htmlCode);

                // Print output
                echo $htmlCode;
            }
Gruß aus Franken

Ortwin
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Antworten