Fügen Sie der Registerkarte „Beschreibung“ von „product.info.tabs“ einen untergeordneten Block hinzu

magento.stackexchange https://magento.stackexchange.com//questions/36402

Frage

Ich verwende Registerkarten für meine Produktansichtsseite.In meiner local.xml habe ich Folgendes:

<catalog_product_view>
    <reference name="product.info">
        <block type="catalog/product_view_tabs" name="product.info.tabs" as="info_tabs"
                           template="catalog/product/view/tabs.phtml">
            <action method="addTab" translate="title" module="catalog">
                <alias>description</alias>
                <title>Description</title>
                <block>catalog/product_view_description</block>
                <template>catalog/product/view/description.phtml</template>
            </action>
            <action method="addTab" translate="title" module="catalog">
                <alias>videos</alias>
                <title>Videos</title>
                <block>catalog/product_view_attributes</block>
                <template>catalog/product/view/videos.phtml</template>
            </action>
        </block>
    </reference>
    <reference name="product.description">
        <block type="core/template"
               name="namespace.inline"
               as="namespace_inline"
               template="catalog/view/gallery/inline.phtml" />
    </reference>
</catalog_product_view>

In meiner Datei „catalog/product/view/description.phtml“ steht Folgendes:

<?php echo $this->getChildHtml('namespace_inline') ?>

Die untergeordnete Vorlage wird jedoch nicht gerendert.

Ich habe versucht, zum Standarddesign zu wechseln, und es funktioniert, aber das Standarddesign verwendet keine Registerkarten.

Stimmt etwas mit dem Mage_Catalog_Block_Product_View_Tabs-Block, der es nicht zulässt, dass er untergeordnete Blöcke hat?

War es hilfreich?

Lösung

Sie fügen Ihren Block in einen Referenzblock ein.Da der übergeordnete Block Ihres benutzerdefinierten Blocks ein Referenzblock ist, muss dieser Block definiert werden, bevor er an einer anderen Stelle referenziert wird.

Sie sagten, wenn Sie es im Basisthema ausprobieren, funktioniert es.Aber in Ihrem benutzerdefinierten Theme funktioniert es nicht.Daher bin ich fest davon überzeugt, dass das Basisthema Blockdefinitionen enthält product.description drinnen ist es catalog.xml Layoutdatei.Ihr benutzerdefiniertes Design verwendet jedoch nicht diesen Namen für diesen Block, sondern möglicherweise einen anderen Namen.

Sie müssen den Namen des Blocks ermitteln catalog.xml Datei (in Ihrem benutzerdefinierten Design), indem Sie auf ihren Typ verweisen.(Im Basisthema und benutzerdefinierten Thema, type des Blocks wäre gleich).Dann verwenden Sie diesen Namen in Ihrem local.xml Datei.

Andere Tipps

Um den Namen des als Tab hinzugefügten Blocks herauszufinden, werfen wir einen Blick auf Mage_Catalog_Block_Product_View_Tabs::addTab():

function addTab($alias, $title, $block, $template)
{

    if (!$title || !$block || !$template) {
        return false;
    }

    $this->_tabs[] = array(
        'alias' => $alias,
        'title' => $title
    );

    $this->setChild($alias,
        $this->getLayout()->createBlock($block, $alias)
            ->setTemplate($template)
        );
}

Der zweite Parameter von createBlock() ist der Name.In Ihrem Beispiel ist der Name also derselbe wie der Alias description.

Die Verwendung der Referenz im Layout funktioniert immer noch nicht, da die Aktionen beim Erstellen des Layoutbaums noch nicht ausgeführt werden und die description Block existiert nicht.Das bedeutet, dass Sie es können nicht Verwenden Sie den Alias ​​in XML wie erwartet:

<reference name="description">
    <block type="core/template"
           name="namespace.inline"
           as="namespace_inline"
           template="catalog/view/gallery/inline.phtml" />
</reference>

Stattdessen sollte es funktionieren, den vollständigen Beschreibungsblock ohne Referenz zu erstellen und das Tab-Kind durch ein anderes zu ersetzen action, so dass es nach dem passiert addTab Aktion wurde ausgeführt:

<block type="catalog/product_view_description"
           name="product.description"
           template="catalog/product/view/description.phtml">
    <block type="core/template"
           name="namespace.inline"
           as="namespace_inline"
           template="catalog/view/gallery/inline.phtml" />
</block>
<reference name="product.info.tabs">
    <action method="setChild">
        <alias>description</alias>
        <block>product.description</block>
    </action>
</reference>

Um den Beschreibungsblock nicht doppelt zu initialisieren, können Sie zusätzlich den ursprünglichen Tab durch einen Dummy-Platzhalter ersetzen, nur Alias ​​und Titel zählen:

        <action method="addTab" translate="title" module="catalog">
            <alias>description</alias>
            <title>Description</title>
            <block>core/text</block>
        </action>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top