| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15617 -->
- <!-- Reviewed: no -->
- <sect3 id="zend.view.helpers.initial.headscript">
- <title>HeadScript Helfer</title>
- <para>
- Das HTML <code><script></code> Element wird verwendet um entweder Clientseitige
- Skriptelemente Inline zu ermöglichen oder um eine entfernte Ressource zu verlinken die
- Clientseitigen Skriptcode enthält. Der <code>HeadScript</code> Helfer erlaubt es beides zu
- Managen.
- </para>
- <para>
- Der <code>HeadScript</code> Helfer unterstützt die folgenden Methoden für das Setzen und
- Hinzufügen von Skripten:
- </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>
- Im Falle der <code>*File()</code> Methoden ist <code>$src</code> der entfernte Ort des
- Skriptes das geladen werden soll; das ist üblicherweise in der Form einer URL oder eines
- Pfades. Für die <code>*Script()</code> Methoden sind <code>$script</code> die clientseitigen
- Skript Direktiven die in diesem Element verwendet werden sollen.
- </para>
- <note>
- <title>Abhängige Kommentare setzen</title>
- <para>
- <code>HeadScript</code> erlaubt es ein Script Tag in abhängige Kommentare zu setzen, das
- es erlaubt es vor speziellen Browsern zu verstecken. Um abhängige Tags zu setzen, muß
- der abhängige Wert als Teil des <code>$attrs</code> Parameters im Methodenaufruf
- übergeben werden.
- </para>
- <example id="zend.view.helpers.initial.headscript.conditional">
- <title>Headscript mit abhängigen Kommentaren</title>
- <programlisting language="php"><![CDATA[
- // Scripte hinzufügen
- $this->headScript()->appendFile(
- '/js/prototype.js',
- 'text/javascript',
- array('conditional' => 'lt IE 7')
- );
- ]]></programlisting>
- </example>
- </note>
- <para>
- <code>HeadScript</code> erlaubt auch das Erfassen von Skripten; das kann nützlich sein wenn
- man ein Clientseitiges Skript programmtechnisch erstellen und es dann woanders platzieren
- will. Seine Verwendung wird in einem Beispiel anbei gezeigt.
- </para>
- <para>
- Letztendlich kann die <code>headScript()</code> Methode verwendet werden um Skript Elemente
- schnell hinzuzufügen; die Signatur hierfür ist <code>headScript($mode = 'FILE', $spec,
- $placement = 'APPEND')</code>. Der <code>$mode</code> ist
- entweder 'FILE' oder 'SCRIPT', anhängig davon ob das Skript verlinkt oder definiert wird.
- <code>$spec</code> ist entweder die Skriptdatei die verlinkt wird, oder der Skriptcode
- selbst. <code>$placement</code> sollte entweder 'APPEND', 'PREPEND' oder 'SET' sein.
- </para>
- <para>
- <code>HeadScript</code> überschreibt <code>append()</code>, <code>offsetSet()</code>,
- <code>prepend()</code>, und <code>set()</code> um um die Verwendung der speziellen Methoden
- wie vorher gezeigt zu erzwingen. Intern wird jedes Element als <code>stdClass</code> Token
- gespeichert, welches später mit Hilfe der <code>itemToString()</code> Methode serialisiert
- wird. Das erlaubt es Prüfungen an den Elementen im Stack vorzunehmen, und diese Elemente
- optional zu ändern, einfach durch das Modifizieren des zurückgegebenen Objektes.
- </para>
- <para>
- Der <code>HeadScript</code> Helfer ist eine konkrete Implementation des
- <link linkend="zend.view.helpers.initial.placeholder">Platzhalter Helfers</link>.
- </para>
- <note>
- <title>InlineScript für HTML Body Skripte verwenden</title>
- <para>
- <code>HeadScript</code>'s Schwester Helfer,
- <link linkend="zend.view.helpers.initial.inlinescript">InlineScript</link>, sollte
- verwendet werden wenn man Inline Skripte im HTML <code>body</code> inkludieren will. Die
- Platzierung von Skripten am Ende des Dokuments ist eine gängige Praxis für die
- schnellere Auslieferung von Seiten, speziell wenn 3rd Party Analyse Skripte verwendet
- werden.
- </para>
- </note>
- <note>
- <title>Andere Attribute werden stanadrdmäßig ausgeschaltet</title>
- <para>
- Standardmäßig wird <code>HeadScript</code> nur <code><script></code> Attribute
- darstellen die von W3C abgesegnet sind. Diese beinhalten 'type', 'charset', 'defer',
- 'language', und 'src'. Trotzdem, verwenden einige Javascript Frameworks, vorallem
- <ulink url="http://www.dojotoolkit.org/">Dojo</ulink>, eigene Attribute um Verhalten
- zu ändern. Um solche Attribute zu erlauben, können diese über die
- <code>setAllowArbitraryAttributes()</code> Methode eingeschaltet werden:
- </para>
- <programlisting language="php"><![CDATA[
- $this->headScript()->setAllowArbitraryAttributes(true);
- ]]></programlisting>
- </note>
- <example id="zend.view.helpers.initial.headscript.basicusage">
- <title>Grundsätzliche Verwendung des HeadScript Helfers</title>
- <para>
- Neue Skript Tags können jederzeit spezifiziert werden. Wie vorher beschrieben können
- diese Links auf externe Ressourcen Dateien oder Skripte sein.
- </para>
- <programlisting language="php"><![CDATA[
- // Skripte hinzufügen
- $this->headScript()->appendFile('/js/prototype.js')
- ->appendScript($onloadScript);
- ]]></programlisting>
- <para>
- Die Reihenfolge ist oft wichtig beim Clientseitigen Skripting; es kann notwendig sein
- sicherzustellen das Bibliotheken in einer speziellen Reihenfolge geladen werden da Sie
- Abhängigkeiten zueinander haben; die verschiedenen append, prepend und offsetSet
- Direktiven können hierbei helfen:
- </para>
- <programlisting language="php"><![CDATA[
- // Skripte in eine Reihenfolge bringen
- // An einem bestimmten Offset Platzieren um Sicherzustellen
- // das es als letztes geladen wird
- $this->headScript()->offsetSetFile(100, '/js/myfuncs.js');
- // Scriptige Effekte verwenden (append verwendet den nächsten Index, 101)
- $this->headScript()->appendFile('/js/scriptaculous.js');
- // Aber Basis Prototype Skripte müssen immer als erstes geladen werden
- $this->headScript()->prependFile('/js/prototype.js');
- ]]></programlisting>
- <para>
- Wenn man letztendlich damit fertig ist am alle Skripte im Layoutskript darzustellen, muß
- der Helfer einfach ausgegeben werden:
- </para>
- <programlisting language="php"><![CDATA[
- <?php echo $this->headScript() ?>
- ]]></programlisting>
- </example>
- <example id="zend.view.helpers.initial.headscript.capture">
- <title>Skripte einfachen mit Hilfe des HeadScript Helfers</title>
- <para>
- Manchmal mit ein Clientseitiges Skript programmtechnisch erstellt werden. Wärend man
- Strings zusammenhängen, Heredocs und ähnliches verwenden könnte, ist es oft einfacher
- nur das Skript zu erstellen und in PHP Tags einzubetten. <code>HeadScript</code> lässt
- das zu, und erfasst es in den Stack:
- </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>
- Die folgenden Annahmen werden gemacht:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Das Skript wird an den Stack angefügt. Wenn es den Stack ersetzen soll oder an
- den Anfang hinzugefügt werden soll, muß 'SET' oder 'PREPEND' als erstes Argument
- an <code>captureStart()</code> übergeben werden.
- </para>
- </listitem>
- <listitem>
- <para>
- Der MIME Typ des Skripts wird mit 'text/javascript' angenommen; wenn ein anderer
- Typ spezifiziert werden soll muß dieser als zweites Argument an
- <code>captureStart()</code> übergeben werden.
- </para>
- </listitem>
- <listitem>
- <para>
- Wenn irgendwelche zusätzlichen Attribute für das <code><script></code> Tag
- spezifiziert werden sollen, müssen diese in einem Array als drittes Argument an
- <code>captureStart()</code> übergeben werden.
- </para>
- </listitem>
- </itemizedlist>
- </example>
- </sect3>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|