Textbausteine

Guten Abend,

ich schaue nun eine ganze Weile, finde aber einfach nichts passendes.

Fange ich mit dem Beispiel an:

Ich habe mehrere Artikelgruppen mit ca. 2342134 Artikel pro Gruppe drin. Eine Gruppe ist „Flüssigkeiten“, die andere „Steine“ und so weiter.
Jetzt will ich in jeder Artikelbeschreibung einen Hinweistext „ACHTUNG“ hineinbringen. 
Nur das dieser Hinweistext je Artikelgruppe variieren kann. Zum Beispiel die Flüssigkeiten Artikel haben den Hinweis „Vorsicht, kann zu ertrinken führen“ in der Beschreibung, die Steine habenen das natürlich nicht drin, weil es Schwachsinn wäre. Die haben drin stehen „Macht aua wenn auf Fuß fällt“.
Soweit so gut.  Habe ich als Text drin stehen. 

Nun will ich aber den Text bei den Steinen ändern, weil Aua groß geschrieben werden soll. Das müsste ich nun bei jedem entsprechenden Artikel händisch machen.

Jetzt kam ich auf die Idee eine shopseite zu erstellen mit eben diesen Inhalt, eine weitere für die andere Artikelgruppe usw.
Gibt es eine Möglichkeit, nur den Content der Shopseiten einzubinden, meinetwegen als iframe ähnlich wie bei „zzgl. Versandkosten“ nur nicht als Modal-Box.
Mit einem iframe bekomme ich nur die komplette Seite inkl. Menüs und Heade usw. rein. 

Aber es muss doch eine solche Möglichkeit geben.

Danke schon einmal!

Du könntest dir den Inhalt über einen Textbaustein und ein Artikel Attribut holen:

Attribut anlegen und zB jedem Stein bei dem Attribut eine 1 eintragen, bei jedem Wässerchen eine 2 eintragen. 
Im Template sagst du dann per IF Abrage wenn 1 dann Textbaustein für Stein, wenn 2 Textbaustein für Wasser. So kannst du die Textbausteine dann auch über das Backend verwalten.

Ob das so nun klappt oder best-practice ist kann ich dir nicht sagen:

{if $sArticle.attr4 == 1}
{s name="DetailArticleStein" namespace="frontend/detail/data"}Lorem Lirum Stein{/s}
{/if}
{if $sArticle.attr4 == 2}
{s name="DetailArticleWasser" namespace="frontend/detail/data"}Lorem Lirum Wasser{/s}
{/if}

Aber als Richtung zum weiter probieren ;) 

Vielen Dank impuls,

leider nicht so, was ich es meinte bzw. gerne hätte. 
Ich will halt den Textbaustein innerhalb der Beschreibung plazieren und möglichst nicht an den Templatedateien fummeln.
Aber ich befürchte, dass ich so wie ich es haben will über eigene Seiten mit dem auszugebenen Inhalt und einem iframe lösen muss. 

Falls irgendwer noch eine Idee hat, bin ich gerne offen. 

 

Die Lösung von @impuls‍ ist best practice. Außerdem fummelst du nicht an den Templatedateien herum, sondern pflegst die Änderungen in dein eigenes Theme ein.

Kleiner Hinweis: Nachteil ist halt das man die Position nicht mitten in den Text packen kann, jedoch immer an das Ende der Artikelbeschreibung (oder an den Anfang). Noch vor den Links etc.

Klar. Du kannst aber immer noch Custom-Textparser erzeugen. 

@BestShopPossible schrieb:

Klar. Du kannst aber immer noch Custom-Textparser erzeugen. 

 

Und Zack hab ich ein dickes Fragezeichen über dem Kopf.

Ich bin nun kein „Coder“ vor dem Herren. 
Wir sind von einem anderen Shopsystem zu SW gewechselt, weil wir eben möglichst nicht mehr an den Dateien selbst fummeln wollten.

  1. Weil wir nichts „kaputt“ verbessern wollen und 2. - viel wichtiger - weil wir es eben nicht richtig können. Kleinigkeiten ja aber nur wenn wirklich nötig. 
    Dies scheint ein solcher Fall zu sein. 

Nun wäre es schön, wenn Du mir das mit den Textparser erläutern könntest  Wink

Danke auf jeden Fall für jegliche Hilfe

Naja, eigentlich würde ich das nicht empfehlen, aber ich denke mittels einer Smarty-Funktion sollte das machbar und nicht allzu schwer sein.

Grundsätzlich ist die Idee diese:

Du packst ein eigen erstelltes Tag (Textbaustein) innerhalb der Beschreibung an der gewünschten Stelle. Anstatt das Smarty nun sowas wie (Variablenname wahrscheinlich falsch) 

{$sArticle.description}

im Template ausgibt sitzt da noch dein Smarty-modifier dran. Den musst du halt schreiben. Der macht dann aber nichts anderes als diese Variable auszulesen und nach deinem Tag zu suchen. Sobald er das gefunden hat ersetzt er es mit dem Inhalt den du möchtest.

Smarty kann auch PHP-Funktionen nutzen evtl. funktioniert ja sowas schon?

{$sArticle.description|replace:'DetailArticleStein':'Lorem Lirum Stein'}

Dann würde alle Vorkommnisse von DetailArticleStein im Text mit Lorem lirum Stein ersetzen. Code aus dem Gedächtnis, nicht geprüft.

Geht eigentlich nur auf zwei Arten. 1. per Plugin die description auswerten und ergänzen oder 2. etwas im Theme basteln. Sei es über einen modifier, oder die Variable im Theme nicht sofort ausgeben, sonder per Include erst noch einmal durch Smarty rendern lassen. Syntax hab ich grad nicht parat, aber man kann es sich in den E-mail Templates abgucken. Damit kann man theoretisch vieles wie im Theme auch in der description machen, nicht ganz ohne Risiko. Ich würde mir eher einen Platzhalter erfinden und via Plugin die description “erweitern“.

Ganz ohne Basteln geht es nicht.

So weit mir bekannt ist kann man in den Shopware-tpls auch PHP-Funktionen in den Smarty-Bereichen nutzen.

Dadurch könntest du Platzhalter in deine Beschreibungstexte einbauen, welche dann vor der Ausgabe per str_replace mit dem Inhalt des Textbausteins ausgewechselt wird.

Musst du aber aufpassen, dass der Text nicht doch noch irgendwo erscheint, wo du nicht in die tpl eingegriffen hast, sonst stehen deine Platzhalter auf der Seite.

 

Alternativ wäre ein Freitextfeld anzulegen und diesem einfach eine Nummer zuzuweisen, über diese könntest du dann in der Artikeldetail-Seite abfragen, welcher Text angezeigt werden muss. Die Texte kannst du dann entweder in eine Datei auslagern oder in die tpl innerhalb eines IF-Else - Blocks schreiben.

Quick & Dirty im Template für drei Textbausteine: 

{extends file='parent:frontend/detail/tabs/description.tpl'}

{block name='frontend_detail_description_text'}
 {assign var="snippet1" value="{s name='mtext1' namespace='frontend/detail/myextracontent'}Lorem Ipsum eins{/s}"}
 {assign var="snippet2" value="{s name='mtext2' namespace='frontend/detail/myextracontent'}Lorem Ipsum zwei{/s}"}
 {assign var="snippet3" value="{s name='mtext3' namespace='frontend/detail/myextracontent'}Lorem Ipsum drei{/s}"}
 
	{$sArticle.description_long|replace:":TEXT1:":$snippet1|replace:":TEXT2:":$snippet2|replace:":TEXT3:":$snippet3}
 
{/block}

Platzhalter wären dann :TEXT1: , :TEXT2: , :TEXT3:

Die “Platzhalter” sollten natürlich soweit wie möglich hinten im Text sein, weil sie SO ja nur genau beim Produkt selber in der Produltbeschreibung ersetzt werden. An anderen Stellen wie ggf. meta-description, Textauszug im Listing etc. müsste das dann so auch angepasst werden.
Weiter: Es dürfen keine “Zeichenkettenbegrenzungszeichen” im Textbaustein sein, weil sie eben obigen Code “zerstören” können und zum “Ups” führen.
Wenn also " oder ’ dann maskiert als HTML-Entity

nach dem ersten Aufruf einer Seite erscheinen die Textbausteine als mtext1 mtext2 und mtext3 unter frontend/detail/myextracontent (namespace)

Nicht sauber, wäre aber ein erster Ansatz  Wink

Man könnte ggf. auch weiter “früher” im Template den replace gleich wieder der $sArticle.description_long zuweisen, dann hätte man “später” im Template beim Artikel zumindest immer die ergänzte Description.

Edit: geht auch so:

{extends file='parent:frontend/detail/index.tpl'}

{block name="frontend_index_start"}
{assign var="snippet1" value="{s name='mtext1' namespace='frontend/detail/myextracontent'}Lorem Ipsum eins{/s}"}
{assign var="snippet2" value="{s name='mtext2' namespace='frontend/detail/myextracontent'}Lorem Ipsum zwei{/s}"}
{assign var="snippet3" value="{s name='mtext3' namespace='frontend/detail/myextracontent'}Lorem Ipsum drei{/s}"}
{$sArticle.description_long=$sArticle.description_long|replace:":TEXT1:":$snippet1|replace:":TEXT2:":$snippet2|replace:":TEXT3:":$snippet3}
{$smarty.block.parent}
{/block}

 

1 „Gefällt mir“

Also schon mal vielen Dank Euch allen.

 

Mir qualmt gerade der Kopf  Wink

Ich werde nächste Woche erstmal Urlaub machen und danach das ganze noch einmal frisch erholt angehen. 
Also haltet Euch bereit  Grin

Ich gehe ab Freitag eh auch für drei Wochen auf Tauchstation - und zwar wörtlich *grins* - schönen Urlaub.

1 „Gefällt mir“