Zend_View-Helpers-HeadScript.xml 9.6 KB

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