The thing with the module I am making is that it kind of generates a javascript snippet, so I cannot use an action to just hook that into the section of the HTML since the action requires that I have a JS file (correct me if I am wrong). What are some ways for me to put a JavaScript snippet into the tag? I was thinking of using a block, but I am not sure what the block should be appended after and I have to consider that this will work with all themes.
-
http://stackoverflow.com/questions/4654822/how-to-add-adding-external-javascript-in-magento – B00MER Jul 26 '12 at 03:15
-
2Doesn't `addJs` only load a file? What if I wanted to just load the JS code without putting it into a file? – Strawberry Jul 26 '12 at 17:40
3 Answers
The stock head template is
template/page/html/head.phtml
Copying that file in your own theme would be the simplest way to get some javascript in the head.
Better though (from a developer point of view), this template includes the following line
<?php echo $this->getChildHtml() ?>
The about link prints out all the child blocks of a block. So, adding a child block to the head block would also work.
<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>
The above XML uses a simple core/text
block to add javascript to every Magento page. Works from local.xml
, should work elsewhere. I'm sure better ways to do this should spring to mind (template block, for example)

- 164,128
- 91
- 395
- 599
-
1It's ALAN STORM! I have seen some of your tutorials! Those helped me get started with Magento and were REALLY helpful! Thanks for that and this answer! – Strawberry Jul 26 '12 at 18:14
-
2Quick Note: This won't work for adminhtml pages — that template lacks the getChildHtml call. – Alana Storm Jul 26 '12 at 23:13
-
Alan... what woudl your solution be for adminhtml pages? just a dirty hack of addJS('" – Banning Jul 10 '13 at 14:08
Alan Storm's solution works but you might want to include your script or html data in a template file to keep it separate from the 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>

- 741
- 1
- 9
- 20
Ok this is an embarrassing hack BUT as Alan Storm pointed out this will not work in adminhtml so, in the spirit of trying to keep my code/files to a minimum, I've hacked up magento and this is working for me lol
$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="');

- 2,279
- 2
- 16
- 20