Neu Wie ändere ich die nTemplateVersion? v=1

Xantiva

Sehr aktives Mitglied
28. August 2016
1.795
316
Düsseldorf
Hallo zusammen,
was muss ich machen, um den Zähler bei den einzubindenen Template-Dateien zu ändern? Also das v=1 am Ende der URLs?
HTML:
<link type="text/css" href="xxx/bootstrap.css?v=1" rel="stylesheet">
<link type="text/css" href="xxx/basteltheme.css?v=1" rel="stylesheet">
<link type="text/css" href="xxx/offcanvas-menu.css?v=1" rel="stylesheet">

PHP:
<link type="text/css" href="{$cCSS}?v={$nTemplateVersion}" rel="stylesheet">
Wie ändere ich den Wert von nTemplateVersion?

Ich möchte den Expires Wert auf einen Monat erhöhen, dann brauche ich aber eine Möglichkeit bei einem Update auch die neuen Daten an die User ausliefern zu können.

Danke und frohe Ostern,
Mike
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.450
2.573
Berlin
Firma
css-umsetzung
Schau am besten in die header.tpl und auch in die footer.tpl, dort werden die einzelnen Dateien ja eingebunden.


Mein Vorschlag, da ich denke das du den cache unter anderem für Google erhöhen möchtest, mach das so

Im Original sieht das im header so aus
Code:
  <link type="text/css" href="asset/{$Einstellungen.template.theme.theme_default}.css{if isset($cPluginCss_arr) && $cPluginCss_arr|@count > 0},plugin_css{/if}?v={$nTemplateVersion}" rel="stylesheet">

ändere das auf
Code:
            <link type="text/css" href="asset/{$Einstellungen.template.theme.theme_default}.css{if isset($cPluginCss_arr) && $cPluginCss_arr|@count > 0},plugin_css{/if}&{$smarty.now|date_format:'%e%I'}" rel="stylesheet">

nun ist dein cache für diese Datei ein Jahr haltbar, in Wirklichkeit erneuert sich der für einen wiederkommenden User aber nach einer Stunde, es könnte ja sein das du mal Änderungen am stylesheet vornimmst.

gleiches machst du auch in den JS Dateien die sich im Footer befinden.

was habe ich gemacht:

aus dem ?v={$nTemplateVersion} was einen cache von 24h produziert, habe ich ein &{$smarty.now|date_format:'%e%I'} gemacht.

warum:
In der config vom minifi steht drin das wenn man &1234 übergibt, wird der cache automatisch auf ein Jahr gesetzt.
Da wir aber wollen das der User unsere css und js nicht wirklich ein Jahr cached weil ja immer Änderungen vorkommen können, habe ich nur einen Teil von einem Zeitstempel übergeben.

Mach das aber nur mit den Minifizierten Daten.
 

Xantiva

Sehr aktives Mitglied
28. August 2016
1.795
316
Düsseldorf
Hi,
so etwas empfinde ich aber eher als "Notlösung". Warum kann man das nicht gleich "richtig" machen? Wir haben damals einen eigenen XTC-Fork rausgebracht. Dort wurden auch die CSS und JS für das Template automatisch zusammengefasst und verkleinert. Bei Änderungen (wenn der Shop die CSS neu generieren musste) wurde automatisch ein Zähler erhöht und alle haben sofort die Änderungen mitbekommen.

Ich habe mir jetzt noch mal den Code angesehen - es war viel zu einfach! :D

Code:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Template>
    <Name>Basteln-Selbermachen Template</Name>
    <URL>https://www.basteln-selbermachen.de</URL>
    <Version>1.02</Version>
    <ShopVersion>405</ShopVersion>
    <Parent>Evo</Parent>

Ich hatte schon testweise die Version in der tempate.xml hochgezählt - dann sehe ich das im Backend bei der Übersicht schon richtig, aber es hatte keinerlei Auswirkung auf den generierten Code. Ich muss nur einmal in die Einstellungen des Templates, nichts ändern, aber "Speichern" klicken. Dann wird die Version in die Datenbank übernommen und mit dem Code ausgeliefert. Man muss nur drauf achten, dass man bei einer Fließkommazahl bleibt.

Frohe Ostern,
Mike
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.450
2.573
Berlin
Firma
css-umsetzung
ja dann hast du aber nur einen cache von 24h was Google nicht gefällt.

Im XTC war das alles ein wenig einfacher, da man dort direkt im Code rummurksen "konnte/musste"
 

Xantiva

Sehr aktives Mitglied
28. August 2016
1.795
316
Düsseldorf
Hm,
ok, in der /includes/libs/minify/config.php habe ich den einen Tag gefunden:
PHP:
$min_serveOptions['maxAge'] = 86400;

Aber ich vermute mal, da läuft was schief, denn in der /includes/libs/minify/index.php gibt es eigentlich diesen Code:
PHP:
// check for URI versioning
if (preg_match('/&\\d/', $_SERVER['QUERY_STRING']) || isset($_GET['v'])) {
    $min_serveOptions['maxAge'] = 31536000;
}
Der sollte dafür sorgen, dass bei einem "v" als GET-Parameter das maxAge auf ein Jahr hoch gesetzt wird.

Aber wenn ich diese URL aufrufe: /asset/basteltheme.css?v=1
dann besteht $_GET nur noch aus:
Code:
 ["g"]=> string(15) "basteltheme.css"
Scheinbar wird das $_GET-Array bereinigt und damit fehlt das v=1 beim Minify ...

Dazu müssten sich mal die JTL- Shop Entwickler äussern. :(
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.450
2.573
Berlin
Firma
css-umsetzung
Genau, gezogen werden hier normalerweise die 86400 was 24h sind.
Ich vermute dein ?v geht wegen der .htaccess verloren.
 

Xantiva

Sehr aktives Mitglied
28. August 2016
1.795
316
Düsseldorf
Stimmt ...
Code:
RewriteRule ^asset/(.*)$ includes/libs/minify/?g=$1 [L]
liefert laut einem Online-Tool zwei Fragezeichen (%3F = ?) in der URL:

Ich war schon mal besser in Sachen RegEx :( Hat jemand eine Idee, wie man die .haccess anpassen müsste, dass der GET-Parameter korrekt angehängt wird?

Code:
 http://www.example.com/includes/libs/minify/?g=basteltheme.css&v=1
 

Xantiva

Sehr aktives Mitglied
28. August 2016
1.795
316
Düsseldorf
Nachtrag:
Wenn ich in $_SERVER["REQUEST_URI"] prüfe, ob das ?v= enthalten ist, dann sind die Daten auch ein Jahr gültig:
PHP:
// check for URI versioning
if (preg_match('/&\\d/', $_SERVER['QUERY_STRING']) || isset($_GET['v']) || (strpos($_SERVER['REQUEST_URI'], '?v=') !== false)) {
    $min_serveOptions['maxAge'] = 31536000;
}

Ich mache mal ein Ticket auf.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.450
2.573
Berlin
Firma
css-umsetzung
Ich habe das damals zur 4.04er mal angesprochen, da hieß es das es so gedacht ist.

Ich sehe darin auch einige Probleme, wenn man es so macht wie du das gerne hättest, daher habe ich ja den oben gezeigten Weg gewählt.
Ich kann einem User keinen Cache von einem Jahr geben, da ich ja auch innerhalb einer Templateversion an den Styles und auch am JS Änderungen vornehme (jedes Plugin kann beides bei der Installation ändern) und wie du ja schon bemerkt hast gibt es ja keine einzelne Versionierung der Styles und Scripts.
 

Xantiva

Sehr aktives Mitglied
28. August 2016
1.795
316
Düsseldorf
Hm, Änderungen am Code, ohne gleichzeitig eine irgendwie geartete Versionsnummer zu erhöhen, ist auch nicht sauber / wünschenswert, oder? Meinen kompletten Shop habe ich in einem Git-Repository. Wenn ich da an meinem Child-Template etwas ändere, dann kann ich problemlos die Version im Template hochzählen. Aber das macht sicherlich nicht jeder. Um so wichtiger wäre dann aus meine Sicht so etwas wie eine "Build"-Nummer oder vergleichbar zu implementieren. Eine Nummer, die (ggf. sogar automatisch) bei jeder Änderung hoch gezählt wird. Die wird z. B. bei jedem Speichern eines Templates / Plugins im Backend hoch gezählt. Dann bekommen die User immer die korrekte Dateiversion ausgeliefert, die dann auch eine lange Gültigkeit haben. Und wenn ich eine Änderung mache, dann möchte ich auch nicht, dass die User die noch bis zu 24 Stunden weiter verwenden müssen.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.450
2.573
Berlin
Firma
css-umsetzung
Das jemand das in einem Git hat oder ständig die Version hochzählt wird sehr selten vorkommen, noch dazu schrieb ich ja schon, das auch Plugins die du installierst das css und JS verändern.

plugin_css
plugin_js_body
plugin_js_head

Dann musst du bei jedem Plugin Update deine Templateversion hochzählen.

Hm, Änderungen am Code, ohne gleichzeitig eine irgendwie geartete Versionsnummer zu erhöhen, ist auch nicht sauber / wünschenswert, oder?

Der Core bleibt bei meiner Version ja unberührt, es wird über das Child in der header und footer.tpl geändert.
 

Xantiva

Sehr aktives Mitglied
28. August 2016
1.795
316
Düsseldorf
Dann musst du bei jedem Plugin Update deine Templateversion hochzählen.
Nein - eben nicht. Wenn der Shop so etwas wie eine Build-Nummer automatisch generiert, braucht man das nicht.

PHP:
<link type="text/css" href="{$cCSS}?v={$nTemplateVersion}.{$nTemplateBuildNumber}" rel="stylesheet">

Das Minify Package sieht das Verhalten ja aus gutem Grund genau so vor: https://github.com/mrclay/minify/blob/master/docs/UserGuide.wiki.md#far-future-expires-headers
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.450
2.573
Berlin
Firma
css-umsetzung
Das macht der Shop aber nicht und das Template kann nicht wissen was die Plugins machen, ich glaube der Aufwand die auch noch zu überwachen wäre zu groß.

Ich habe in meinem Child Template z.B. einen eigenen Less Compiler integriert.
Wenn ich die entsprechende Einstellung im Child wähle, werden die einzelnen css und less Dateien aus dem Template überwacht und bei Änderungen automatisch neu compiled oder immer neu Generiert,
An diesem Punkt könnte man vermutlich direkt die Variable {$nTemplateVersion} ändern und um eine Buildnummer erweitern, aber wer weiß was man dann durcheinander bringt, ich glaube es gibt im Shop selbst auch Abfragen welche Templateversion verwendet wird.

Aber auch hier wird nur das Template selbst überwacht und nicht die Plugin Ressourcen.
 

Ähnliche Themen