Cassiopeia user.css cache invalidation

  • Joomla Version
    5.0.1
    PHP Version
    PHP 8.1.x
    Hoster
    lokal

    Hallo zusammen,

    Soweit ich weiß ist es mit dem Standard-Template best practice, eigene Änderungen ins user.css zu packen.


    Nun wird diese Datei aber im Browser gecached, dh nachträgliche Änderungen schon veröffentlichter Seiten würden für bestehende User untergehen. Ein üblicher Trick um das zu umgehen ist, hinter den css-Namen ein ?timestamp zu hängen.


    Wie kann man das in Joomla bewerkstelligen?

    Ich sehe im index.php die Einbindung mit:

    Code
    $wa->usePreset('template.cassiopeia.' . ($this->direction === 'rtl' ? 'rtl' : 'ltr'))
        ->useStyle('template.active.language')
        ->useStyle('template.user')

    Gibt es statt dem useStyle schon eine Funktion, um mein Ziel umzusetzen? Oder was ist eure Empfehlung?

    Mich wunderts ein bisschen, dass ich über Google wenig Hilfreiches finden konnte. Ist das nicht ein ziemlich regelmäßiges Problem? hmm

    Danke!

  • Eine Möglichkeit, das Problem bei wirklich größeren Änderungen zu lösen, ist es, ein neues Child-Template anzulegen und das dann aktiv zu schalten.


    Bei mir ist es so, manchmal übernimmt der Browser die Änderungen in der User.css sofort, manchmal erst nach einem Löschen des Browser-Chashes. Warum? Keine Ahnung.

    Den Webseiten Cash habe ich deaktiviert, das Cassiopeia-Template ist so schnell, das bringt fast nix, macht aber jede Änderung mühsam, weil man diesen Cash dann auch immer löschen muss.

  • Zeile mit

    Code
    ->registerAndUseStyle('template.user', 'user.css', ['version' => time(), 'weight' => 501], [], ["template.active", "template.active.language"])

    ersetzen.


    Wenn es dir unangenehm ist ein Asset der Templates zu "overrulen". Du kannst auch Abstand von der user.css nehmen, legst eine eigene meine-user.css an und

    Code
    ->registerAndUseStyle('template.meine-user-css', 'meine-user.css', ['version' => time(), 'weight' => 501], [], ["template.active", "template.active.language"])

    Das time() sorgt dafür, das die Version sich bei jedem Aufruf ändert, was den Browsercache aushebelt.


    Natürlich kannst du auch nach jeder Änderung händisch irgendwas hochzählen, was dann etwas ressourcenschonender wäre.

    Code
    'version' => '1'
    
    beim nächsten mal
    
    'version' => '2'

    oder so. Wie es beliebt...