Hallo Forum, ich hoffe dass mir jemand weiterhelfen kann, weil ich grad feststecke …
Ich habe mich natürlich vorher im Forum umgeschaut und das Thema auch mehrfach gefunden, jedoch konnte keiner der Lösungswege bei mir helfen.
Wir nutzen eine Shopware PE (5.1.5) mit Silver Support, aber da es sich um “Anpassungen” handelt, hilft der Support nicht weiter, sondern verweistauf den Developer-Support, den es erst ab Platin-Supportvertrag gibt.
Ich habe bisher folgendes gemacht:
Ein eigenes Responsive Theme angelegt, welches vom Theme “Bare” abgeleitet wird.
Das Plugin “Erweitertes Menu” ist am 17.5.2016 aktualisiert worden, ist aktiv und als Version wird “1” angezeigt. (Die Standardausgabe funktioniert auch einwandfrei)
Um nun im Quellcode Änderungen durchzuführen, habe ich einen Ordner “advanced_menu” in meinem Theme angelegt. (Pfad: themes/Frontend/Mytheme/frontend/advanced_menu)
In diesen Ordner habe ich die komplette index.tpl aus dem Pluginordner kopiert (Pfad: Plugins/Default/Frontend/AdvancedMenu/Views/frontend/advanced_menu)
So habe ich es in diversen Beiträgen hier nachgelesen. Ich habe auch das Plugin mehrfach neu installiert, aber es wird immer wieder das original Template aus dem Pluginordner verwendet.
Meine Anpassungen in der index.tpl werden, egal ob ich mit extends file:parent… oder ohne extends arbeite, einfach ignoriert. Also das komplette Template wird ignoriert …
Was mache ich falsch?
Ich extende von Bare, weil ich sehr individuelle Layouts umsetze und ich nicht möchte, dass erst alle Standard Responsive Theme Styles geladen werden, die dann von meinen nochmal überschrieben werden. Also mache ich direkt alles in meinem eigenen Theme (welches eine kopierte und dann angepasste Version des responsive Themes von Shopware ist). Hat bisher auch immer problemlos funktioniert. Da ich auch schon diverse templates in meinem Theme angepasst habe, weiß ich dass mein Theme sicher geladen wird.
Den Trick mit dem Fehler habe ich ja mit dem Erweiterten Menu versucht, so dass ich sicher weiß dass meine angepasste index.tpl im Ordner advanced_menu nicht genommen wird. Ich habe Fehler provoziert oder Blöcke leer gelassen usw. aber immer wird das Originaltemplate genommen, so dass das Menu immer funktioniert, es sei denn ich baue zum Testen in diese Datei einen Fehler ein…
Template Cache, Http-Cache usw. alles geleert und Theme kompiliert (in diesem Zuge wird immer der http-Cache geleert) und was man noch so machen kann. Browsercache ist es auch nicht.
So, dann antworte ich mir einfach selber, vielleicht hilft es ja mal jemand anderem.
In der Theme.php gibt es die Variable $injectBeforePlugins die auf true stand und dafür sorgt, dass die templates dieses Themes vor den Plugins eingebunden werden.
Nachdem ich den Wert auf false gesetzt habe ist alles fein …
Ich habe keine Idee wie ich den Thread auf gelöst setzen kann, er kann aber als gelöst betrachtet werden.
Edit:
Leider ist doch nicht alles fein, da mit der geänderten inject-Reihenfolge, jQuery nicht mehr korrekt eingebunden wird und somit bisher ‚nur‘ die Einkaufswelten nicht mehr funktionieren. Mehr habe ich noch nicht getestet.
Edit 2:
Habe nun erkennen müssen, wenn man von Bare ableitet funktioniert die Vererbung der templates nicht wie gewünscht. Also neues Theme erstellt (von responsive abgeleitet) und jetzt hoffe ich dass nicht noch andere Überaschuneg auf mich warten. Die Templatevererbung funktioniert jetzt mit dem neuen Theme.
Ich kann ein eigenes Theme von Bare ableiten, aber es wird wie das ‚responsive‘ Theme direkt nach ‚Bare‘ eingebunden. Danach werden Plugins geladen und dann z.B. ein weiteres eigenes Themes, welches man ja von dem von Bare abgeleiteten eigenen Theme ableiten kann. Dann funktioniert auch die Templateüberschreibung der Plugin Templates updatesicher.
Ich habe also erst mein egenes ‚responsive‘ Theme angelegt (von BARE abgeleitet), welches bei mir jetzt das ‚parent-theme‘ darstellt. Hier ändere ich alle LESS Dateien ohne dabei Styles überschreiben zu müssen.
Um auch tpl-Dateien korrekt überschreiben zu können, muss man dann ein weiteres eigenes Theme anlegen, welches bei mir jetzt dass Child-Theme ist (vergleichbar mt Wordpress)
Sollte ich falsch liegen bitte ich um Korrektur, aber aktuell läuft alles so wie es soll!
Ich kann ein eigenes Theme von Bare ableiten, aber es wird wie das ‚responsive‘ Theme direkt nach ‚Bare‘ eingebunden. Danach werden Plugins geladen und dann z.B. ein weiteres eigenes Themes, welches man ja von dem von Bare abgeleiteten eigenen Theme ableiten kann. Dann funktioniert auch die Templateüberschreibung der Plugin Templates updatesicher.
Ich habe also erst mein egenes ‚responsive‘ Theme angelegt (von BARE abgeleitet), welches bei mir jetzt das ‚parent-theme‘ darstellt. Hier ändere ich alle LESS Dateien ohne dabei Styles überschreiben zu müssen.
Um auch tpl-Dateien korrekt überschreiben zu können, muss man dann ein weiteres eigenes Theme anlegen, welches bei mir jetzt dass Child-Theme ist (vergleichbar mt Wordpress)
Sollte ich falsch liegen bitte ich um Korrektur, aber aktuell läuft alles so wie es soll!
Dazu ist es ja klar, dass wenn man vom Bare - Theme ableitet, die ganzen Funktionen (jquery etc) alles nicht mehr funktionieren, da diese Funktionen ja vom „Responsive Theme“ geliefert werden. Somit macht eine Ableitung vom Bare - Theme auch nur bedingt Sinn.
Das Theme des „Vertauschens“ der Vererbung wird in der Dokumentation ja auch ausführlich erklärt (injectBeforePlugins): Getting started with Smarty .
Die ganze „Materie“ dahinter kann man sich aber auch in den dazugehörigen Shopware Schulungen beibringen lassen oder im Entwickler - Handbuch nachschlagen.
Man kann Sie natürlich auch eine „gewisse“ Baumstruktur von Themes bauen, wo ein Theme jeweils vom anderen ableitet und nur bestimmte Dinge anpasst.
Eine Ableitung von Responsive ist wie bereits beschrieben für mich unschön gewesen, da ich sehr customized Layouts umsetze und wenn man erst den ganzen CSS Kram mitschleift, dann überschreiben muss um seine eigenen CSS Angaben wirksam zu machen finde ich das nicht performant und ist auch einfach nicht mein Stil.
Das man JS Funktionen überscheiben kann ist ja gut und funktioniert auch, aber die CSS Daten lassen sich halt nicht ersetzen. Sie werden, bei Ableitung von Responsive, vom Responsive Theme ausgeliefert und müssen zwangsläufug überschrieben werden, was außerdem eine zeitintensive Nummer ist.
Da ich das Entwicklerhandbuch mittlerweile besitze macht es wohl mehr Sinn solche Templateanpassungen bzw. eine eigenes Theme in Zukunft als Plugin umzusetzen.
Danke auch für die Links, die ich alle kenne und bereits geöffnet hatte und dann aber auch festgestellt habe, dass keiner dieser Links ein Vorgehen für ein Ersetzen der CSS Dateien beschreibt. Das beschriebene Vorgehen ist immer mit dem Überschreiben vorhandener Styles verbunden.
Wenn ich falsch liege lasse ich mich gerne korrigieren.
Eine Ableitung von Responsive ist wie bereits beschrieben für mich unschön gewesen, da ich sehr customized Layouts umsetze und wenn man erst den ganzen CSS Kram mitschleift, dann überschreiben muss um seine eigenen CSS Angaben wirksam zu machen finde ich das nicht performant und ist auch einfach nicht mein Stil.
Das man JS Funktionen überscheiben kann ist ja gut und funktioniert auch, aber die CSS Daten lassen sich halt nicht ersetzen. Sie werden, bei Ableitung von Responsive, vom Responsive Theme ausgeliefert und müssen zwangsläufug überschrieben werden, was außerdem eine zeitintensive Nummer ist.
Da ich das Entwicklerhandbuch mittlerweile besitze macht es wohl mehr Sinn solche Templateanpassungen bzw. eine eigenes Theme in Zukunft als Plugin umzusetzen.
Danke auch für die Links, die ich alle kenne und bereits geöffnet hatte und dann aber auch festgestellt habe, dass keiner dieser Links ein Vorgehen für ein Ersetzen der CSS Dateien beschreibt. Das beschriebene Vorgehen ist immer mit dem Überschreiben vorhandener Styles verbunden.
Wenn ich falsch liege lasse ich mich gerne korrigieren.
Beste grüße auch
Elmar
Hallo,
ich glaube eher, die „zeitintensivere Nummer“ ist es, vom Bare - Theme abzuleiten (das wird dir auch jeder Shopware - Mitarbeiter bestätigen). Wenn du nicht vom Responsive Theme ableitest, hast du somit ja auch nicht alle JavaScript - Dateien dabei, du müsstest also alle Effekte selbst entwickeln (Bild Slider, Zoom Effekt, etc), und dies steht ja ansich in keiner Relation zum Überschreiben von JavaScript oder CSS-Anpassungen.
Und sich die JavaScript-Dateien einfach aus dem Responsive Theme in das eigene Theme zu kopieren wäre ja kompletter Schwachsinn und zu 0% updatesicher und das schlimmste, was man dem Shopbetreiber antun könnte.
Die Updatesicherheit ist genau das Thema weshalb solche Umsetzungen wohl besser über ein Plugin gelöset werden sollte. Und ich sage ja auch, dass man JavaScript Funktionen updatesicher überschreiben bzw. anpassen kann. Aber mir ist der CSS Teil wichtig. Bisher habe ich noch keine Lösungsansätze gefunden wie man von Responsive ableitet aber die CSS Dateien nicht bzw. nur teilweise mitschleift. Wenn ich tpl Dateien nicht per extends einbinde werden die Parentdateien ja auch komplett überschrieben.
Da die Updates ja immer sowohl das System als auch die Themes gemeinsam betreffen ist die Updatesicherheit m.E. nie gegeben. Auch bei kleinen Änderungen durch ein abgeleitetes Theme können Updates das abgeleitete eigene Theme zerstören. Eine Trennung nach System-Core Updates und Theme Updates wäre für mich zielführender. Ich kann aber nicht beurteilen ob dies im Falle Shopware überhaupt möglich wäre.