Eigenschaft / Option: Freitextfeld im Frontend anzeigen

Hallo,

eine Frage von einem Shopware Frischling und Umsteiger von Magento :slight_smile:

Ich würde gerne das Freitextfeld, das ich unter den Eigenschaften einer Option zugewiesen habe auf
der Produktdetailseite im Frontend unter dem Reiter Eigenschaften anzeigen lassen.

Beispiel:

Aktuell steht dort
Material | Baumwolle

ich möchte gerne 
Material | Baumwolle | Hier kommt der Erklärungstext aus dem Freitextfeld der Option „Baumwolle“

Ist das möglich, habt ihr einen Tipp für mich?
(wahrscheinlich Änderungen im Template notwendig, denke ich)

Danke
Peter

(wahrscheinlich Änderungen im Template notwendig, denke ich)

Hast recht :slight_smile: musst Du dir die Anleitungen auf developers.shopware.com anschauen oder das Buch von Daniel Noegel https://www.rheinwerk-verlag.de/shopware\_4185/ anschaffen. Aller Anfang ist schwer - aber es lohnt sich!

Viel Erfolg,

Geert 

So was ähnliches habe ich letztens auch probiert und war teilweise auch nah dran, aber da musste dann doch jemand anderes ran. Jemand mit Plan.

Thx 2 Professor! Wink

Das war seine Lösung:

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

    {* Product description *}
    {block name='frontend_detail_description_text'}
    
        
          
 	            {foreach $sArticle.sProperties as $myProperty} {*Loop all sProperties*}
 	              {foreach $myProperty.options as $myOption} {*Loop all options*}
		            {if $myOption.attributes.core} {*Only if present, otherwise get() throws an error*}
		              {$myOption.attributes.core->get('YOUR-DB-FIELD-NAME')} {*That's the text! It comes already in tags*}
		            {/if}
 	              {/foreach}
 	            {/foreach}
           
    {* Eigentliche Artikelbeschreibung *}
    {$sArticle.description_long}
        
    {/block}

Hier wird die Infos halt oben angezeigt. Hoffe, das hilft Dir trotzdem weiter?

1 „Gefällt mir“

Vielen Dank, das war für mich die Lösung. Muss mich noch ein bisschen in die Struktur und Syntax einarbeiten,
aber es hat im Prinzip schon funktoniert.
Bei mir war es die Datei properties.tpl im tabs Ordner, da ich das Gravety Theme nutze.

Tolles Forum  Smile

 

 

Hallo Murmeltier, hallo anisch,

ich bin mir nicht 100%ig sicher, ob das hier die richtige Baustelle ist, aber ich versuche etwas Ähnliches. Habe Artikel mit Varianten und dafür Konfigurationssets erstellt.
Ich würde sehr gerne abhängig von der gewählten Farbe verschiedene Pflegehinweise auf der Artikeldetailseite anzeigen.
Nun dachte ich, es wäre schlau, dafür die Freitextfelder an den Optionen zu verwenden. Also bildhaft:

Habe also das Template frontend/detail/tabs/description.tpl entsprechend der Vorgaben erweitert.
Aber wenn ich mir im Template mit Smarty {debug} die Variablen ausgeben lasse, finde ich überhaupt keine $sArticle.sProperties; also wird natürlich auch nichts angezeigt.
Habe ich etwas vergessen oder bin ich an der falschen Stelle?

Hallöle,

eigentlich hast du alles richtig gemacht, bei mir funktioniert das wunderbar.
Aber wie gesagt, ich musste die  properties.tpl im d etail/tabs Ordner modifizieren.
Vielleicht ist das auch deine Baustelle?

Bei mir sieht das so aus:

{* Property content *}                            
                            {block name=‚frontend_detail_description_properties_content‘}
                                    {foreach $sProperty.options as $myOption} {*Loop all options*}
                                    {if $myOption.attributes.core} {*Only if present, otherwise get() throws an error*}
                                    {$sProperty.options|escape} {$myOption.attributes.core->get(‚beschreibung‘)}
                                    {/if}
                                {/foreach}
                            {/block}

 

Das Freitextfeld hab ich „beschreibung“ benannt.
Vielleicht hilft dir das weiter:

Grüße
Peter

Hallo Peter,
vielen Dank für deine Antwort - echt klasse, daß das hier im Forum so super funktioniert.
Aber um ganz ehrlich zu sein, sie hat mich auch etwas verwirrt. In meinem Bare-Template gibt es keine properties.tpl.

Vielleicht ist es ganz gut - und für jeden anderen Leser auch hilfreich, wenn ich das ganze einfach nochmal komplett durchexerziere. Denn genau das habe ich jetzt getan.

Fangen wir im Backend an. Ich habe in der Freitextverwaltung die Datenbank s_article_configurator_options_attributes ausgewählt:

Dann habe ich dort das gewünschte Freitextfeld eingerichtet:

Und dann habe ich es mit einem Beispieltext als Inhalt gefüllt - das ist ja der Text, den ich dann am Ende in der Artikeldetailsicht im Frontend ausgeben und anzeigen will.

Zur Sicherheit - damit nicht an der Stelle etwas schief geht, habe ich mich dann mit der Datenbank verbunden und nachgeschaut ob das entsprechende Feld angelegt wurde:

Und ob der gewünschte Inhalt drin steht:

Das sieht ja dann soweit alles gut aus.

Nun suche ich im Bare-Theme die entsprechende Template-Datei, die ich dann in meinem Theme extenden will. Der Ordner sieht bei mir so aus:

Es gibt keine properties.tpl , aber in der description.tpl gibt es die passenden Blöcke. Als wechsle ich in mein Template und lege dort im Ordner frontend/detail/tabs eine description.tpl an und schreibe den gewünschten extend-Code hinein.

Und jetzt sollte ich in der Außenansicht etwas sehen (ja, schon klar, neu laden, Cache leeren etc.).
Geht aber nicht.

Für weitere Hiweise bin ich echt dankbar. Ich werde mich auf jeden Fall auch weiter schlau machen.
Und natürlich am Ende die Lösung hier darlegen. Denn es muß eine geben.

Guten Morgen @drSWAdmin‍,

für die Properties müsstest du eine dieser Tabellen nutzen:

Die Konfigurator Tabellen beziehen sich auf die Varianten…

Guten Morgen @karlharris‍,

vielen Dank für diesen Hinweis. Das heißt also, daß ich mit den falschen Template-Variablen arbeite. Denn ich möchte ja schon den Text an den Varianten haben. Also anders gewendet: Ich möchte schon gerne die Tabelle s_article_configurator_options_attributes verwenden, weil das ist doch schon jene, in die geschrieben wird, wenn ich die oben erwähnten (#Comment_236378) Freitextfelder an den Varianten anlegen will.
Was ich also benötige, sind die Namen der hierfür passenden Template-Variablen. Trial and error hilft hier nicht weiter und eine Liste habe ich unter https://developers.shopware.com/developers-guide/ bislang nicht gefunden. Da werde ich wohl wirklich die einzelnene Schritte aus dem Quelltext herausfinden müssen.

Jedenfalls vielen Dank für die Hilfe!

Karlharris hat recht,  s_filter_values_attributes  ist die richtige Tabelle.
Damit kannst z.B. zur Eigenschaft „Farbe“–>„Rot“ den Freitext „Rot ist schön“ und zur Eigenschaft „Farbe“–>„Blau“ den Freitext „Blau macht lustig“ hinterlegen :slight_smile:

Du vergibts die Freitexfelder nicht Richtig. Für die Ausgabe der Eigenschaften musst du im Backend über den Menüpunkt " Artikel > Eigenschaften " gehen

Dort legst du das richtige Freitextfeld für zb die Eigenschaft “rot” an oder wie Bereits gesagt. in der Freitextfeld - Verwaltung ( Eigenschaften - Option (s_filter_values_attributes) )

Hier mal ne kurze Anleitung.

1.  Freitextfeld anlegen Eigenschaften - Option (s_filter_values_attributes)

  1. Eine Datei im eingenen Template mir den Namen " description.tpl " anlegen.

  2. Extenden {extends file=“parent:frontend/detail/tabs/description.tpl”}

  3. Den richtigen Block verwenden in dem fall “frontend_detail_description_properties_content” .  Der Code hier ist etwas Sauberer er verwendet eine Schleife weniger weil sich der Block bereits in einer schleife befindet zudem erstellen wir eine Variable  $pflegehinweis  zur besseren weiterverwendung.

 

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

 {* Property content *}
{block name='frontend_detail_description_properties_content'}
{$sProperty.value|escape} 
{foreach $sProperty.options as $option} 
{if $option.attributes.core} 
{assign var=pflegehinweis value=$option.attributes.core->get('pflegehinweis')} 
{* Variable $pflegehinweis steht dir nun zur ausgabe bereit *} 
{$pflegehinweis} {/if} {/foreach} 
 {$smarty.block.parent}
    {/block}

 

Die Codeschnippsel werder hier Zerhackt :frowning: hier nochmal als einfach text 

 

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

{* Property content *}

{block name=‘frontend_detail_description_properties_content’}

{$sProperty.value|escape}

{foreach $sProperty.options as $option}

{if $option.attributes.core}

{assign var=pflegehinweis value=$option.attributes.core->get(‘pflegehinweis’)} {* Variable $pflegehinweis steht dir nun zur ausgabe bereit *}

{$pflegehinweis} {/if} {/foreach}

|

{$smarty.block.parent}

{/block}

Hallo @plufri, @karlharris und @anisch,

zunächst einmal vielen Dank für eure Mithilfe! Schön, daß dieses Forum so aktiv ist.
Und ja, so funktioniert es auch.
Damit jeder Forenleser von diesem Thread etwas hat, hier das ganze Vorgehen in einer Übersicht.

(1) Eigenschaft anlegen via Artikel > Eigenschaften. Ein Set hinzufügen und per Drag&Drop eine Gruppe zuordnen.

(2) Ist eine Gruppe selektiert können rechts die Optionen bearbeitet werden. Dort steht auch ein Freitextfeld zur Verfügung.

(3) Nun muß das natürlich mit dem Artikel verknüpft werden. In Artikeldetails unter dem Tab Eigenschaften das gewünschte Set auswählen und die Eigenschaft zuweisen.


(4) Den Code von plufri (#Comment_236616) in das (eventuell zu erzeugende) Template description.tpl im Ordner /themes/Frontend/YourThemeHere/frontend/detail/tabs einbauen.

(5) Sich im Frontend auf der Artikeldetailseite unter dem Bild im Tab Beschreibung über die Ausgabe freuen.

Fertig  Thumb-Up

So funktioniert es und so kann man es machen.
Aber all dies beantwortet nicht meine ursprüngliche Frage, wie man diese Freitextfelder im Frontend ausgeben kann.

Wenn ich dafür eine Lösung habe, werde ich natürlich die Anleitung hier veröffentlichen.  Grin

Ist im Prinzip das gleiche. Für Varianten kannst zb die Datei {extends file=„parent:frontend/detail/config_variant.tpl“} verwenden

Vorab sollstet du für mein Bsp. ein Textfeld anlegen in " Konfigurator Option (s_article_configurator_options_attributes) " mit dem Namen " example "

Du solltet bei den Varianten aber wissen was du machst. Du zerschießt dir wenn du keine Ahnung hast , den Code. Nur zum Anzeigen kannst Das Code Snipplet Verwenden . An der Passenden stelle innerhalb der foreach schleifen Positionieren zb. unter in ( zeile 20 ) der  config_variant.tpl.  

{block name=‚frontend_detail_configurator_variant_group_options‘}

foreach $configuratorGroup.values as $option}

{if $option.attributes.core} {assign var=exmapleText value=$option.attributes.core->get('example')} {$exmapleText} {/if}

Das wird dir zwar die Anzeige etwas verhageln aber ist ja nur nen Bsp. Wenn du das Produktiv verwenden willst, solltet du mit Reversiver Logic Arbeiten und einen Block verwenden  wo du möglichst wenig " Schaden " :wink: anrichten kannst . Ein Guter Block dafür wäre zb. der Block {block name=‚frontend_detail_configurator_variant_group_option_label_text‘} Dieser block enthält nur 1 Wert ( {$option.optionname} ) . Beachte aber dieser befindet sich in einer {else} Schleife. Ist aber bereits in der Doppelschleife. Wenn man das Richtig machst, kanst du mit etwas Less Styling die Varianten zb so anzeigen. Und noch vieles mehr.

 

Hi plufri,

wow, das war ja eine superschnelle Antwort. Wollte das gleich mal ausprobieren und habe den Code in eine lokale Shopware-Installation direkt ins Bare-Template reinkopiert.
Ja, das mache ich live nicht - keine Sorge  Wink.
Ich bin Software-Entwickler und kenne mich mit PHP und Less aus, nur bin ich eben komplett neu bei Shopware, arbeite mich da ein. Und dieses Forum gefällt mir schon mal ausgesprochen gut.

Doch zurück: Da es in der Außenansicht nix angezeigt hat, habe ich einfach mal ein “Hallo123” ganz oben ins Template config_variant.tpl reingeschrieben. Passiert gar nichts. Finde auch nichts im Quelltext. Muß ich noch irgendwo eine Einstellung setzen, damit das Template überhaupt berücksichtigt wird?

Der Code wird in der config_variant.tpl ausgeführt und funktioniert. Ich bin jetzt mal davon Ausgegangen, das du für die Varianten den Bild Configurator benutzt hast. Wenn du Standart oder Auswahl gewählt hast ist ein andere Template Datei zuständig.

Da du ja über Kenntnisse in PHP verfügst, Empfehle ich dir das Entwickler Plugin von Shyim FroshProfiler dieses zeigt dir dann die verwendete Template Datei in den Entwickler-Tools deines Browsers als Kommentar an. Desweiteren ist eine Docker Umgebung mit Demo Daten sinnvoll.

Hallo @plufri,
vielen Dank für diesen Hinweis! Das beschleunigt mein Verständnis des Seitenaufbaus enorm. Sehr gutes Werkzeug.
Werde mich am Wochenende damit an die Arbeit machen und Ergebnisse dann hier bringen.
Und ja, du hattest recht, es liegt an der Wahl des Templates, denn ich hatte Standard gesetzt.

Prost Gemeinde!

Hier der versprochene Lösungsansatz. Es funktioniert und schaltet auch schön mit dem Farbwahl-Schalter um. Für Verbesserungsvorschläge bin ich selbstredend immer offen.
Ich habe mich entschlossen, den kleinen Text im Frontend direkt über den möglichen Freitexten anzuzeigen. Also unterhalb des “In den Warenkorb”-Schalters.

Zur Verdeutlichung habe ich auch gleich noch einen Freitext eingegeben. Das neue hier ist eben der Text für den Pflegehinweis.
Der Code sieht so aus, daß ich das Template /frontend/detail/content/buy_container.tpl im Block frontend_detail_data_attributes_attr1 erweitere. Und einen eigenen Textbaustein ConfiguratorOptionCareLabel angelegt habe.
Formatiert also so:

Und hier noch zum Kopieren:

   

       
            {s name=“ConfiguratorOptionCareLabel” namespace=“frontend/detail/index”}{/s}:
       

       
            {$sCountConfiguratorSelectedValue = $sArticle.sConfigurator.0.selected_value}
            {foreach $sArticle.sConfigurator as $sConfiguratorArray}
                {foreach from=$sConfiguratorArray.values key=k item=value}
                    {if $value.user_selected eq 1}
                        {if $value.attributes.core}
                            {assign var=pflegehinweis value=$value.attributes.core->get(‘pflegehinweis’)}
                            {$pflegehinweis|escape}
                        {/if}
                    {/if}
                {/foreach}
            {/foreach}
       
   

2 „Gefällt mir“

Haha, schön das sich daraus so ein spannender Thread ergibt und alle was dazu beitragen, klasse. Nur ein kleiner Tipp noch an alle; posted Eure Codebeispiele doch wirklich auch in der Codeansicht:

Ist wesentlich besser, als Screenshots aus dem Editor und damit kann man dann den Code auch schon rauskopieren etc.

 

Ich werde Code immer in die Codeansicht schreiben!';
    $i++;
}
?>