Zend_View-Helpers-HeadScript.xml 10 KB

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