Templates konfigurabel

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
Post Reply
frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Templates konfigurabel

Post by frase » Tue Oct 24, 2017 5:48 pm

Oh, jetzt war Holger wieder dazwischen.
Jetzt geht hier die Post ab - immer gerade wenn ich essen will ... ;-)
Holger wrote:Und was spricht dagegen, dort auch ein statisches stylesheet.css aus der stylesheet.css.php zu generieren :?:
Na das wäre genschal, wenn das der Core (ich meine Herrn cmb) auch noch übernehemen können täte.

(sorry, für die Ausdrucksweise, bin gerade so begeistert)

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Templates konfigurabel

Post by cmb » Tue Oct 24, 2017 5:56 pm

Holger wrote:Christoph hatte schonmal den Entwurf des Plugins bekommen. Aber, wie gesagt, momentan arbeite ich tatsächlich auch aktiv daran und es wird die nächsten Tage als erste Beta hier zur Verfügung stehen.
:D
Holger wrote:
cmb wrote:Das ist doch aber zumindest bei vielen Webservern das nomale Verhalten bzgl. CSS.
Ja. Ein fauler Kompromiss eben. Wenn man sich damit zufrieden gibt, muss man über eine anständige Cache - Lösung nicht weiter nachdenken.
Einfach alles per Header auf einen Tag Gültigkeitszeitraum setzen und gut ;) .
Ich behaupte ja nicht, dass das "normale" Verhalten gut ist, aber bezüglich CSS finde ich es schon akzeptabel – immerhin ist es CSS, und nichts wirklich relevantes. Eine ausgereiftere Lösung wie oben von dir beschrieben ist natürlich netter.
cmb wrote:
frase wrote:Jetzt haben wir ja schon (in einem feature-branch) die Kontrolle durch den Core.
Da muss der Vorlagen-Gestalter nicht unbedingt ein PHP-Profi sein, um ein konfigurierbares Template zu bauen.
Und was spricht dagegen, dort auch ein statisches stylesheet.css aus der stylesheet.css.php zu generieren :?:
Technisch nichts. Ich bin halt nach wie vor nicht davon überzeugt, dass das wirklich sinnvoll/notwendig ist. Und wenn wir die Templatestylesheets durch PHP vorverarbeiten lassen, dann müssten wir das konsequenterweise auch bei den Pluginstylesheets tun.
Christoph M. Becker – Plugins for CMSimple_XH

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Templates konfigurabel

Post by frase » Tue Oct 24, 2017 7:53 pm

Holger wrote:Bei dynamischen Seiten ist es komplizierter: hier speichere ich einen Hash, der aus dem Inhalt generiert wird. Den sende ich dann als E-Tag. Bei der nächsten Anfrage schickt der Client das E-Tag mit, was dann serverseitig verglichen wird. Stimmt es überein, wird nur ein 304 not modified - Header geschickt und der Browser nimmt die Seite aus seinem Cache. Wenn nicht, wird die Seite dann komplett gesendet.
Ginge das in etwa so?
Käme man damit weiter?
In der stylesheet.css.php ganz oben ...

Code: Select all

<?php
header("Content-type: text/css");

function set_eTagHeaders($file, $timestamp) {
    $gmt_mTime = gmdate('r', $timestamp); 
 
    header('Cache-Control: public');
    header('ETag: "' . md5($timestamp . $file) . '"');
    header('Last-Modified: ' . $gmt_mTime);
 
    if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
        if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == $gmt_mtime || str_replace('"', '', stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])) == md5($timestamp . $file)) {
            header('HTTP/1.1 304 Not Modified');
            exit();
        }
    }
}

set_eTagHeaders(__FILE__, filemtime(__FILE__));
...
Damit taucht aber in meiner Konsole die stylesheet.css.php zweimal auf.
Beide Male mit "Aus Cache" und grau - keine Ladezeiten.
Aber eine davon mit Status 200, die andere mit 304.
Änderungen werden erst nach Cache(History)-leeren sichtbar. (nicht nach Reload)
Auch der ETag ist bei beiden gleich.

Beinahe vergessen:
Der Code stammt von
http://blog.franky.ws/php-und-das-cachi ... ader-etag/
Dieser Franky bin aber nicht ich ;-)

Nachtrag:
Oh Mann, bin ich blöd.
So klappt zwar das Caching - aber die Änderung der config.php kriegt das Script ja gar nicht mit :oops:

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Templates konfigurabel

Post by cmb » Tue Oct 24, 2017 9:00 pm

Zum Caching: da gibt es zwei Möglichkeiten: entweder man bringt den Client dazu, überhaupt nicht beim Server nachzufragen, oder man lässt ihn nachfragen, antwortet ggf. aber mit 304. Letzteres bedeutet zumindest bei HTTP/1.1 einen zusätzlichen Request, aber wenigstens entfällt dann die Payload (aka. Body).

Holgers CSS-Variante kombiniert das beste der beiden Möglichkeiten: hartes Caching (also Variante 1), aber eben durch den zusätzlichen URL-Parameter vom Server aushebelbar. Das könnte man so im Prinzip auch mit .css.php machen. In template.htm eben etwa:

Code: Select all

<link rel="styelsheet" type="text/css" href="stylesheet.css.php?<?=filemtime('stylesheet.css.php')?>">
Und in stylesheet.css.php dann eben das Caching forcieren (Last-Modified Header in der Vergangenheit; Expires Header in der Zukunft). Der URL-Parameter kann in stylesheet.css.php getrost ignoriert werden.
Christoph M. Becker – Plugins for CMSimple_XH

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Templates konfigurabel

Post by frase » Tue Oct 24, 2017 9:09 pm

Na ja, na ja, na ja, aber ...
Die Änderungen finden ja in der config.php statt.
Wenn die stylesheet.css.php gecached wird, bekommt man die Änderungen ja nie zu sehen - bis der Cache geleert wird oder der Browser geschlossen.

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: Templates konfigurabel

Post by Holger » Tue Oct 24, 2017 9:12 pm

Das funktioniert nicht, weil filemtime('stylesheet.css.php') sich bei einer Änderung in der Konfiguration nicht ändert.
Es müsste also der Timestamp der stylesheet.css.php und der Datei mit den Konfigurationsdaten berücksichtigt werden.

Warum macht ihr es nicht einfach und schreibt bei Änderung einer Konfigurationsoption einfach eine stylesheet.css in den Template-Ordner?
Dann greift auch schonmal das Default-Caching des Servers...

... da war der Frank jetzt schneller

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Templates konfigurabel

Post by frase » Tue Oct 24, 2017 9:18 pm

Holger wrote:Warum macht ihr es nicht einfach und schreibt bei Änderung einer Konfigurationsoption einfach eine stylesheet.css in den Template-Ordner?
Weil Christoph hier sagt:
cmb wrote:Ich bin halt nach wie vor nicht davon überzeugt, dass das wirklich sinnvoll/notwendig ist. Und wenn wir die Templatestylesheets durch PHP vorverarbeiten lassen, dann müssten wir das konsequenterweise auch bei den Pluginstylesheets tun.
Und? Hatter recht?
Hatter! Zumindest mit den Plugins.

Holger
Site Admin
Posts: 3470
Joined: Mon May 19, 2008 7:10 pm
Location: Hessen, Germany

Re: Templates konfigurabel

Post by Holger » Tue Oct 24, 2017 9:24 pm

frase wrote:Und? Hatter recht?
Hatter! Zumindest mit den Plugins.
Die Sinnhaftigkeit bezog sich IMO auf das gesamte Vorhaben (CSS per PHP). Und da habe ich auch so meine Zweifel.

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Templates konfigurabel

Post by cmb » Tue Oct 24, 2017 9:25 pm

Holger wrote:Das funktioniert nicht, weil filemtime('stylesheet.css.php') sich bei einer Änderung in der Konfiguration nicht ändert.
Es müsste also der Timestamp der stylesheet.css.php und der Datei mit den Konfigurationsdaten berücksichtigt werden.
Stimmt natürlich! Wäre ja aber auch kein besonderes Problem.
Holger wrote:Warum macht ihr es nicht einfach und schreibt bei Änderung einer Konfigurationsoption einfach eine stylesheet.css in den Template-Ordner?
Dann greift auch schonmal das Default-Caching des Servers...
Ein Problemchen ist, dass man das Speichern der Konfiguration abfangen müsste – geht eigentlich nur, wenn man sich auf die aktuelle URL-Struktur festlegt; da wäre vielleicht https://github.com/cmsimple-xh/cmsimple-xh/issues/273 hilfreich.

Ein anderes Problemchen ist, dass manuelle Änderungen an der Konfiguration nicht abgefangen würden.

Mir geht es hier aber gar nicht um eine allgemeine Lösung im Core; IMHO sind konfigurierbare Templates und vorverarbeitete Stylesheets zwei paar Schuhe; sollte also besser separat diskutiert werden.
Christoph M. Becker – Plugins for CMSimple_XH

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Templates konfigurabel

Post by cmb » Tue Oct 24, 2017 9:31 pm

frase wrote:Hm, costum properties machen wir in ein paar Jahren - wenn es keinen IE11 mehr gibt.
Okay. Man kann es aber auch so lösen, dass man nur die Regeln für die konfigurierbaren Eigenschaften im Template erzeugt, etwa:

Code: Select all

<style>
a:visited, h1, h2, .foo, #bar {background-color: <?=$tpl_cf['color']['1']?>}
</style>
Und natürlich könnte man auch über LESS/Sass/Stylus (und was weiß ich nicht) nachdenken.
Christoph M. Becker – Plugins for CMSimple_XH

Post Reply