| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <sect3 id="zend.view.helpers.initial.headscript">
- <title>Помощник HeadScript Helper</title>
- <para>
- HTML-элемент <code><script></code> используется для добавления
- скриптового кода, исполняемого на клиентской стороне, как
- непосредственно в документ, так и через ссылки на удаленные ресурсы,
- содержащие этот код. Помощник <code>HeadScript</code> позволяет
- использовать оба способа включения.
- </para>
- <para>
- Помощник <code>HeadScript</code> поддерживает следующие методы для
- установки и добавления скриптов:
- </para>
- <itemizedlist>
- <listitem><para><code>appendFile($src, $type = 'text/javascript',
- $attrs = array())</code></para></listitem>
- <listitem><para><code>offsetSetFile($index, $src, $type = 'text/javascript',
- $attrs = array())</code></para></listitem>
- <listitem><para><code>prependFile($src, $type = 'text/javascript',
- $attrs = array())</code></para></listitem>
- <listitem><para><code>setFile($src, $type = 'text/javascript',
- $attrs = array())</code></para></listitem>
- <listitem><para><code>appendScript($script, $type = 'text/javascript',
- $attrs = array())</code></para></listitem>
- <listitem><para><code>offsetSetScript($index, $script, $type = 'text/javascript',
- $attrs = array())</code></para></listitem>
- <listitem><para><code>prependScript($script, $type = 'text/javascript',
- $attrs = array())</code></para></listitem>
- <listitem><para><code>setScript($script, $type = 'text/javascript',
- $attrs = array())</code></para></listitem>
- </itemizedlist>
- <para>
- В методах <code>*File()</code> через параметр <varname>$src</varname>
- указывается местоположение скрипта, который требуется загрузить; обычно
- оно указывется в виде URL или пути к нему.
- В методах <code>*Script()</code> через параметр <varname>$script</varname>
- передается скриптовый код, который требуется включить в
- элемент <code><script></code>.
- </para>
- <note>
- <title>Установка условных комментариев</title>
- <para>
- <code>HeadScript</code> поддерживает включение тега в условные
- комментарии с тем, чтобы скрыть его от определенных
- браузеров. Для того, чтобы добавить условные теги,
- передавайте условие через параметр
- <varname>$attrs</varname> в вызове метода, как показано в примере:
- </para>
- <example id="zend.view.helpers.initial.headscript.conditional">
- <title>Скрипты с условными комментариями</title>
- <programlisting language="php"><![CDATA[
- // добавление скриптов
- $this->headScript()->appendFile(
- '/js/prototype.js',
- 'text/javascript',
- array('conditional' => 'lt IE 7')
- );
- ]]></programlisting>
- </example>
- </note>
- <para>
- <code>HeadScript</code> также позволяет "захватывать" вывод скриптов;
- это может быть полезным при создании скриптов
- программным способом. Пример использования этой возможности будут
- показан ниже.
- </para>
- <para>
- Для быстрого добавления скриптовых элементов Вы можете использовать
- метод <code>headScript()</code>, сигнатура этого метода -
- <code>headScript($mode = 'FILE', $spec, $placement = 'APPEND')</code>.
- Параметр <varname>$mode</varname> может иметь значение 'FILE' или 'SCRIPT',
- в зависимости от того, ссылаетесь ли вы на уже существующий скрипт или
- передаете код для влючения в элемент
- <code><script></code>. <varname>$spec</varname> содержит либо путь к
- файлу, к которому нужно добавить ссылку, либо сам скриптовый код.
- <varname>$placement</varname> должен иметь одно из следующих значений:
- 'APPEND', 'PREPEND' или 'SET'.
- </para>
- <para>
- <code>HeadScript</code> перегружает методы <code>append()</code>,
- <code>offsetSet()</code>, <code>prepend()</code> и <code>set()</code>
- с целью принудительного использования специальных методов, перечисленных
- выше. Внутри себя помощник сохраняет каждый элемент в виде маркера
- <code>stdClass</code>, который затем преобразовывается в строку через
- метод <code>itemToString()</code>. Это позволяет производить проверку
- элементов в стеке и при необходимости модифицировать их, просто
- извлекая объект и изменяя его.
- </para>
- <para>
- Помощник <code>HeadScript</code> является частной реализацией
- <link linkend="zend.view.helpers.initial.placeholder">помощника
- Placeholder</link>.
- </para>
- <note>
- <title>Используйте InlineScript для скриптов в теле документа</title>
- <para>
- Для добавления скриптов внутри HTML-элемента <code>body</code>
- должен использоваться
- родственный помощник <link
- linkend="zend.view.helpers.initial.inlinescript">InlineScript</link>.
- Помещение скриптов в конец документа является хорошей практикой
- для повышения скорости отдачи страницы, особенно если используются
- сторонние скрипты-аналитики.
- </para>
- </note>
- <note>
- <title>Установка произвольных атрибутов по умолчанию отключена</title>
- <para>
- По умолчанию <code>HeadScript</code> будет генерировать только
- атрибуты, соответствующие спецификации W3C.
- В список этих атрибутов входят 'type', 'charset', 'defer',
- 'language' и 'src'. Однако некоторые JavaScript фреймворки,
- а в особенности <ulink url="http://www.dojotoolkit.org/">Dojo</ulink>,
- используют специальные атрибуты в целях изменения поведения. Вы
- можете разрешить использование таких атрибутов, воспользовавшись
- методом <code>setAllowArbitraryAttributes()</code>:
- </para>
- <programlisting language="php"><![CDATA[
- $this->headScript()->setAllowArbitraryAttributes(true);
- ]]></programlisting>
- </note>
- <example id="zend.view.helpers.initial.headscript.basicusage">
- <title>Использование помощника HeadScript</title>
- <para>
- Вы можете указывать скрипты для добавления в документ в любой момент
- времени. Как было указано ранее, это могут быть как ссылки на
- файлы со скриптами, так и сами скрипты.
- </para>
- <programlisting language="php"><![CDATA[
- // добавление скриптов
- $this->headScript()->appendFile('/js/prototype.js')
- ->appendScript($onloadScript);
- ]]></programlisting>
- <para>
- Порядок следования часто важен в скриптах, интерпретируемых на
- стороне клиента - например, нужно быть уверенным в том, что
- библиотеки загружаются в порядке, обусловленном
- зависимостями между ними. В этом случае используйте специальные
- методы методы для добавления в начало, конец, и по определенному
- смещению:
- </para>
- <programlisting language="php"><![CDATA[
- // Размещение скриптов в определенном порядке
- // Добавление по определенному смещению
- $this->headScript()->offsetSetFile(100, '/js/myfuncs.js');
- // Используем эффекты из библиотеки script.aculo.us
- // (будет добавлена с использованием следующего смещения, 101)
- $this->headScript()->appendFile('/js/scriptaculous.js');
- // Но скрипт prototype всегда должен загружаться первым:
- $this->headScript()->prependFile('/js/prototype.js');
- ]]></programlisting>
- <para>
- Когда все будет готово для размещения скриптов в макете, просто
- "выводите" помощника:
- </para>
- <programlisting language="php"><![CDATA[
- <?php echo $this->headScript() ?>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.headscript.capture">
- <title>Составление скриптов с использованием помощника HeadScript</title>
- <para>
- Иногда нужно генерировать скрипты программым способом.
- Хотя вы можете использовать конкатенацию строк, синтаксис heredoc
- и т.п., часто бывает легче создать скрипт с включением PHP-тегов.
- <code>HeadScript</code> позволяет делать это, захватывая
- вывод в стек:
- </para>
- <programlisting language="php"><![CDATA[
- <?php $this->headScript()->captureStart() ?>
- var action = '<?php echo $this->baseUrl ?>';
- $('foo_form').action = action;
- <?php $this->headScript()->captureEnd() ?>
- ]]></programlisting>
- <para>
- Используются следующие допущения:
- </para>
- <itemizedlist>
- <listitem><para>
- Скрипт будет добавлен в конец стека. Если требуется
- переопределить содержимое стека или добавить скрипт в
- конец стека, то передавайте соответственно
- 'SET' или 'PREPEND' в качестве первого аргумента
- <code>captureStart()</code>.
- </para></listitem>
- <listitem><para>
- По умолчанию предполагается, что MIME-тип скрипта -
- 'text/javascript'. Если требуется указать другой тип
- скрипта, то передавайте его в качестве второго аргумента
- <code>captureStart()</code>.
- </para></listitem>
- <listitem><para>
- Если вы хотите указать какие-либо дополнительные аргументы
- для тега <code><script></code>, то передавайте их
- в массиве в качестве третьего аргумента
- <code>captureStart()</code>.
- </para></listitem>
- </itemizedlist>
- </example>
- </sect3>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|