Javascript 在Magento产品页面上添加动态JS代码
在我的magento产品页面上,我需要添加一个基于产品页面上显示追加销售产品的动态JavaScript数组。目标是当用户更改主产品的颜色时,更改追加销售产品的图像 为了实现我的目标,我需要在每个产品页面上都有一个自定义JavaScript数组,该数组为我提供有关交叉销售产品和相关产品图像的信息 最好的方法是什么 我试试这个 在my config.xml中添加观察者事件Javascript 在Magento产品页面上添加动态JS代码,javascript,magento,Javascript,Magento,在我的magento产品页面上,我需要添加一个基于产品页面上显示追加销售产品的动态JavaScript数组。目标是当用户更改主产品的颜色时,更改追加销售产品的图像 为了实现我的目标,我需要在每个产品页面上都有一个自定义JavaScript数组,该数组为我提供有关交叉销售产品和相关产品图像的信息 最好的方法是什么 我试试这个 在my config.xml中添加观察者事件 <controller_action_layout_load_before> <observers&g
<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>
独生子女
XXXXXXXX交叉销售模式观察者
产品视图
添加观察者以添加特定的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);
}
}
使用
而不是
$controller = $observer->getAction();
我可能会从另一个角度来看待这个问题。由于您只对与upsell块的数据和输出进行交互感兴趣,因此可以通过观察该块的输出并附加额外的JavaScript来更改该块的行为。为了简洁起见,此答案假设您了解Magento扩展的基础知识
在
事件之后,观察core\u block\u abstract\u to\u html\u:
etc/config.xml
<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>
<?php
$_json = array(); // Add data in here to convert to JSON for output.
$_items = $this->getItems();
/* @var Mage_Catalog_Model_Product $_product */
foreach ($_items as $_product) {
$_json[$_product->getId()] = array(
'image' => (string)Mage::helper('catalog/image')->init($_product, 'image')
);
}
?>
<script type="text/javascript">var upsellData = <?php echo json_encode($_json) ?>;</script>
创建一个解释追加销售数据并以您想要的方式输出的模板,在上面的示例中,我创建了一个可以执行类似操作的模板(我的示例创建了一个新模板,因此它应该进入基本主题):
app/design/frontend/base/default/template/catalog/product/list/upsell_json.phtml
<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>
<?php
$_json = array(); // Add data in here to convert to JSON for output.
$_items = $this->getItems();
/* @var Mage_Catalog_Model_Product $_product */
foreach ($_items as $_product) {
$_json[$_product->getId()] = array(
'image' => (string)Mage::helper('catalog/image')->init($_product, 'image')
);
}
?>
<script type="text/javascript">var upsellData = <?php echo json_encode($_json) ?>;</script>
var upsellData=;
相同的问题致命错误:对非对象inOh调用成员函数append()。好啊尝试$layout=$observer->getEvent()->getLayout()代码>同样的问题。我认为controller\u action\u layout\u load\u是使用getLayout()的错误观察者