我正在制作的模块是它生成一个javascript片段,所以我不能使用一个动作只是将它挂钩到HTML的部分,因为动作需要我有一个JS文件(纠正我如果我错了)我有什么方法可以将JavaScript代码段放入代码中?我正在考虑使用一个块,但我不确定该块后面应该添加什么,我必须考虑这将适用于所有主题。
答案 0 :(得分:8)
库存头模板是
template/page/html/head.phtml
在您自己的主题中复制该文件将是获取一些javascript的最简单方法。
虽然更好(从开发人员的角度来看),但此模板包含以下行
<?php echo $this->getChildHtml() ?>
about链接打印出块的所有子块。因此,将一个子块添加到头块也可以。
<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
的作品应该在别处起作用。我确信应该考虑更好的方法(模板块,例如)
答案 1 :(得分: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>
答案 2 :(得分:-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="');