File: Zend_View-Helpers-HeadScript.xml

package info (click to toggle)
zendframework 1.12.9%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 133,584 kB
  • sloc: xml: 1,311,829; php: 570,173; sh: 170; makefile: 125; sql: 121
file content (259 lines) | stat: -rw-r--r-- 10,705 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect3 id="zend.view.helpers.initial.headscript">
    <title>HeadScript Helfer</title>

    <para>
        Das <acronym>HTML</acronym> <emphasis>&lt;script&gt;</emphasis> Element wird verwendet um
        entweder Clientseitige Skriptelemente Inline zu ermöglichen oder um eine entfernte Ressource
        zu verlinken die Clientseitigen Skriptcode enthält. Der <classname>HeadScript</classname>
        Helfer erlaubt es beides zu Managen.
    </para>

    <para>
        Der <classname>HeadScript</classname> Helfer unterstützt die folgenden Methoden für das
        Setzen und Hinzufügen von Skripten:
    </para>

    <itemizedlist>
        <listitem>
            <para>
                <command>appendFile($src, $type = 'text/javascript', $attrs = array())</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>offsetSetFile($index, $src, $type = 'text/javascript', $attrs =
                    array())</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>prependFile($src, $type = 'text/javascript', $attrs = array())</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>setFile($src, $type = 'text/javascript', $attrs = array())</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>appendScript($script, $type = 'text/javascript', $attrs =
                    array())</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>offsetSetScript($index, $script, $type = 'text/javascript', $attrs =
                    array())</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>prependScript($script, $type = 'text/javascript', $attrs =
                    array())</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>setScript($script, $type = 'text/javascript', $attrs = array())</command>
            </para>
        </listitem>
    </itemizedlist>

    <para>
        Im Falle der *<methodname>File()</methodname> Methoden ist <varname>$src</varname> der
        entfernte Ort des Skriptes das geladen werden soll; das ist üblicherweise in der Form einer
        <acronym>URL</acronym> oder eines Pfades. Für die *<methodname>Script()</methodname>
        Methoden sind <varname>$script</varname> die clientseitigen Skript Direktiven die in diesem
        Element verwendet werden sollen.
    </para>

    <note>
        <title>Abhängige Kommentare setzen</title>

        <para>
            <classname>HeadScript</classname> 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 <varname>$attrs</varname> 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>
        <classname>HeadScript</classname> 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 <methodname>headScript()</methodname> Methode verwendet werden um
        Skript Elemente schnell hinzuzufügen; die Signatur hierfür ist <methodname>headScript($mode
            = 'FILE', $spec, $placement = 'APPEND')</methodname>. Der <varname>$mode</varname> ist
        entweder 'FILE' oder 'SCRIPT', anhängig davon ob das Skript verlinkt oder definiert wird.
        <varname>$spec</varname> ist entweder die Skriptdatei die verlinkt wird, oder der Skriptcode
        selbst. <varname>$placement</varname> sollte entweder 'APPEND', 'PREPEND' oder 'SET' sein.
    </para>

    <para>
        <classname>HeadScript</classname> überschreibt <methodname>append()</methodname>,
        <methodname>offsetSet()</methodname>, <methodname>prepend()</methodname>, und
        <methodname>set()</methodname> um um die Verwendung der speziellen Methoden wie vorher
        gezeigt zu erzwingen. Intern wird jedes Element als <property>stdClass</property> Token
        gespeichert, welches später mit Hilfe der <methodname>itemToString()</methodname> 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 <classname>HeadScript</classname> 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>
            <classname>HeadScript</classname>'s Schwester Helfer,
            <link linkend="zend.view.helpers.initial.inlinescript">InlineScript</link>, sollte
            verwendet werden wenn man Inline Skripte im <acronym>HTML</acronym>
            <emphasis>body</emphasis> 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 <classname>HeadScript</classname> nur
            <emphasis>&lt;script&gt;</emphasis> 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
            <methodname>setAllowArbitraryAttributes()</methodname> 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 <acronym>PHP</acronym> Tags einzubetten.
            <classname>HeadScript</classname> 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 <methodname>captureStart()</methodname> übergeben werden.
                </para>
            </listitem>

            <listitem>
                <para>
                    Der <acronym>MIME</acronym> Typ des Skripts wird mit 'text/javascript'
                    angenommen; wenn ein anderer Typ spezifiziert werden soll muß dieser als zweites
                    Argument an <methodname>captureStart()</methodname> übergeben werden.
                </para>
            </listitem>

            <listitem>
                <para>
                    Wenn irgendwelche zusätzlichen Attribute für das
                    <emphasis>&lt;script&gt;</emphasis> Tag spezifiziert werden sollen, müssen diese
                    in einem Array als drittes Argument an <methodname>captureStart()</methodname>
                    übergeben werden.
                </para>
            </listitem>
        </itemizedlist>
    </example>
</sect3>