Magento 1 - 通过布局更新xml代码将内联javascript添加到产品页面

时间:2014-05-28 08:12:58

标签: javascript xml magento layout

您好我想使用谷歌分析的AB测试引擎。因此,我必须在单个产品页面中添加javascript-snippet。

我打算将其添加到说明或简短说明中。它正在工作,但它不够用,因为脚本进行了重定向,这意味着页面加载了一半然后被重定向。

Google说我应该在head-tag中添加脚本。是否可以在此处将脚本作为“自定义布局更新”插入: enter image description here

我可以想象像

这样的东西
<default translate="label" module="page">
        <label>All Pages</label>
        <block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
            <block type="page/html_head" name="head" as="head">
                <action method="addJs"><script>alert('hello')</script></action>
            </block>
        </block>
</default>

2 个答案:

答案 0 :(得分:23)

从文件加载javascript更清晰。你不一定需要所有的块,但可以这样做:

<default translate="label" module="page">   
    <reference name="head">
        <action method="addJs"><script>path/to/script.js</script></action>
    </reference>
</default>

路径是magento root中js文件夹的相对路径。

要直接将javascript添加到xml(我不推荐),您可以使用CDATA,例如:

<reference name="head">
    <block type="core/text" name="your.block.name">
        <action method="setText">
            <text><![CDATA[<script type="text/javascript">alert('hello');</script>]]></text>
        </action>
    </block>
</reference>

答案 1 :(得分:1)

我的解决方案是扩展头部块:

<?php
class Company_Modulename_Block_Html_Head extends Mage_Page_Block_Html_Head {
    public function addInlineJs($name)
    {
        $this->addItem('inlinejs', $name);
        return $this;
    }

    public function getCssJsHtml()
    {
        $html = parent::getCssJsHtml();

        foreach ($this->_data['items'] as $item) {
            if($item['type']=='inlinejs') {
                $html .= sprintf('<script type="text/javascript">%s</script>' . "\n", $item['name']);
            }
        }

        return $html;
    }
}

现在我可以像那样使用它

<reference name="head">
       <action method="addInlineJs"><script>alert('cool');</script></action>
</reference>