Zend_View-Helpers-HeadScript.xml 10 KB

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