Ich brauche für eine Shopseite ein Custom-Template.
Dazu habe ich folgende Datei erstellt: MYTHEME/frontend/custom/about.tpl
Bei der Shopseite habe ich folgendes eingegeben: Tpl. Variable 1: sContent Tpl. Pfad 1: frontend/custom/about.tpl
Grundsätzlich funktioniert dies, wenn ich irgendetwas in der Datei eingebe, wird dies angezeigt im Frontend.
Was jedoch gar nicht funktioniert, ist das alle normalen Inhalte (wie z.B. die Menüs, das Logo, usw.) nicht angezeigt werden.
Als gäbe es die Variablen $sMenu (für die Menüs) und $theme (für z.B. das Logo) nicht.
Ich habe jetzt zum testen in der Datei about.tpl folgendes eingegeben:
{extends file=„parent:frontend/index/index.tpl“}
Auch folgendes habe ich schon probiert:
{extends file=„parent:frontend/custom/index.tpl“}
Immer werden die Menüs, das Logo usw. nicht angezeigt! Auch wenn ich andere bestehende Templates extende, die sonst funktionieren inklusive Menüs, Logo usw. funktioniert dies nicht.
Habe ich was übersehen oder vergessen?
Ich habe im eigenen Theme natürlich einige Änderungen vorgenommen. Wenn ich zum „Reponsive“-Theme wechsele, funktioniert alles einwandfrei.
Was könnte ich aber in meinem Theme gemacht haben, weil dies nicht funktioniert?
Eine MYTHEME/frontend/custom/index.tpl-Datei gibt es nicht und in der MYTHEME/frontend/index/index.tpl-Datei habe ich nur einige Blöcke ausgetauscht bzw. mit append und prepend erweitert.
Wenn ich aber in meine about.tpl file {extends file=„parent:frontend/index/index.tpl“} eingebe, sollte dies doch immer vom „Parent“ ausgehen?
(_Cache leer _und Templates neu kompilieren wurden bei jeder Änderung gemacht)
Bin aktuell auch bei diesem Problem angelangt. Wir haben ebenfalls eine Custom Shopseite angelget unter meinTheme/frontend/custom/about.tpl angelegt und dort unseren eingenen Code niedergschrieben.
Ich sehe das gleich wie V1nk0, das Verhalten wirkt als ob die Variabeln nicht vorhanden sind. Habe auch diverse Versuche unternommen um das Logo oder die Sidebar auszugeben. Dabei ist mir aufgefallen wenn ich im Custom Template z.B.
{* Sidebar left *}
{block name="frontend_index_content_left"}
{include file="frontend/index/sidebar.tpl"}
{/block}
einfüge wird zwar der Block für die Sidebar eingeüfgt aber der Inhalt nicht. Sobald ich den Include rausnehme wird er wie gewohnt weggelassen.
Ja und nein. Ich habe jedenfalls herausgefunden, warum dies nicht funktioniert.
Das eigene Template ( Tpl. Pfad 1 ) ersetzt NICHT den ganzen Template, sondern wird nur als Wert der Variable sContent ubertragen (hier könnte man wahrscheinlich jede beliebige Variable nehmen)
Sprich, das Template unter Tpl. Pfad 1 sollte nur als einfaches Snippet eingesetzt werden.
Ich habe es jetzt so gemacht, dass in der Datei index.tpl im eigenen Theme im Inhaltsbereich nur die Variable {$sContent} ausgelesen wird.
Hier wird dann der normale Inhalt eingegeben, oder, wenn ich für die Content-Seite eingebe:
Tpl. Var 1 = sContent
Tpl. Pfad 1 = pfad zum Custom Template-Snippet
den Inhalt des Custom-Template-Snippets (Tpl. Pfad 1)
Im Custom-Template-Snippet kann dann ebenfalls die Variable {$sContent} ausgelesen werden, die innerhalb des Custom-Template-Snippets den normalen Seiteninhalt beinhaltet (was im Editor eingegeben wurde)
Ganz schön kompliziert und möglich nicht mal einen offizielen Weg (wenn’s überhaupt einen gibt). Ich bekomme jedoch hin was ich brauche.
Wenn man einfach nur ein Dropdown-Menü hatte und hier eine eigene TPL-Datei auswählen konnte
In Shopware sollte man für die Shopseiten und Formulare scheinbar nur die gleichen Layouts machen
Wenn man nach den üblichen “Templating-Regeln” vorgeht, sollte es doch funktionieren die “frontend/custom/index.tpl” im eigenen Theme zu überschreiben bzw. zu kopieren, anzupassen und im Tpl. Pfad 1 anzugeben…
Ist das vielleicht was für den Issue Tracker, oder sind wir hier total auf dem falschen Dampfer?
Ja, diese Anleitung habe ich damals auch gefunden.
Was hier jedoch wichtig ist: beim 4. Schritt steht " wir löschen alles bis auf folgenden Code aus dem Template."
Hier bleibt dann nur mehr ein Snippet bleibt übrig ( keine Extends mehr )
Dieses Snippet kann man dann mit einer bestimmten Variable einbinden.
Im Beispiel der Anleitung wurden ja nur ein paar Blöcke oberhalb hinzugefügt (sprich: Snippet) und kein ganzes Template ersetzt.
Keine Ahnung, ich habe mich mit den Shopseiten nicht weiter beschäftigt, weil ich nicht durchgestiegen bin
Nur da hier im Zusammenhang von „Template-Dateien“ geschrieben wurde: Blöcke fangen mit {block} an und hören mit {/block} auf.
Snippets sind Textbausteine und fangen mit {s name="…"} an und hören mit {/s} auf.
Ich vermute mal: Dem Inhalt eine Blockes wird weiterer HTML-Code aus Deiner Template-Datei eingefügt, ohne die smarty-Überschreibung zu nutzen?
Code-Fragment oder so - glaube nicht, dass ich da gerade eine offizielle Bezeichnung hätte.
Was man bei Tpl. Pfad eingibt, ist ein Code-Fragment (nennen wir es mal so).
Wenn man macht was Du vorhast (und ich damals auch vorgehabt habe) extended man im Code-Fragment ein Template das aber bereits als Parent-Template verwendet wird.
Außerdem wird Shopware das Template wahrscheinlich nicht mit den Variablen außerhalb des Contentseiten-Scopes befüllen (was glaube ich der Grund ist, warum wir die leeren Variablen haben)
Du hast recht.
Rein vom Aufbau mit Tpl. Pfad 1-3 und Tpl. Variable 1-3 verfehlen die Shopseiten aber somit ihren Erweiterungszwecks.
Ich stell mir gerade nur noch die Frage, was die beste Lösung ist…
Wahrscheinlich nur mittels den Einkaufswelten, was ich schon versucht habe, aber auch wieder andere Probleme mit sich bringt… Wenn man in einer Einkaufswelt z. B. Reiter oder ein Akkordion einbauen möchte, funktioniert es nicht.
Die Anleitung hat einen kleinen Fehler:
Ihr müsst schon extenden - aber nicht von frontend/index/index.tpl sondern von parent:frontend/custom/index.tpl
Macht ja auch so Sinn, da Ihr somit ja die index.tpl aus dem Theme - und wenn es die eigene ist - ändert.
Geht dann so weiter, wie mit jeder Templateänderung. Suche den Block Deiner Wahl und bearbeite ihn. Gerade im Testhop gemacht - das Beispiel aus dem Blog.
Also erste Zeile:
Das Beispiel aus dem Blog funktioniert ja, aber ich glaube die machen etwas anderes.
Hier wird doch nämlich nicht der gesamte Custom-Seite ersetzt mit einem anderen Template, sondern oberhalb einfach etwas hinzugefügt?
Der Originalinhalt Shopseiteninhalt wird auch mit eingefügt, am Ende im Block mit {$sContent}
Ich weiss aber noch nicht 100%, wie der Ablauf genau ist, da man ja drei Templates angeben kann. Da müsste man das erste an das zweite an das dritte gerendert durchreichen. Da wäre extends aber fehl am Platz.
Sagen wir mal so: mit einem Template pro site geht es - den Inhalt positionierst Du ja selber mit {$sContent}
Wie das Ganze mit bis zu drei Templates gehen soll, müsste ich mir noch erarbeiten - brauch ich jetzt aber nicht für mich
Letztlich müsste sich dazu mal einer von SW äussern.
Ja genau, der Seiteninhalt kann man beeinflüßen / überschreiben / ersetzen / erweitern.
Was ich aber vorgehabt habe, bzw. wozu ich den Beitrag damals erstellt habe, ist um das ganze Template zu ersetzen.
Sprich: inkl. Header, Footer, Sidebar, etc. etc.
Quasi wie ein eigenes parent Template für bestimmte Shopseiten.
Aus anderen Systemen kenne ich einfach die Möglichkeit aus einer Liste mit Layouts auswählen zu können.
Leider ist diese Art von Customization in Shopware anscheinend gar nicht angedacht.
Ich habe bereits eine für mich halbwegs funktionierende Lösung gefunden in Zusammenarbeit mit Freitextfeldern.