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 Like

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 Likes

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++;
}
?>