Wie eigenen Tab auf der Artikeldetailseite ausblenden, wenn dieser leer ist?

Hallo,

nachdem mir beim letzten mal so toll geholfen wurde, muss ich hier schon wieder um Hilfe bitten.

Ich habe einen eigenen Tab auf der Artikel Detailseite erstellt und befülle diesen mit definierten Inhalten von Artikeln.

Nun ist es so, dass ich hier zwei Variablen abfrage, ob diese Vorhanden sind oder nicht.
Sind diese nicht da, bleibt der Tab, wie gewünscht, leer.

Allerdings schaffe ich es hier nicht den Tab komplett auszublenden, wenn dieser keinen Inhalt hat.

Ich vermute, dass die Tabs vorher bereits voher gerendert werden und sich daher nicht so einfach ausblenden lassen, wie ursprünglich von mir erhofft.

Mein Versuch, das Thema mittels Plugin zu bewerkstelligen scheitert schon daran, dass es bei „Plugin wird installiert“ endlos kreiselt und nicht fertig wird.

Der Inhalt meines Pluginordners „DisableEmptyTab“ sieht so aus:
DisableEmtptyTab.php

<?php

namespace DisableEmptyTab;

use Shopware\Components\Plugin;
use Shopware\Components\Plugin\Context\InstallContext;
use Shopware\Components\Plugin\Context\UninstallContext;

class DisableEmptyTab extends Plugin
{
    public function install(InstallContext $context)
    {
        $this->createController('Frontend', 'DisableTabController');
        parent::install($context);
    }

    public function uninstall(UninstallContext $context)
    {
        parent::uninstall($context);
    }
}

Dann habe ich einen Ordner „Controllers“ erstellt, darin enthalten ein weiterer Ordner „Frontend“ und darin meine „DisableTabController.php“

<?php

use Shopware\Components\Controller\Frontend\AbstractController;

class DisableTabController extends AbstractController
{
    public function detailAction()
    {
        $article = $this->get('sArticle');

        if (!empty($article['supplier_attributes']['core']['weee']) || !empty($article['solarinfo'])) {
            $showTab = true;
        } else {
            $showTab = false;
        }

        $this->View()->assign('showTab', $showTab);
        // Hier weitere Variablen an Smarty übergeben, falls nötig.

        // Führe die normale Detail-Action aus, um die Artikeldetailseite anzuzeigen.
        return parent::detailAction();
    }
}

Erkennt einer von Euch Profis, was ich hier vergeigt habe? Ich gestehe, dass ich von der Plugingeschichte echt keinen Plan habe und hier versuchte mir aus Beispielen etwas zusammenzubauen.

Vielen Dank und Gruß,
Tom

Interessanter wären da die Template-Dateien :wink:
Wie Du in den Details an Dein „weee“ kommst, hatten wir ja eigentlich schon geklärt.
Das „If - Gedöns“ im Controller kannst Du auch gleich ins Template setzen - dafür brauchst Du keinen Controller.

Ich hole mir meine Tabs aus „Content Types“, die ich via Freitext im Artikel zuweise. Ist das leer, habe ich auch keine (eigenen) Tabs.

Interessanter wäre es also zu wissen, wie Du wo die Tabs generierst.

Huhu zurück sonic :wink:

Ja, die WEEE Nr. soll jetzt an eine andere Stelle verfrachtet werden. :sweat_smile:

Also, zuerst habe ich eine tabs.tpl in /themes/Frontend/[ownTheme]/frontend/detail/ mit folgendem Inhalt angelegt:

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


{* New tab *}
{block name="frontend_detail_tabs_description" append}
        <a class="tab--link" title="{s namespace="frontend/detail" name='NewTabsDescription'}{/s}" href="#">{s namespace="frontend/detail" name='NewTabsDescription'}{/s}</a>
{/block}

{* New Tab container *}
{block name="frontend_detail_tabs_content_description" append}
        <div class="tab--container">
            <div class="tab--header"><a class="tab--title" title="{s namespace="frontend/detail" name='NewTabsDescription'}{/s}" href="#">{s namespace="frontend/detail" name='NewTabsDescription'}{/s}</a></div>
            <div class="tab--preview">{$sArticle.attr4|strip_tags|truncate:100: '...'}<a href="#" class="tab--link" title="{s name="PreviewTextMore"}{/s}">{s name="PreviewTextMore"}{/s}</a></div>
            <div class="tab--content">{include file="frontend/detail/tabs/custom_tabs.tpl"}</div>
        </div>
{/block}

Dann gibt es eine weitere Datei namens custom_tabs.tpl in /themes/Frontend/[ownTheme]/frontend/detail/tabs/ mit folgendem Inhalt:

{namespace name="frontend/detail/tabs/custom_tabs"}

<div class="buttons--off-canvas">
    <a class="close--off-canvas" href="#">
        <i class="icon--arrow-left"></i>
        Zurück
    </a>
</div>

    <div class="content--description">
        {* Product description *}
        {block name='frontend_detail_description_text'}
            
            {if $sArticle.supplier_attributes.core.weee}
            <li class="base-info--entry entry--suppliernumber">
                <strong class="entry--label">
                    WEEE-Reg.-Nr.:
                </strong>
                <span class="entry--content">
                    {$sArticle.supplier_attributes.core.weee|escape}
                    <p align="justify">
                        Bissl Text zur WEEE Nummer        
                    </p>
                </span>
            </li>
        {/if}
        
        {if $sArticle.solarinfo}
            <span class="entry--content">
            <br />
                <strong>Inhalt Überschrift</strong><br />
                <p align="justify">
                    Und etwas Text
                </span>
        {/if}
   {/block}
</div>

Wie bereits geschrieben, sind die beiden Variablen leer, wird trotzdem noch der zusätzliche Tab, natürlich ohne Inhalt, angezeigt.

Selbst wenn ich das hier in der tabs.tpl versuche, hat es keinen Einfluss:

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

{if $sArticle.supplier_attributes.core.weee || $sArticle.solarinfo}

{* New tab *}
{block name="frontend_detail_tabs_description" append}
        <a class="tab--link" title="{s namespace="frontend/detail" name='NewTabsDescription'}{/s}" href="#">{s namespace="frontend/detail" name='NewTabsDescription'}{/s}</a>
{/block}

{* New Tab container *}
{block name="frontend_detail_tabs_content_description" append}
        <div class="tab--container">
            <div class="tab--header"><a class="tab--title" title="{s namespace="frontend/detail" name='NewTabsDescription'}{/s}" href="#">{s namespace="frontend/detail" name='NewTabsDescription'}{/s}</a></div>
            <div class="tab--preview">{$sArticle.attr4|strip_tags|truncate:100: '...'}<a href="#" class="tab--link" title="{s name="PreviewTextMore"}{/s}">{s name="PreviewTextMore"}{/s}</a></div>
            <div class="tab--content">{include file="frontend/detail/tabs/custom_tabs.tpl"}</div>
        </div>
{/block}

{/if}

Danke, Tom