2
0

Zend_View-Helpers-HeadScript.xml 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15617 -->
  3. <!-- Reviewed: no -->
  4. <sect3 id="zend.view.helpers.initial.headscript">
  5. <title>HeadScript Helfer</title>
  6. <para>
  7. Das HTML <code>&lt;script&gt;</code> Element wird verwendet um entweder Clientseitige
  8. Skriptelemente Inline zu ermöglichen oder um eine entfernte Ressource zu verlinken die
  9. Clientseitigen Skriptcode enthält. Der <code>HeadScript</code> Helfer erlaubt es beides zu
  10. Managen.
  11. </para>
  12. <para>
  13. Der <code>HeadScript</code> Helfer unterstützt die folgenden Methoden für das Setzen und
  14. Hinzufügen von Skripten:
  15. </para>
  16. <itemizedlist>
  17. <listitem><para><code>appendFile($src, $type = 'text/javascript',
  18. $attrs = array())</code></para></listitem>
  19. <listitem><para><code>offsetSetFile($index, $src, $type = 'text/javascript',
  20. $attrs = array())</code></para></listitem>
  21. <listitem><para><code>prependFile($src, $type = 'text/javascript',
  22. $attrs = array())</code></para></listitem>
  23. <listitem><para><code>setFile($src, $type = 'text/javascript',
  24. $attrs = array())</code></para></listitem>
  25. <listitem><para><code>appendScript($script, $type = 'text/javascript',
  26. $attrs = array())</code></para></listitem>
  27. <listitem><para><code>offsetSetScript($index, $script, $type = 'text/javascript',
  28. $attrs = array())</code></para></listitem>
  29. <listitem><para><code>prependScript($script, $type = 'text/javascript',
  30. $attrs = array())</code></para></listitem>
  31. <listitem><para><code>setScript($script, $type = 'text/javascript',
  32. $attrs = array())</code></para></listitem>
  33. </itemizedlist>
  34. <para>
  35. Im Falle der <code>*File()</code> Methoden ist <code>$src</code> der entfernte Ort des
  36. Skriptes das geladen werden soll; das ist üblicherweise in der Form einer URL oder eines
  37. Pfades. Für die <code>*Script()</code> Methoden sind <code>$script</code> die clientseitigen
  38. Skript Direktiven die in diesem Element verwendet werden sollen.
  39. </para>
  40. <note>
  41. <title>Abhängige Kommentare setzen</title>
  42. <para>
  43. <code>HeadScript</code> erlaubt es ein Script Tag in abhängige Kommentare zu setzen, das
  44. es erlaubt es vor speziellen Browsern zu verstecken. Um abhängige Tags zu setzen, muß
  45. der abhängige Wert als Teil des <code>$attrs</code> Parameters im Methodenaufruf
  46. übergeben werden.
  47. </para>
  48. <example id="zend.view.helpers.initial.headscript.conditional">
  49. <title>Headscript mit abhängigen Kommentaren</title>
  50. <programlisting language="php"><![CDATA[
  51. // Scripte hinzufügen
  52. $this->headScript()->appendFile(
  53. '/js/prototype.js',
  54. 'text/javascript',
  55. array('conditional' => 'lt IE 7')
  56. );
  57. ]]></programlisting>
  58. </example>
  59. </note>
  60. <para>
  61. <code>HeadScript</code> erlaubt auch das Erfassen von Skripten; das kann nützlich sein wenn
  62. man ein Clientseitiges Skript programmtechnisch erstellen und es dann woanders platzieren
  63. will. Seine Verwendung wird in einem Beispiel anbei gezeigt.
  64. </para>
  65. <para>
  66. Letztendlich kann die <code>headScript()</code> Methode verwendet werden um Skript Elemente
  67. schnell hinzuzufügen; die Signatur hierfür ist <code>headScript($mode = 'FILE', $spec,
  68. $placement = 'APPEND')</code>. Der <code>$mode</code> ist
  69. entweder 'FILE' oder 'SCRIPT', anhängig davon ob das Skript verlinkt oder definiert wird.
  70. <code>$spec</code> ist entweder die Skriptdatei die verlinkt wird, oder der Skriptcode
  71. selbst. <code>$placement</code> sollte entweder 'APPEND', 'PREPEND' oder 'SET' sein.
  72. </para>
  73. <para>
  74. <code>HeadScript</code> überschreibt <code>append()</code>, <code>offsetSet()</code>,
  75. <code>prepend()</code>, und <code>set()</code> um um die Verwendung der speziellen Methoden
  76. wie vorher gezeigt zu erzwingen. Intern wird jedes Element als <code>stdClass</code> Token
  77. gespeichert, welches später mit Hilfe der <code>itemToString()</code> Methode serialisiert
  78. wird. Das erlaubt es Prüfungen an den Elementen im Stack vorzunehmen, und diese Elemente
  79. optional zu ändern, einfach durch das Modifizieren des zurückgegebenen Objektes.
  80. </para>
  81. <para>
  82. Der <code>HeadScript</code> Helfer ist eine konkrete Implementation des
  83. <link linkend="zend.view.helpers.initial.placeholder">Platzhalter Helfers</link>.
  84. </para>
  85. <note>
  86. <title>InlineScript für HTML Body Skripte verwenden</title>
  87. <para>
  88. <code>HeadScript</code>'s Schwester Helfer,
  89. <link linkend="zend.view.helpers.initial.inlinescript">InlineScript</link>, sollte
  90. verwendet werden wenn man Inline Skripte im HTML <code>body</code> inkludieren will. Die
  91. Platzierung von Skripten am Ende des Dokuments ist eine gängige Praxis für die
  92. schnellere Auslieferung von Seiten, speziell wenn 3rd Party Analyse Skripte verwendet
  93. werden.
  94. </para>
  95. </note>
  96. <note>
  97. <title>Andere Attribute werden stanadrdmäßig ausgeschaltet</title>
  98. <para>
  99. Standardmäßig wird <code>HeadScript</code> nur <code>&lt;script&gt;</code> Attribute
  100. darstellen die von W3C abgesegnet sind. Diese beinhalten 'type', 'charset', 'defer',
  101. 'language', und 'src'. Trotzdem, verwenden einige Javascript Frameworks, vorallem
  102. <ulink url="http://www.dojotoolkit.org/">Dojo</ulink>, eigene Attribute um Verhalten
  103. zu ändern. Um solche Attribute zu erlauben, können diese über die
  104. <code>setAllowArbitraryAttributes()</code> Methode eingeschaltet werden:
  105. </para>
  106. <programlisting language="php"><![CDATA[
  107. $this->headScript()->setAllowArbitraryAttributes(true);
  108. ]]></programlisting>
  109. </note>
  110. <example id="zend.view.helpers.initial.headscript.basicusage">
  111. <title>Grundsätzliche Verwendung des HeadScript Helfers</title>
  112. <para>
  113. Neue Skript Tags können jederzeit spezifiziert werden. Wie vorher beschrieben können
  114. diese Links auf externe Ressourcen Dateien oder Skripte sein.
  115. </para>
  116. <programlisting language="php"><![CDATA[
  117. // Skripte hinzufügen
  118. $this->headScript()->appendFile('/js/prototype.js')
  119. ->appendScript($onloadScript);
  120. ]]></programlisting>
  121. <para>
  122. Die Reihenfolge ist oft wichtig beim Clientseitigen Skripting; es kann notwendig sein
  123. sicherzustellen das Bibliotheken in einer speziellen Reihenfolge geladen werden da Sie
  124. Abhängigkeiten zueinander haben; die verschiedenen append, prepend und offsetSet
  125. Direktiven können hierbei helfen:
  126. </para>
  127. <programlisting language="php"><![CDATA[
  128. // Skripte in eine Reihenfolge bringen
  129. // An einem bestimmten Offset Platzieren um Sicherzustellen
  130. // das es als letztes geladen wird
  131. $this->headScript()->offsetSetFile(100, '/js/myfuncs.js');
  132. // Scriptige Effekte verwenden (append verwendet den nächsten Index, 101)
  133. $this->headScript()->appendFile('/js/scriptaculous.js');
  134. // Aber Basis Prototype Skripte müssen immer als erstes geladen werden
  135. $this->headScript()->prependFile('/js/prototype.js');
  136. ]]></programlisting>
  137. <para>
  138. Wenn man letztendlich damit fertig ist am alle Skripte im Layoutskript darzustellen, muß
  139. der Helfer einfach ausgegeben werden:
  140. </para>
  141. <programlisting language="php"><![CDATA[
  142. <?php echo $this->headScript() ?>
  143. ]]></programlisting>
  144. </example>
  145. <example id="zend.view.helpers.initial.headscript.capture">
  146. <title>Skripte einfachen mit Hilfe des HeadScript Helfers</title>
  147. <para>
  148. Manchmal mit ein Clientseitiges Skript programmtechnisch erstellt werden. Wärend man
  149. Strings zusammenhängen, Heredocs und ähnliches verwenden könnte, ist es oft einfacher
  150. nur das Skript zu erstellen und in PHP Tags einzubetten. <code>HeadScript</code> lässt
  151. das zu, und erfasst es in den Stack:
  152. </para>
  153. <programlisting language="php"><![CDATA[
  154. <?php $this->headScript()->captureStart() ?>
  155. var action = '<?php echo $this->baseUrl ?>';
  156. $('foo_form').action = action;
  157. <?php $this->headScript()->captureEnd() ?>
  158. ]]></programlisting>
  159. <para>
  160. Die folgenden Annahmen werden gemacht:
  161. </para>
  162. <itemizedlist>
  163. <listitem>
  164. <para>
  165. Das Skript wird an den Stack angefügt. Wenn es den Stack ersetzen soll oder an
  166. den Anfang hinzugefügt werden soll, muß 'SET' oder 'PREPEND' als erstes Argument
  167. an <code>captureStart()</code> übergeben werden.
  168. </para>
  169. </listitem>
  170. <listitem>
  171. <para>
  172. Der MIME Typ des Skripts wird mit 'text/javascript' angenommen; wenn ein anderer
  173. Typ spezifiziert werden soll muß dieser als zweites Argument an
  174. <code>captureStart()</code> übergeben werden.
  175. </para>
  176. </listitem>
  177. <listitem>
  178. <para>
  179. Wenn irgendwelche zusätzlichen Attribute für das <code>&lt;script&gt;</code> Tag
  180. spezifiziert werden sollen, müssen diese in einem Array als drittes Argument an
  181. <code>captureStart()</code> übergeben werden.
  182. </para>
  183. </listitem>
  184. </itemizedlist>
  185. </example>
  186. </sect3>
  187. <!--
  188. vim:se ts=4 sw=4 et:
  189. -->