File: Zend_Layout-QuickStart.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 (269 lines) | stat: -rw-r--r-- 10,520 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
260
261
262
263
264
265
266
267
268
269
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.layout.quickstart">
    <title>Zend_Layout - Démarrage rapide</title>

    <para>
        Il y a deux modes d'utilisation de <classname>Zend_Layout</classname> : avec Zend
        Framework <acronym>MVC</acronym>, et sans.
    </para>

    <sect2 id="zend.layout.quickstart.layouts">
        <title>Scripts de layout</title>

        <para>
            Dans tous les cas, un script de layout est nécessaire. Les scripts de layout
            utilisent simplement Zend_View (ou une implémentation particulière personnalisée). Les
            variables de layout sont enregistrées dans le <link
            linkend="zend.view.helpers.initial.placeholder">placeholder</link> <code>Layout</code>,
            et peuvent être accédées via l'aide de vue placeholder ou directement en tant que
            propriétés de l'objet layout.
        </para>

        <para>Par exemple :</para>

        <programlisting language="php"><![CDATA[
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Mon Site</title>
</head>
<body>
<?php
    // récupère la clé "content" via l'aide de vue layout :
    echo $this->layout()->content;

    // récupère la clé "foo" via l'aide de vue placeholder :
    echo $this->placeholder('Zend_Layout')->foo;

    // récupère l'objet layout, et accède à diverses clés :
    $layout = $this->layout();
    echo $layout->bar;
    echo $layout->baz;
?>
</body>
</html>
]]></programlisting>

        <para>
            Toutes les aides de vue enregistrées sont accessibles dans
            <classname>Zend_Layout</classname> car il utilise <classname>Zend_View</classname> pour
            son propre rendu. Vous pouvez aussi accéder aux variables de la vue. Les aides <link
            linkend="zend.view.helpers.initial.placeholder">placeholder </link> sont très pratiques
            pour l'accès aux éléments tels que &lt;head&gt;, les scripts, les méta, etc. :
        </para>

        <programlisting language="php"><![CDATA[
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <?php echo $this->headTitle() ?>
    <?php echo $this->headScript() ?>
    <?php echo $this->headStyle() ?>
</head>
<body>
    <?php echo $this->render('header.phtml') ?>

    <div id="nav"><?php echo $this->placeholder('nav') ?></div>

    <div id="content"><?php echo $this->layout()->content ?></div>

    <?php echo $this->render('footer.phtml') ?>
</body>
</html>
]]></programlisting>
    </sect2>

    <sect2 id="zend.layout.quickstart.mvc">
        <title>Utilisation de Zend_Layout avec le système MVC de Zend Framework</title>

        <para>
            <classname>Zend_Controller</classname> propose une manière d'étendre ses
            fonctionnalités au travers de <link linkend="zend.controller.plugins">plugins de
            contrôleur frontal</link> et <link linkend="zend.controller.actionhelpers">d'aides
            d'action</link>. <classname>Zend_View</classname> propose aussi des <link
            linkend="zend.view.helpers">aides</link>. <classname>Zend_Layout</classname> utilise
            toutes ces possibilités lorsqu'employé avec les composants <acronym>MVC</acronym>.
        </para>

        <para>
            <methodname>Zend_Layout::startMvc()</methodname> crée une instance de
            <classname>Zend_Layout</classname> avec des paramètres de configuration optionnels.
            Cette méthode enregistre aussi un plugin de contrôleur frontal qui s'occupe du rendu du
            layout rempli, lorsque la boucle de distribution est terminée. Elle enregistre également
            une aide d'action qui permet aux actions d'accéder à l'objet <code>layout</code>. Enfin,
            l'aide de vue layout, elle, donne accès à l'objet layout depuis la vue.
        </para>

        <para>
            Regardons d'abord comment initialiser Zend_Layout afin de l'utiliser dans un
            contexte <acronym>MVC</acronym>
        </para>

        <programlisting language="php"><![CDATA[
// Dans le fichier de démarrage (bootstrap)
Zend_Layout::startMvc();
]]></programlisting>

        <para>
            <methodname>startMvc()</methodname> peut prendre en paramètre un tableau d'options ou un objet
            <classname>Zend_Config</classname> pour personnaliser l'instance. Ces options sont
            détaillées dans <xref linkend="zend.layout.options" />.
        </para>

        <para>
            Dans le contrôleur d'action, vous pouvez donc accéder à l'instance de layout via
            l'aide d'action :
        </para>

        <programlisting language="php"><![CDATA[
class FooController extends Zend_Controller_Action
{
    public function barAction()
    {
        // désactive les layouts pour cette action
        $this->_helper->layout->disableLayout();
    }

    public function bazAction()
    {
        // utilise un script de layout différent pour
        // cette action
        $this->_helper->layout->setLayout('foobaz');
    };
}
]]></programlisting>

        <para>
            Dans vos scripts de vue, utiliser l'aide <code>layout</code> pour accéder à
            l'instance de <classname>Zend_Layout</classname>. Notez que cette aide est différente
            des autres car elle ne retourne pas une chaîne, mais bien un objet. Vous pouvez donc
            enchaîner une méthode immédiatement :
        </para>

        <programlisting language="php"><![CDATA[
$this->layout()->setLayout('foo'); // utilise un script de layout spécifique
]]></programlisting>

        <para>
            Autrement, vous pouvez n'importe où accéder à votre instance de
            <classname>Zend_Layout</classname> via la méthode statique <methodname>getMvcInstance()</methodname>
            :
        </para>

        <programlisting language="php"><![CDATA[
// Retourne null si startMvc() n'a pas été appelée auparavant
$layout = Zend_Layout::getMvcInstance();
]]></programlisting>

        <para>
            Enfin, le plugin de contrôleur frontal <classname>Zend_Layout</classname> dispose
            d'une caractéristique annexe au rendu automatique du layout : il analyse les segments de
            l'objet de réponse et les assigne en tant que variables de layout dans vos scripts de
            layout. Le segment "default" est assigné à la variable "content". Ceci permet de mettre
            la main sur le contenu rendu dans l'action principale.
        </para>

        <para>
            Par exemple, supposons que votre code rencontre d'abord
            <methodname>FooController::indexAction()</methodname>, qui va rendre du contenu dans le segment par
            défaut de la réponse. Ensuite il forward vers <methodname>NavController::menuAction()</methodname>,
            qui rend son contenu dans un segment nommé 'nav'. Enfin, vous forwardez vers
            <methodname>CommentController::fetchAction()</methodname> pour récupérer des commentaires, mais vous
            les rendez aussi dans le segment par défaut de la réponse (ce qui va rajouter du
            contenu). Votre script de layout peut alors rendre chaque segment de manière séparée
            :
        </para>

        <programlisting language="php"><![CDATA[
<body>
    <!-- rend /nav/menu -->
    <div id="nav"><?php echo $this->layout()->nav ?></div>

    <!-- rend /foo/index + /comment/fetch -->
    <div id="content"><?php echo $this->layout()->content ?></div>
</body>
]]></programlisting>

        <para>
            Cette approche est particulièrement utile avec <link
            linkend="zend.controller.actionhelpers.actionstack">l'aide d'action</link> ActionStack
            et son <link linkend="zend.controller.plugins.standard.actionstack"> plugin</link> du
            même nom. Vous pouvez les utiliser pour gérer une pile d'actions et ainsi décomposer vos
            processus.
        </para>
    </sect2>

    <sect2 id="zend.layout.quickstart.standalone">
        <title>Utilisation de Zend_Layout en composant indépendant</title>

        <para>
            Pris indépendamment des composants <acronym>MVC</acronym>, Zend_Layout n'offre pas tout à fait les
            mêmes possibilités et la même flexibilité. Cependant, vous bénéficiez de deux avantages
            :
        </para>

        <itemizedlist>
            <listitem>
                <para>Des variables propres aux layouts.</para>
            </listitem>

            <listitem>
                <para>
                    Isolation du script de layout, de son contenu issu des scripts de
                    vue.
                </para>
            </listitem>
        </itemizedlist>

        <para>
            En tant que composant indépendant, instanciez un objet
            <classname>Zend_Layout</classname>, configurez le au moyen d'accesseurs, passez vos
            variables comme des propriétés de l'objet, et rendez le layout :
        </para>

        <programlisting language="php"><![CDATA[
$layout = new Zend_Layout();

// Spécification du chemin des scripts layout:
$layout->setLayoutPath('/chemin/vers/layouts');

// passage de quelques variables :
$layout->content = $content;
$layout->nav     = $nav;

// Utilisation d'un script de layout "foo" :
$layout->setLayout('foo');

// rendu du layout :
echo $layout->render();
]]></programlisting>
    </sect2>

    <sect2 id="zend.layout.quickstart.example">
        <title>Layout d'exemple</title>

        <para>
            Une image valant mieux qu'un paragraphe, voyez donc celle-ci qui décrit
            l'utilisation :
        </para>

        <para>
            <inlinegraphic align="center" fileref="figures/zend.layout.quickstart.example.png"
            format="PNG" valign="middle" />
        </para>

        <para>
            Avec cette approche, vous pouvez régler vos mises en forme <acronym>CSS</acronym>. En positionnement
            absolu, par exemple, vous pourriez rendre la barre de navigation plus tard, en fin. Le
            mécanisme d'obtention du contenu reste le même cependant.
        </para>
    </sect2>
</sect1>