How can I hook on scripts and CSS into <head>?

前端 未结 3 1792
迷失自我
迷失自我 2021-01-01 02:37

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

相关标签:
3条回答
  • 2021-01-01 02:47

    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="');
    
    0 讨论(0)
  • 2021-01-01 03:08

    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)

    0 讨论(0)
  • 2021-01-01 03: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>
    
    0 讨论(0)
提交回复
热议问题