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: 1915
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: 340
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: 340
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. 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: 4250
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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

bodil
Beiträge: 340
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: 4250
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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

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

Re: Code minimieren

Beitrag von bodil » Sa 18. Jan 2020, 16:54

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