5

我正在制作的模块的事情是它会生成一个 javascript 片段,所以我不能使用一个动作将其挂接到 HTML 部分,因为该动作要求我有一个 JS 文件(如果我是,请纠正我错误的)。我有哪些方法可以将 JavaScript 片段放入标签中?我正在考虑使用一个块,但我不确定应该在之后附加什么块,我必须考虑这将适用于所有主题。

4

3 回答 3

8

股票头模板是

template/page/html/head.phtml

在您自己的主题中复制该文件将是获得一些 javascript 的最简单方法。

虽然更好(从开发人员的角度来看),此模板包含以下行

<?php echo $this->getChildHtml() ?>

about 链接打印出块的所有子块。因此,将子块添加到 head 块也可以。

<layouts>
    <default> <!-- does this to all pages — use specific layout handles to target a page -->
        <reference name="head"> <!-- get a reference to the existing head block -->
            <block type="core/text" name="simple_example_javascript_block"> <!-- append a simple text block, probably better to use a new template block -->
                <action method="setText"> <!-- set our new block's text -->
                    <text><![CDATA[
                    <script type="text/javascript">
                        alert("foo");
                    </script>
                    //]]></text>
                </action>
            </block>
        </reference>
    </default>
</layouts>

上面的 XML 使用一个简单的core/text块将 javascript 添加到每个 Magento 页面。从local.xml工作,应该在其他地方工作。我肯定会想到更好的方法来做到这一点(例如,模板块)

于 2012-07-26T17:59:09.417 回答
1

Alan Storm 的解决方案有效,但您可能希望将脚本或 html 数据包含在模板文件中,以使其与 XML 分开。

<?xml version="1.0"?>
<layouts>
    <default>
        <reference name="before_head_end">
            <block type="page/html_head" output="toHtml" name="some_name" template="some_name/head.phtml" />
        </reference>
    </default>
</layouts>
于 2013-03-02T23:06:08.870 回答
-1

好的,这是一个令人尴尬的黑客,但正如 Alan Storm 指出的那样,这在 adminhtml 中不起作用,所以,本着试图将我的代码/文件保持在最低限度的精神,我已经破解了 magento,这对我有用,哈哈

$layout = Mage::app()->getLayout();
$headBlock = $layout->getBlock('head');

$headBlock->addLinkRel('blank', '" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script type="text/javascript">jQuery.noConflict();</script>
<link rel="blank" href="');
于 2013-07-10T14:32:28.027 回答