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 »

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: 1951
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 14 Mal
Kontaktdaten:

Re: Code minimieren

Beitrag von Faar »

:?
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
bodil
Beiträge: 372
Registriert: Fr 7. Okt 2011, 04:10
Hat sich bedankt: 2 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: Code minimieren

Beitrag 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.)
samse
Beiträge: 48
Registriert: Di 1. Sep 2015, 09:05
Kontaktdaten:

Re: Code minimieren

Beitrag 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?
bodil
Beiträge: 372
Registriert: Fr 7. Okt 2011, 04:10
Hat sich bedankt: 2 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: Code minimieren

Beitrag 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.
Zuletzt geändert von bodil am Sa 18. Jan 2020, 16:51, insgesamt 1-mal geändert.
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Code minimieren

Beitrag von Oldperl »

Servus,

die Chain greift nicht bei Artikeln ohne Output-Buffering.

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
bodil
Beiträge: 372
Registriert: Fr 7. Okt 2011, 04:10
Hat sich bedankt: 2 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: Code minimieren

Beitrag 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.
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Code minimieren

Beitrag 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
bodil
Beiträge: 372
Registriert: Fr 7. Okt 2011, 04:10
Hat sich bedankt: 2 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: Code minimieren

Beitrag 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> 
Antworten