Javascript 在Magento产品页面上添加动态JS代码

Javascript 在Magento产品页面上添加动态JS代码,javascript,magento,Javascript,Magento,在我的magento产品页面上,我需要添加一个基于产品页面上显示追加销售产品的动态JavaScript数组。目标是当用户更改主产品的颜色时,更改追加销售产品的图像 为了实现我的目标,我需要在每个产品页面上都有一个自定义JavaScript数组,该数组为我提供有关交叉销售产品和相关产品图像的信息 最好的方法是什么 我试试这个 在my config.xml中添加观察者事件 <controller_action_layout_load_before> <observers&g

在我的magento产品页面上,我需要添加一个基于产品页面上显示追加销售产品的动态JavaScript数组。目标是当用户更改主产品的颜色时,更改追加销售产品的图像

为了实现我的目标,我需要在每个产品页面上都有一个自定义JavaScript数组,该数组为我提供有关交叉销售产品和相关产品图像的信息

最好的方法是什么

我试试这个

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

独生子女
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()的错误观察者