Как я могу подключить скрипты и CSS в <head>?

Модуль, который я создаю, состоит в том, что он как бы генерирует фрагмент кода javascript, поэтому я не могу использовать действие, чтобы просто привязать его к разделу HTML, поскольку действие требует, чтобы у меня был файл JS (поправьте меня, если я неправильно). Как мне добавить фрагмент JavaScript в тег? Я думал об использовании блока, но я не уверен, какой блок должен быть добавлен после, и я должен учитывать, что это будет работать со всеми темами.

3 ответа

Исходный шаблон головы

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, должен работать в другом месте. Я уверен, что лучшие способы сделать это должны прийти на ум (например, блок шаблона)

Решение 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>

Хорошо, это неловкий взлом, НО, как заметил Алан Сторм, это не сработает в adminhtml, поэтому, пытаясь свести мой код / ​​файлы к минимуму, я взломал magento, и это работает для меня, 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="');
Другие вопросы по тегам