Templates konfigurabel

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

Re: Templates konfigurabel

Post by frase » Thu Nov 30, 2017 5:25 pm

cmb wrote:Die einfachste Variante wäre es, wenn bei Bedarf ein stylesheet.css.php angelegt wird, und dies bei Speicherung der Konfiguration (und bei Änderungen an stylesheet.css.php) ausgewertet, und als stylesheet.css gespeichert wird.
Gut. Dann habe ich es richtig verstanden.
cmb wrote:Dazu wäre es schön, wenn es einen Hook gäbe, der beim Speichern der Konfiguration aufgerufen wird
Das klingt sehr interessant.
cmb wrote:Stimmt. Bei den konfigurierbaren Templates geht es allerdings vor allem darum, dass ein Templatedesigner ein solches ausliefern kann, so dass auch ein völlig unerfahrener Anwender, die ein oder andere Option ändern kann, ohne im HTML (oder CSS) selbst Hand anlegen zu müssen.
Genau das ist es.
Es wird ein Template ausgeliefert und es kann in tausenden Variationen verwendet werden - Auf Klick! Ohne im Template oder im Stylesheet ändern zu müssen.
Du entscheidest dich für ein Template, z.B. in "Grau und Orange". Dein Verein hat aber "Grün und Gelb" als Vereinsfarben. Welcher laie hat es schon drauf, alle Stellen im Stylesheet zu finden? Mach es mit einem Klick in der Template-Konfiguration!
Oder du baust etwas für eine Firma. Die hat als Hausschrift eine Serifen-Schrift. -> Umschalten in der Template-Konfiguration. Und nicht die Schriftdefinition manuell ändern.
Es ergeben sich tatsächlich unzählige Möglichkeiten, die für "normale" Anwender eine große Erleichterung darstellten.
Wie oft haben wir im Forum Fragen wie z.B.: "Wie ändere ich die Hintergrundfarbe meiner Seite ...?" oder so ähnlich.

cmb
Posts: 12595
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Templates konfigurabel

Post by cmb » Thu Nov 30, 2017 5:30 pm

Holger wrote:Der eleganteste Weg wäre in der Tat ein neuer Hook, was natürlich Aufwand bedeutet :( .
Aber irgendwelche Platzhalter ersetzen, wie bei den Editor-Inits, ist auch nicht der Bringer...
Mit dem Hook meinte ich nur, dass man eine Funktion registrieren kann, die aufgerufen wird, wenn die Konfiguration gespeichert wird. Ist halt lesbarer und zukunftssicherer als if ($admin == '…' && $action == '…') (oder wie auch immer genau).
Holger wrote:
cmb wrote:Man könnte so z.B. die Anzahl (und vielleicht Position) von Newsboxen konfigurierbar machen. Das fände ich schon nützlich.
Das habe ich bisher immer mit Morepagedata einfach lösen können (mal verschiedene Spalten, mal mehr oder weniger Newsboxen...).
Morepagedata ist nützlich, um das Template für individuelle Seiten anzupassen – hier geht es aber darum, dass ein Template für alle Seiten angepasst werden kann (falls vom Templatedesigner vorgesehen). Eben eine Alternative zu TemPlug oder Stylemanager (oder wie svastis Plugin hieß).
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

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

Re: Templates konfigurabel

Post by frase » Sat Dec 02, 2017 4:03 pm

cmb wrote:Eben eine Alternative zu TemPlug oder Stylemanager (oder wie svastis Plugin hieß).
Ich habe mir gerade zum ersten Male "Stylemanager_XH 1 beta" von svasti angeschaut - und bin beinahe umgefallen.
Was da für Arbeit, Aufwand, KnoffHoff und Hirnschmalz drinnesteckt!
Aaaber, leider wirklich kaum nutzbar. Zumindest für einen Simple, wie mich.
Alleine schon der Plugin-Menüpunkt "Variables" erschlägt einen förmlich.
Irgendwie finde ich es schade, dass ein solches Programmierer-Potenzial für uns kaum noch zur Verfügung steht.

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

Re: Templates konfigurabel

Post by Holger » Tue Dec 05, 2017 9:37 am

cmb wrote: Mit dem Hook meinte ich nur, dass man eine Funktion registrieren kann, die aufgerufen wird, wenn die Konfiguration gespeichert wird. Ist halt lesbarer und zukunftssicherer als if ($admin == '…' && $action == '…') (oder wie auch immer genau)..
Man könnte es auch einfach genau so lösen, wie es bei plugins.css realisiert ist:
einfach die Timestamps der Konfigurationsdateien und der stylesheet.css.php mit dem der stylesheet.css vergleichen. Wenn erforderlich, stylesheet.css neu generieren. Das würde dann auch offline gemacht Änderungen an den Dateien berücksichtigen und wäre wohl insgesamt auch weniger Programmieraufwand.

Aber dazu mal eine andere Frage: wie generiert man aus der stylesheet.css.php am sinnvollsten die stylesheet.css? eval() :? .

cmb
Posts: 12595
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Templates konfigurabel

Post by cmb » Tue Dec 05, 2017 12:45 pm

Holger wrote:Man könnte es auch einfach genau so lösen, wie es bei plugins.css realisiert ist:
einfach die Timestamps der Konfigurationsdateien und der stylesheet.css.php mit dem der stylesheet.css vergleichen. Wenn erforderlich, stylesheet.css neu generieren. Das würde dann auch offline gemacht Änderungen an den Dateien berücksichtigen und wäre wohl insgesamt auch weniger Programmieraufwand.
Stimmt. Gute Idee!
Holger wrote:Aber dazu mal eine andere Frage: wie generiert man aus der stylesheet.css.php am sinnvollsten die stylesheet.css? eval() :? .
Ich würde wohl eher in einer Funktion bei aktiviertem Output-Buffering die Datei includen, und dann die gepufferte Ausgabe in eine neue Datei schreiben. Mit eval() ginge es natürlich auch, wobei man dann auf PHP-Tags am Anfang und Ende der Datei achten müsste (und keine Vorteile durch OPcache hat). Jedenfalls müssten zusätzlich alle benötigten globalen Variablen in der Funktion verfügbar gemacht werden. Also vielleicht:

Code: Select all

function generateStylesheet()
{
    $tpl_cf = $GLOBALS['tpl_cf']; // stelle nur $tpl_cf bereit
    ob_start();
    include("{$GLOBALS['pth']['file']['stylesheet']}.php");
    file_put_contents($GLOBALS['pth']['file']['stylesheet'], ob_get_clean());
}
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

cmb
Posts: 12595
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Templates konfigurabel

Post by cmb » Tue Dec 05, 2017 2:23 pm

cmb wrote:Ich schau mir das gerne mal konkret an – […]
Basierend auf obigem Post habe ich die Unterstützung einer stylesheet.css.php einmal umgesetzt. Dazu einfach in template.htm ziemlich weit oben folgenden PHP-Codeblock einfügen:

Code: Select all

<?php
if (!file_exists($pth['file']['stylesheet'])
        || filemtime("{$pth['file']['stylesheet']}.php") > ($temp = filemtime($pth['file']['stylesheet']))
        || filemtime($pth['file']['template_config']) > $temp) {
    tpl_generateStylesheet();
}

function tpl_generateStylesheet()
{
    $tpl_cf = $GLOBALS['tpl_cf']; // stelle nur $tpl_cf bereit
    ob_start();
    include("{$GLOBALS['pth']['file']['stylesheet']}.php");
    file_put_contents($GLOBALS['pth']['file']['stylesheet'], ob_get_clean());
}
?>
Falls stylesheet.css nicht existiert, oder älter ist als stylesheet.css.php oder config/config.php, dann wird die Datei neu erstellt, wobei nur $tpl_cf in stylesheet.css.php berücksichtigt wird (letzteres könnte bei Bedarf erweitert werden).
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

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

Re: Templates konfigurabel

Post by frase » Tue Dec 05, 2017 3:25 pm

cmb wrote:Basierend auf obigem Post habe ich die Unterstützung einer stylesheet.css.php einmal umgesetzt. Dazu einfach in template.htm ziemlich weit oben folgenden PHP-Codeblock einfügen:
Gesagt, getan.
Debug wrote:WARNING: flock() expects parameter 1 to be resource, integer given
... \cmsimple\functions.php:2447
WARNING: fclose() expects parameter 1 to be resource, integer given
... \cmsimple\cms.php:1362
Außerdem erscheint nach dem Speichern der Template-Konfiguration eine Seite mit dem reinen HTML-Quellcode.
Adresse im Browser:
... /index.php?file=template_config&action=array&xh_success=config

Möglicherweise war ich zu schnell und habe den Code nur in einen früheren Test mit stylesheet.css.php eingefügt.
Werde ich noch genauer untersuchen.

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

Re: Templates konfigurabel

Post by frase » Tue Dec 05, 2017 4:07 pm

frase wrote:Möglicherweise war ich zu schnell und habe den Code nur in einen früheren Test mit stylesheet.css.php eingefügt.
Werde ich noch genauer untersuchen.
Ich denke, Christoph, dass du nochmal genauer erklären musst, was in die stylesheet.css.php alles rein muss - und wie.

In meiner alten Version hatte ich folgendes:

Code: Select all

<?php
/*
header("Content-type: text/css;charset=UTF-8"); //auskommentiert: ist wohl überflüssig
include_once 'config/config.php'; // auskommentiert: bringt die HTML-Seite
*/

$fontset = $tpl_cf['fontset']['select'];
$color1 = $tpl_cf['colors']['highlight-color'];
$hdbgcolor = $tpl_cf['header']['background_color'];
$bgpattern = $tpl_cf['header']['background_pattern'];
$lgtxcolor = $tpl_cf['header']['logo_text_color'];
$bdpattern = $tpl_cf['body']['background_pattern'];
$bdbgcolor = $tpl_cf['body']['background_color'];
$ftbgcolor = $tpl_cf['footer']['background_color'];
$fttxcolor = $tpl_cf['footer']['text_color'];
$mNavBgOverlay = $tpl_cf['mobileNav']['overlay_backgound-color'];
$mNavTxOverlay = $tpl_cf['mobileNav']['overlay_text-color'];

?>
...
und dann z.B. das:
.secmenu li a:hover {
    color: <?=$color1?>;
}
Mit den auskommentierten Zeilen funktioniert es.
Die zwei Debug-Meldungen bleiben.
Manchmal muss man ein Reload der Seite machen, um die Änderungen in der Template-Konfig zu sehen.
Manchmal wird es aber auch gleich nach dem Speichern angezeigt.

cmb
Posts: 12595
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: Templates konfigurabel

Post by cmb » Tue Dec 05, 2017 4:28 pm

frase wrote:Ich denke, Christoph, dass du nochmal genauer erklären musst, was in die stylesheet.css.php alles rein muss - und wie.
Der entscheidende Punkt ist wohl, dass im Template eben nicht mehr stylesheet.css.php verlinkt wird. stylesheet.css wird ja bereits vom Core verlinkt (function head()). Und ja, in stylesheet.css.php muss weder header() aufgerufen werden, noch die config.php includiert werden. Der Rest deiner stylesheet.css.php sollte passen.
frase wrote:Die zwei Debug-Meldungen bleiben.
Manchmal muss man ein Reload der Seite machen, um die Änderungen in der Template-Konfig zu sehen.
Manchmal wird es aber auch gleich nach dem Speichern angezeigt.
Das kann ich nicht reproduzieren – ich arbeite mit dem template-config Branch. Die gepostete Änderung für template.htm hat nichts mit Speicherung/Laden/Anzeige der Templatekonfiguration zu tun, sondern sorgt nur dafür, dass ein stylesheet.css.php eben zu einem stylesheet.css evaluiert wird. Das könnten dann (also wenn die Template-Konfiguration angenommen wird) individuelle Templates so nutzen, falls gewünscht.
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

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

Re: Templates konfigurabel

Post by frase » Tue Dec 05, 2017 5:26 pm

cmb wrote:Das kann ich nicht reproduzieren – ich arbeite mit dem template-config Branch.
Ich habe mir den Branch nochmal heruntergeladen und mein Template neu eingespielt.
Die beiden Debug-Meldungen kommen sofort wieder.
Im Branch ist allerdings überhaupt kein Template mit einer stylesheet.css.php ???
Womit hast du getestet?

Erfahrungsgemäß liegt der Fehler immer beim Anwender - in diesem Falle bei mir.
Ich lasse mir gerne zeigen, wo genau.
Bei Interesse:
Download

Post Reply