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>
我在 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>