Seite 1 von 1

Code minimieren

Verfasst: Mi 2. Okt 2019, 15:28
von samse
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

Re: Code minimieren

Verfasst: Mi 2. Okt 2019, 18:11
von Faar
:?

Re: Code minimieren

Verfasst: Mi 2. Okt 2019, 21:58
von bodil
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.)

Re: Code minimieren

Verfasst: Do 3. Okt 2019, 10:04
von samse
:?
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?

Re: Code minimieren

Verfasst: Do 3. Okt 2019, 15:02
von bodil
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. Das Semikolon (;) am Zeilenende von Codezeilen ist zudem nicht mehr optional sondern Pflicht!
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.

Re: Code minimieren

Verfasst: Fr 4. Okt 2019, 12:51
von Oldperl
Servus,

die Chain greift nicht bei Artikeln ohne Output-Buffering.

Gruß aus Franken

Ortwin

Re: Code minimieren

Verfasst: So 13. Okt 2019, 09:56
von bodil
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.

Re: Code minimieren

Verfasst: Mo 14. Okt 2019, 10:57
von Oldperl
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

Re: Code minimieren

Verfasst: Sa 18. Jan 2020, 16:54
von bodil
Was meiner Meinung nach noch mehr bringt, als aus dem Code Umbrüche zu entfernen, ist, den Server dazu zu bringen, komprimierten Code auszuliefern. Was geht, hängt davon ab, was deinem Server möglich ist. Ich hatte großen Erfolg mit diesem Code, den ich in die .htaccess-Datei eingefügt habe:

Code: Alles auswählen

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/shtml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>