Содержание


HeadScript Helper


HeadScript Helper



Тег <script> используется для создания встроенных в страницу сценариев, исполняемых на стороне клиента, или подключения удаленных сценариев. HeadScript умеет делать и то и то.


В HeadScript существуют следующие методы:

appendFile($src, $type = 'text/javascript', $attrs = array())

offsetSetFile($index, $src, $type = 'text/javascript', $attrs = array())

prependFile($src, $type = 'text/javascript', $attrs = array())

setFile($src, $type = 'text/javascript', $attrs = array())

appendScript($script, $type = 'text/javascript', $attrs = array())

offsetSetScript($index, $script, $type = 'text/javascript', $attrs = array())

prependScript($script, $type = 'text/javascript', $attrs = array())

setScript($script, $type = 'text/javascript', $attrs = array())

  

Для методов * File() $src -  это указание удаленно расположенного скрипта для загрузки. Обычно URL или путь на диске. Для методов * Script() $script -  это непосредственно сами скрипты, которые должны будут подключится на страницу.

Важно: Установка условных комментариев.
Оборачивает(заключает) скрипты в комментарии, позволяющие скрыть их для обработки в определенных браузерах.
Для этого передайте значение «conditional» как параметр $attrs при вызове метода:

// adding scripts
$this->headScript()->appendFile(
    '/js/prototype.js',
    'text/javascript',
    array('conditional' => 'lt IE 7')
);

Так же HeadScript позволяет делать захват скриптов. Это полезно, когда объявления скриптов делается программно, а потом размещается в нужном месте.

Для быстрого добавления скриптов на страницу используйте метод headScript() с таким синтаксисом: headScript($mode = 'FILE', $spec, $placement = 'APPEND'). $mode -  принимает значения «FILE» или «SCRIPT», в зависимости от того, загружаете Вы скрипт с файла(ресурса) или подключаете скрипт в страницу. $spec – путь к файлу или ссылка к самому скрипту. $placement – принмает значения «APPEND», «PREPEND», «SET».

HeadScript перекрывает за append(), offsetSet(), prepend(), set() для принудительного использования специальных методов, перечисленных выше. Внутри себя он сохраняет все элементы как маркер  stdClass, который в дальнейшем сериализуется, используя метод itemToString() .Это дает возможность проверки элементов, находящихся в стеке, и модификации их просто изменяя возвращаемый объект.

Помощник HeadScript является частной реализацией помощника Placeholder.

Важно: Используйте InlineScript для скриптов в HTML Body.  
У HeadScript есть родственный помощник InlineScript, который используется при внедрении скриптов внутри тега <
body >.
Это правильно подключать скрипты в конце документа, что ускоряет загрузку страниц, особенно при использование третье степенных скриптов анализа, счетчиков и т.д.

Важно: Arbitrary Attributes отключены по умолчанию.
По умолчанию HeadScript рендерит только атрибуты <script>, описанные в спецификациях W3C. Это: «type», «charset», «defer», «language», «src». Но некоторые javascript фреймоворки, например Dojo, используют специальные атрибуты. Что б использовать их нужно включить их в метоже setAllowArbitraryAttributes():

$this->headScript()->setAllowArbitraryAttributes(true);

Использование

Добавляйте когда нужно. Это могут как ссылки на удаленные скрипты, так и непосредственно сами скрипты:

// adding scripts
$this->headScript()->appendFile('/js/prototype.js')
                   ->appendScript($onloadScript);

Для определения порядка загрузки скриптов используйте append, prepend, offsetSet

// Putting scripts in order
 
// place at a particular offset to ensure loaded last
$this->headScript()->offsetSetFile(100, '/js/myfuncs.js');
 
// use scriptaculous effects (append uses next index, 101)
$this->headScript()->appendFile('/js/scriptaculous.js');
 
// but always have base prototype script load first:
$this->headScript()->prependFile('/js/prototype.js');

После подготовки скриптов к загрузке в макете вызовете помощника:

<?php echo $this->headScript() ?>

Захват скриптов с помощью HeadScript

Вы можете использовать конкатенацию(concatenation, объединение) строк или другие возможности, обычно легче всего  создание скрипта и обрамления его в теги PHP. Захватим скрипт в тег:

<?php $this->headScript()->captureStart() ?>
var action = '<?php echo $this->baseUrl ?>';
$('foo_form').action = action;
<?php $this->headScript()->captureEnd() ?>

Пояснения к примеру:

1) Скрипт будет добавлен в конец стека. Если нужно заменить стек или добавить в начало, то используйте «SET» или «PREPEND» как первый аргумент в captureStart().

2) По умолчанию MIME тип установлен как «text/javascript». Для его изменения передайте необходимый тип как второй аргумент в captureStart().

3) Если необходимо добавить атрибуты в тег <script>, то просто добавьте их в массив и передайте его как третий аргумент в captureStart().


Автор статьи: DuB