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

时间:2016-03-04 15:39:30

标签: php magento magento-1.7

我在向Magento的产品视图中添加自定义PHP块时遇到问题。 该块只是无法在产品页面上显示

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

我的方法基于以下链接的教程: https://gist.github.com/grafikchaos/11148771

请注意,我与本教程中的流程无关 - 我对此方法的任何建议/调整持开放态度。

我创建/调整的文件如下:

/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!";
?>

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

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

它输出以下内容,验证Magento是否看到了块?:

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

提前感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:0)

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>