Magento 扩展:向产品视图添加自定义块

Magento Extensions: Adding a custom block to the product view

我在 Magento 的产品视图中添加自定义 PHP 块时遇到问题。 该块根本不会显示在产品页面上

这是我的第一个 Magento 扩展的一部分。希望你能帮助我。

我的方法是基于下面link的教程: https://gist.github.com/grafikchaos/11148771

请注意,我不受本教程中流程的限制 - 我愿意接受对此方法的任何建议/调整。

我的档案created/adjusted如下:

/app/etc/modules/Whirlwindecom_Personalizer.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- located at: app/etc/modules/Whirlwindecom_Personalizer.xml -->
<config>
    <modules>
        <Whirlwindecom_Personalizer>
            <active>true</active>
            <codePool>local</codePool>
        </Whirlwindecom_Personalizer>
    </modules>
</config>

/app/code/local/Whirlwindecom/Personalizer/etc/config.xml

请注意,此文件包含其他节点以支持此扩展的其他部分,这些部分正在运行且与此问题无关

<?xml version="1.0"?>
<config>
    <modules>
        <Whirlwindecom_Personalizer>
            <version>0.1.0</version>
        </Whirlwindecom_Personalizer>
    </modules>
    <global>
        <blocks>
            <whirlwindecom_personalizer>
                <class>Whirlwindecom_Personalizer_Block</class>
            </whirlwindecom_personalizer>
        </blocks>
        <models>
            <whirlwindecom_personalizer>
                <class>Whirlwindecom_Personalizer_Model</class>
            </whirlwindecom_personalizer>
        </models>
    </global>
    <frontend>
        <routers>
            <whirlwindecom_personalizer>
                <use>standard</use>
                <args>
                    <module>Whirlwindecom_Personalizer</module>
                    <frontName>personalizer</frontName>
                </args>
            </whirlwindecom_personalizer>
        </routers>
        <layout>
            <updates>
                <whirlwindecom_personalizer module="Whirlwindecom_Personalizer">
                    <file>whirlwindecom_personalizer.xml</file>
                </whirlwindecom_personalizer>
            </updates>
        </layout>
    </frontend>
    <adminhtml>
        <layout>
            <updates>
                <whirlwindecom_personalizer>
                    <file>whirlwindecom_personalizer.xml</file>
                </whirlwindecom_personalizer>
            </updates>
        </layout>
        <events>
            <catalog_product_save_after>
                <observers>
                    <Whirlwindecom_save_product_data>
                        <type>singleton</type>
                        <class>Whirlwindecom_Personalizer_Model_Observer</class>
                        <method>saveProductTabData</method>
                    </Whirlwindecom_save_product_data>
                </observers>
            </catalog_product_save_after>
        </events>
    </adminhtml>
</config>

/app/design/frontend/base/default/layout/whirlwindecom_personalizer.xml

<?xml version="1.0"?>

<layout version="0.1.0">
    <catalog_product_view>
        <reference name="whirlwind_personalizer">
            <block type="core/template" name="whirlwind_personalizer_block" template="whirlwindecom/personalizer/personalize.phtml" />
        </reference>
    </catalog_product_view>
</layout>

/app/design/frontend/base/default/template/catalog/product/view.phtml

添加了以下内容:

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

之前:

<div class="product-shop">

/app/design/frontend/base/default/template/whirlwindecom/personalizer/personalize.phtml

<?php
// let's output a message to verify this script is being included and displayed
echo "Personalizer Success!";
?>

最后一点。为了调试我的工作并追踪问题的原因,我临时将以下代码添加到 view.phtml 脚本中与我的 getChildHtml 行相同的位置:

var_dump(array_keys($this->getLayout()->getAllBlocks()));

它输出了以下内容,证明 Magento 看到了这个块?:

array(100) {
    ...
    [95]=> string(28) "whirlwind_personalizer_block"
    ...
}

在此先感谢您提供的任何帮助!

Preshna Valanda 的回答 https://magento.stackexchange.com/users/28492/prashant-valanda

===============================

更改文件代码

/app/design/frontend/base/default/layout/whirlwindecom_personalizer.xml

<?xml version="1.0"?>

<layout version="0.1.0">
    <catalog_product_view>
        <reference name="content">
            <block type="core/template" name="whirlwind_personalizer_block" template="whirlwindecom/personalizer/personalize.phtml" />
        </reference>
    </catalog_product_view>
</layout>