Großes Templating Problem!?

Ich bin dabei das Template daraufhin zu untersuchen, wie man das anders gestalten kann, und bin dabei erst einmal auf ein großes Problem gestoßen. Beispiel: ich möchte den Warenkorb, der im Standard Template ja im Header liegt, in die Linke Navi-Spalte verlagern. Definiert ist dieser Warenkorb in “frontend/index/checkout_actions.tpl”. Da ich solche Template-Blöcke gerne in separate Dateien verlagere ( “Boxen” (ja, das ist das gute, alte xtCommerce “Boxen”-Modell…)), um sie beliebig positionieren zu können, habe ich dann das Warenkorb-HTML in die Datei “frontend/_boxes/box_CART.tpl” verlagert, und in “frontend/index/checkout_actions.tpl” mit “{include file=‘frontend/_boxes/box_CART.tpl’}” (erst mal) wieder an die gleiche Stelle eingebunden… Der HTML-Code wird auch schön übernommen, ich habe dann aber das [color=#FF0000]große [/color]Problem, dass die verwendeten Texte nicht mehr gefunden, und dann z.B. als “#IndexLinkCart#” statt “Warenkorb” angezeigt werden. Die Analyse der kompilierten Templates zeigt die Ursache des Problems: der “Namespace”, für den der Text definiert ist! In der Original-Variante übergibt Smarty beim Aufruf zur Ermittlung des Textes den Namespace “frontend/index/checkout_actions” (unter dem der Text wohl gespeichert ist), die geänderte Variante aber “frontend/_boxes/box_CART”, so dass der Text nicht mehr gefunden wird! Die 1 Million Euro Frage ist nun: Wie finde ich denn die Texte unabhängig davon, in welcher Template-Datei die verwendet werden??? Ich kann (und will!) mir nicht vorstellen, dass man z.B. den Warenkorb nur im Context von “frontend/index/checkout_actions.tpl” positionieren kann, das wäre gar zu limitierend für das Templating…

Das dürfte doch recht einfach zu lösen sein. Geh ins backend, Einstellungen/Textbausteine/Neue Templatebasis, dort in den frontend/index Ordner, dort legst du einen neuen Textbaustein mit dem richtigen Link zum Warenkorb an. Grüße Frank

[quote=„taaucher“]Das dürfte doch recht einfach zu lösen sein. Geh ins backend, Einstellungen/Textbausteine/Neue Templatebasis, dort in den frontend/index Ordner, dort legst du einen neuen Textbaustein mit dem richtigen Link zum Warenkorb an. Grüße Frank[/quote] Ich will ja keine neuen anlegen, sondern die existierenden verwenden.

Hallo, den existierenden wirst Du wahrscheinlich nicht mehr verwenden können. Bei mir war es so das der Shop immer automatisch einen neuen Textblock unter der verwendeten ID angelegt hat den man dann erst wieder füllen musste.

[quote=„Porter“]Hallo, den existierenden wirst Du wahrscheinlich nicht mehr verwenden können. Bei mir war es so das der Shop immer automatisch einen neuen Textblock unter der verwendeten ID angelegt hat den man dann erst wieder füllen musste.[/quote] Aus Template-Entwickler-Sicht ist das total praxisfremd… Ich muss in der Lage sein, irgendwelche HTML-Schnipsel des existierenden Templates irgendwo in den Shop zu packen, ohne dann (schon vorhandene) Texte neu definieren zu müssen. Mir erschließt sich auch der Sinn nicht so recht, warum man die Texte an einen Namespace bindet… Wenn man dasselbe Wort 10 mal in verschiedenen Template-Dateien verwendet, muss das ja dann wohl 10 mal im System eingetragen werden… [color=#FF0000]Da muss dringend eine andere Lösung gefunden werden… [/color] Entweder man liest die Texte ohne Namespace-Bezug aus. Oder man stellt eine Smarty-Funktion bereit, mit der man den Namespace in einer Template-Datei definieren kann: {namepace name=„frontend/index/checkout_actions“} auch wann man sich z.B. in der Template-Datei „frontend/_boxes/box_CART.tpl“ befindet (was normalerweise den Namespace „frontend/_boxes/box_CART“ referenziert). Oder irgendwas anderes… Das jetzige Konzept ist für umfassendere Layout-Änderungen m.E. nicht brauchbar, da zu aufwändig in Bezug auf die Definition von Texten. Aber ich bin eigentlich sehr zuversichtlich, dass die Shopware AG das schnell lösen kann.

Moin, die S und SE Blöcke haben einen Namespace-Parameter, du kannst also z.B. {s name=“xy” namespace=“a/b/c”} schreiben, um zu verhindern, dass die Bausteine neu erzeugt werden. Das sollte so eigentlich funktionieren. Ansonsten schauen wir uns das Thema Textbausteine aber diese Woche sowieso nochmal an…

[quote=“Stefan Hamann”]Moin, die S und SE Blöcke haben einen Namespace-Parameter, du kannst also z.B. {s name=“xy” namespace=“a/b/c”} schreiben, um zu verhindern, dass die Bausteine neu erzeugt werden. Das sollte so eigentlich funktionieren. Ansonsten schauen wir uns das Thema Textbausteine aber diese Woche sowieso nochmal an…[/quote] Moin. Hoffe, Du hattest einen schönen Urlaub… Ich wusste doch, dass Du das in “nullkommanix” löst… Das ist doch schon mal was… Schöner wäre es allerdings, wenn man das nicht bei jedem “s” definieren müsste, sondern der gesamten Templatedatei einen anderen Namespace verpassen könnte… So was wie {namepace name="frontend/index/checkout\_actions"} (Ja, ich weiß, ich bin faul, aber das soll Software ja unterstützen… :sunglasses: ) Was ist eigentlich der Vorteil dieser Namespace-Bindung der Texte? Mit ist dazu bisher nichts Rechtes eingefallen. Am Besten wäre es m.E. aber, wenn man diese Namespace-Bindung der Texte aufheben würde, dann kann man die nach Belieben verwenden.

Moin, ja, Urlaub war super :wink: Naja, wenn man die Namespaces je Template-Datei definieren würde, könnte man dort ja nicht Teile anderer Templates integrieren, ohne die Bausteine dann teilweise neu erstellen zu müssen. Klar, wenn man ausschließlich bestehende Dateien ersetzen möchte, würde das so gehen - wenn man aber neue Template-Dateien erstellt, die Komponenten aus mehreren, bestehenden Template-Dateien beeinhalten, würde das ja wieder zu Kollisionen führen. Wir hatten die Namespaces eingeführt, damit sich die Bausteine einfacher organisieren lassen und man im Backend eine gruppierte Übersicht der Bausteine erhält. Dass das im Praxisbetrieb so nicht die optimale Lösung ist, sehe ich aber ein :wink: Mal schauen, da fällt uns bestimmt eine (generelle) Lösung ein.