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