Neu JTL5 - NOVA: Eigene Seite über Artikelattribute im Tab einbinden

knackig

Sehr aktives Mitglied
17. November 2011
958
158
Nordhessen
Ich habe schon länger die Möglichkeit gesucht, eigene Seiten im Shop durch die tab1, tab2-Attribute über die Wawi einbinden zu können. Bspw für Informationen, die bei vielen Artikel abgelegt werden müssen/sollen. Bei der Umsetzung mit den Standardmitteln müsste man bei jeder Änderung des Inhalts die Ameise bemühen. Doch eine CMS-Seite anpassen ist einfacher, als Export, Bearbeiten, Import über die Wawi/Ameise.

In dem neuen NOVA-Template habe ich es mit geringer Templateanpassung nun endlich doch geschafft :thumbsup: . Falls es für jemanden interessant ist, hier meine Lösung:

  1. Eine gewöhnliche CMS-Seite anlegen
    Wichtig für die Attribute ist die ID.
  2. Einstellung in der Wawi:
    Die Attribute werden wie folgt in der Wawi angelegt:
    tab1 name = "cms_"+Name des Tabs (zB: Wenn "Anleitung" im Tab-Namen angezeigt werden soll: "cms_Anleitung")
    tab2 inhalt = ID der eigenen Seite im Shop (wird beim Bearbeiten des Seite ganz oben neben dem Namen angezeigt)
  3. Template-Anpassung
    Mittels Child-Template werden 2 Blöcke in der Datei /productdetails/tabs.tpl abgeändert. Hier der Inhalt der Child-Datei /productdetails/tabs.tpl:

    Code:
    {extends file="{$parent_template_path}/productdetails/tabs.tpl"}
    {block name='productdetails-tabs-tab-separated-tabs'}
    {foreach $separatedTabs as $separatedTab}
    {tab title=$separatedTab.name active=$setActiveClass.separatedTabs && $separatedTab@first id="{$separatedTab.id}"}
    {if $separatedTab.name|substr:0:4 == 'cms_'}
    {$separatedTab.name = $separatedTab.name|substr:4}
    {get_cms_content kLink=$separatedTab.content}
    {else}
    {$separatedTab.content}
    {/if}
    {/tab}
    {/foreach}
    {/block}
    
    {block name='productdetails-tabs-separated-tabs'}
    {foreach $separatedTabs as $separatedTab}
    {card no-body=true}
    {cardheader id="tab-{$separatedTab.id}-head"
    data=["toggle" => "collapse",
    "target"=>"#tab-{$separatedTab.id}"]
    aria=["expanded" => "{if $setActiveClass.separatedTabs && $separatedTab@first}true{else}false{/if}",
    "controls" => "tab-{$separatedTab.id}"]
    }
    {if $separatedTab.name|substr:0:4 == 'cms_'}
    {$separatedTab.name|substr:4}
    {else}
    {$separatedTab.name}
    {/if}
    {/cardheader}
    {collapse id="tab-{$separatedTab.id}" visible=($setActiveClass.separatedTabs && $separatedTab@first)
    data=["parent"=>"#tabAccordion"]
    aria=["labelledby"=>"tab-{$separatedTab.id}-head"]
    }
    {cardbody}
    {if $separatedTab.name|substr:0:4 == 'cms_'}
    {get_cms_content kLink=$separatedTab.content}
    {else}
    {$separatedTab.content}
    {/if}
    {/cardbody}
    {/collapse}
    {/card}
    {/foreach}
    {/block}
Wesentliche Änderung ist die folgende:
Statt der einfachen Ausgabe des Namens und des Inhalts wird erst geprüft, ob im Namen an den ersten 4 Stellen "cms_" vorkommt: {if $separatedTab.name|substr:0:4 == 'cms_'}
Falls ja, wird der Name um die ersten 4 Stellen gekürzt: {$separatedTab.name|substr:4}
Als Inhalt wird dann die CMS-Seite mit der im Attribut genannten ID abgerufen: {get_cms_content kLink=$separatedTab.content}
Das gleiche in 2 Blöcken, da es einmal für die Tab-Darstellung und einmal die Ohne-Tab-Darstellung (zB mobil) funktionieren soll.

Der Vorteil: Wenn Tab-Name nicht mit "cms_" beginnt, greift die Standard-Vorgehensweise. Also Name und Inhalt wie in der Wawi eingestellt.

Vielleicht hilft es jemandem weiter...
 

Ähnliche Themen