Hallo.
Im HTML-Header gibt es folgenden Aufruf:
<link rel="stylesheet" href="[https://domain.tld/theme/THEME-CACHE-ID/css/all.css](view-source:https://domain.tld/theme/THEME-CACHE-ID/css/all.css?1695690262)">
Die Frage ist: wo liegt diese CACHE-ID gespeichert? In der Datenbank finde ich sie nicht.
Die CacheId kann in der .env angegeben werden. Ansonsten wird eine zufällige Id gebildet. Diese sollte sich aber in der Datenbank finden lassen, soviel ich weiß.
Mir nutzt es nichts, die ID irgendwo festzulegen. Ich möchte die aktuell gültige ID auslesen. Und nein, in der Datenbank ist diese ID offensichtlich nicht zu finden.
Sobald ich im Custom Template Manager eine Änderung vornehme, wird ein neues Theme-Verzeichnis erstellt.
In deinem ersten Post hast du Cache geschrieben, nun Thema-Verzeichnis. Das sind zwei unterschiedliche Dinge.
Die zu suchende ID stammt aus dem Verzeichnis
/public/theme/
Dort liegt nach meinen Verständnis eine Cache-Version des Templates. Siehe CSS-Aufruf vom HTML-Auszug im ersten Post.
Da habe ich wohl beim überfliegen die Frage falsch verstanden. Entschuldige bitte.
Hier ist der entsprechende Codeblock… Zeile 107.
Danke für den Hinweis. Aber wie ich das verstehe, erzeugt die Funktion eine neue ID beim Kompilieren des Themes.
Die ‚all.css‘ liegt danach aber ja abrufbereit im „/public/theme/HASH-ID/“ Ordner. Und da weiß ich immer noch nicht, wie ich an den Hash-Wert komme. Original Theme-ID und Saleschannel-ID sind beide aus der Datenbank abrufbar. Aber diese ID der kompilierten CSS/JS finde ich nicht.
Ich habe den Code nicht weiter gelesen.
Angenommen die ID wird nirgendwo abgelegt, was fast nicht sein kann, da sonst das HTML im Template falsch wäre… Falls entsprechender Cache gleichzeitig aktualisiert wird, dann
- kannst du einen eigenen Service schreiben, der die Ordner-Id ermittelt. Du weißt ja schließlich, wo der Ordner gespeichert ist
oder
- per Subscriber in den Service rein und die ID irgendwo speichern.
Mittlerweile habe ich die Lösung.
class MD5ThemePathBuilder extends AbstractThemePathBuilder
{
public function assemblePath(string $salesChannelId, string $themeId): string
{
return md5($themeId . $salesChannelId);
}
Einen Zusatz gibt es noch. Sobald ein Theme nach der Installation bearbeitet wird, zb. durch den Custom-Template-Manager, kommt noch ein Seed hinzu (siehe Datenbank ‚system_config.configuration_key = storefront.themeSeed‘):
md5($themeId . $salesChannelId . $seed);