Domanda

Sto usando le schede per la mia pagina di visualizzazione del prodotto.Nel mio locale.xml ho il seguente:

<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>
.

Nel mio catalogo / prodotto / vista / descrizione.phtml, ho quanto segue:

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

Ma il modello del bambino non rende.

Ho provato a passare al tema predefinito e funziona, ma il tema predefinito non utilizza le schede.

C'è qualcosa con il blocco Mage_Catalog_Block_Product_View_TABS che non consente di avere blocchi figlio?

È stato utile?

Soluzione

Stai aggiungendo il tuo blocco in un blocco di riferimento.Dal blocco genitore del tuo blocco personalizzato è un blocco di riferimento, è necessario che questo blocco dovrebbe essere definito prima che venga referenziato in un altro luogo.

Hai detto, quando lo provi nel tema di base, funziona.Ma nel tuo tema personalizzato non funziona.Quindi il mio forte credo è che, il tema di base tiene premuto il blocco definisce product.description all'interno del suo file di layout catalog.xml.Ma il tema personalizzato non utilizza questo nome per quel blocco, invece potrebbe usare un altro nome.

È necessario trovare il nome del blocco dal file catalog.xml (nel tema personalizzato) facendo riferimento al suo tipo.(Nel tema di base e sul tema Custome, type del blocco sarebbe lo stesso).Quindi utilizzare quel nome nel tuo file local.xml.

Altri suggerimenti

Per scoprire il nome del blocco aggiunto come scheda, diamo un'occhiata a 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)
        );
}
.

Il secondo parametro di createBlock() è il nome.Quindi il nome è lo stesso dell'alias, nell'esempio description.

L'utilizzo del riferimento nel layout non funzionerà ancora perché quando viene costruito l'albero di layout, le azioni non vengono ancora eseguite e il blocco description non esiste.Ciò significa, puoi non Utilizzare l'alias in XML come si potrebbe aspettarsi:

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

Cosa dovrebbe funzionare invece la creazione del blocco di descrizione completo senza riferimento e sostituire il figlio della scheda utilizzando un altro action, in modo che sia stato eseguito dopo l'esecuzione dell'azione addTab:

<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>
.

Per non inizializzare il blocco di descrizione due volte, è possibile sostituire la scheda originale con un segnaposto dummy, solo alias e argomento:

        <action method="addTab" translate="title" module="catalog">
            <alias>description</alias>
            <title>Description</title>
            <block>core/text</block>
        </action>
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top