在我的magento产品页面上,我需要在产品页面上的显示向上销售产品上添加动态JavaScript数组。目标是在用户更改主要产品的颜色时更改向上销售产品的图像。
为了实现我的目标,我需要在每个产品页面上都有一个自定义JavaScript数组,它为我提供有关交叉索引产品和相关产品图像的信息。
这样做的最佳方式是什么?
我试试这个
在我的config.xml中添加一个观察者事件
<controller_action_layout_load_before>
<observers>
<crossselling_product_view>
<type>singleton</type>
<class>XXXXXXXX_Crossselling_Model_Observer</class>
<method>productview</method>
</crossselling_product_view>
</observers>
</controller_action_layout_load_before>
添加观察者以添加特定的JS代码
<?php
class XXXXXXXX_Crossselling_Model_Observer {
public function productview(Varien_Event_Observer $observer) {
$product = Mage::registry('current_product');
//only on product page
if (!($product instanceof Mage_Catalog_Model_Product)) {
return;
}
$controller = $observer->getAction();
$layout = $controller->getLayout();
$block = $layout->createBlock('core/text');
$block->setText(
'<script type="text/javascript">
function main_pulsestorm_hellojavascript()
{
alert("Foo");
}
main_pulsestorm_hellojavascript();
</script>'
);
$layout->getBlock('head')->append($block);
}
}
我的错误: 致命错误:在非对象上调用成员函数append()
我的问题是什么,是添加动态js代码的正确方法吗?
答案 0 :(得分:1)
我可能会从不同的角度来看待这个问题。由于您只对与加售块的数据和输出进行交互感兴趣,因此您可以通过观察其输出并附加额外的JavaScript来更改该块的行为。为简洁起见,本答案假定您了解Magento扩展的基础知识。
<include src="/artifacts/componente_to_reuse.zul"/>
事件:<强>等/ config.xml中强>
core_block_abstract_to_html_after
<core_block_abstract_to_html_after>
<observers>
<addCustomUpsellFormat>
<class>XXXXXXXX_Crossselling_Model_Observer</class>
<method>addCustomUpsellFormat</method>
</addCustomUpsellFormat>
</observers>
</core_block_abstract_to_html_after>
的实例执行操作:<强>模型/ Observer.php 强>
Mage_Catalog_Block_Product_List_Upsell
应用/设计/前端/碱/默认/模板/目录/产品/列表/ upsell_json.phtml 强>
public function addCustomUpsellFormat(Varien_Event_Observer $observer)
{
/* @var Mage_Core_Block_Abstract $block */
$block = $observer->getBlock();
if ($block instanceof Mage_Catalog_Block_Product_List_Upsell) {
/* @var Varien_Object $transport */
$transport = $observer->getTransport();
// Receive the standard output for the block.
$output = $transport->getHtml();
/* @var Mage_Core_Model_Layout $layout */
$layout = $block->getLayout();
$json = $layout->createBlock('core/template')
->setTemplate('catalog/product/list/upsell_json.phtml')
->setItems($block->getItems())
->toHtml();
// Append new JSON data to block output.
$transport->setHtml($output . $json);
}
return $this;
}
答案 1 :(得分:0)
使用
$controller = $observer->getEvent()->getAction();
而不是
$controller = $observer->getAction();