<!-- EN-Revision: 12116 -->
<sect1 id="zend.layout.options">
    <title>Zend_Layout options de configuration</title>

    <para><classname>Zend_Layout</classname> possède quelques options. Vous pouvez les spécifier grâce à des accesseurs.
    Autrement, en passant un tableau ou un objet <classname>Zend_Config</classname> au constructeur, ou à <code>startMvc()</code>.
    Un tableau d'options peut aussi être passé à <code>setOptions()</code>, un objet <classname>Zend_Config</classname> peut être
    passé à <code>setConfig()</code>. Les options de configuration sont les suivantes :</para>

    <itemizedlist>
        <listitem>
            <para><emphasis>layout</emphasis> : le nom du script de layout. L'inflecteur traduit alors ceci en nom de
            fichier. Par défaut, il s'agit de "layout" traduit vers "layout.phtml". Les accesseurs sont
            <code>setLayout()</code> et <code>getLayout()</code>.</para>
        </listitem>

        <listitem>
            <para><emphasis>layoutPath</emphasis> : l'url de base vers les scripts de layout. Les accesseurs sont
            <code>setLayoutPath()</code> et <code>getLayoutPath()</code>.</para>
        </listitem>

        <listitem>
            <para><emphasis>contentKey</emphasis> : la variable de layout utilisée pour accéder au contenu par défaut
            (lorsqu'utilisée couplée avec MVC). La valeur par défaut est "content". Pour les accesseurs :
            <code>setContentKey()</code> et <code>getContentKey()</code>.</para>
        </listitem>

        <listitem>
            <para><emphasis>mvcSuccessfulActionOnly</emphasis> : si une action envoie une exception et que cette option
            vaut <code>true</code>, alors le layout ne sera pas rendu. (Ceci évite un double rendu alors que le plugin
            <link linkend="zend.controller.plugins.standard.errorhandler">ErrorHandler</link> est activé). Par défaut
            cette option est à <code>true</code>. Ses accesseurs : <code>setMvcSuccessfulActionOnly()</code> et
            <code>getMvcSuccessfulActionOnly()</code>.</para>
        </listitem>

        <listitem>
            <para><emphasis>view</emphasis> : l'objet de vue (<classname>Zend_View</classname>) utilisée par le layout pour rendre
            son script. Utilisé avec MVC, <classname>Zend_Layout</classname> cherchera à récupérer la vue via l'aide <link
            linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer</link>, si aucun objet de vue ne lui est
            passé explicitement. Les accesseurs sont <code>setView()</code> et <code>getView()</code>.</para>
        </listitem>

        <listitem>
            <para><emphasis>helperClass</emphasis> : la classe représentant l'aide d'action lorsque
            <classname>Zend_Layout</classname> est utilisé avec les composants MVC. Par défaut il s'agit de
            <classname>Zend_Layout_Controller_Action_Helper_Layout</classname>. Les accesseurs sont <code>setHelperClass()</code>
            et <code>getHelperClass()</code>.</para>
        </listitem>

        <listitem>
            <para><emphasis>pluginClass</emphasis> : la classe représentant le plugin de contrôleur frontal lorsque
            <classname>Zend_Layout</classname> est utilisé avec les composants MVC. Par défaut, il s'agit de
            <classname>Zend_Layout_Controller_Plugin_Layout</classname>. Les accesseurs sont <code>setPluginClass()</code> et
            <code>getPluginClass()</code>.</para>
        </listitem>

        <listitem>
            <para><emphasis>inflector</emphasis> : l'inflecteur utilisé pour la résolution des noms de layout vers les
            scripts de layout. Voyez <link linkend="zend.layout.advanced.inflector">la documentation spécifique pour
            plus de détails</link>. Les accesseurs sont <code>setInflector()</code> et
            <code>getInflector()</code>.</para>
        </listitem>
    </itemizedlist>

    <note>
        <title>Vous devez passer les helperClass et pluginClass à startMvc()</title>

        <para>Pour que les paramètres <code>helperClass</code> et <code>pluginClass</code> agissent, vous devez les
        passer en options à <code>startMvc()</code>. Si vous les spécifiez après, ils seront ignorés.</para>
    </note>

    <sect2 id="zend.layout.options.examples">
        <title>Exemples</title>

        <para>Les exemples sont basés sur les paramètres <code>$options</code> et <code>$config</code> suivants :</para>

        <programlisting role="php"><![CDATA[
$options = array(
    'layout'     => 'foo',
    'layoutPath' => '/chemin/vers/layouts',
    'contentKey' => 'CONTENT'
    // ignorés si MVC n'est pas utilisé
);
]]></programlisting>

        <programlisting role="php"><![CDATA[
/**
[layout]
layout = "foo"
layoutPath = "/chemin/vers/layouts"
contentKey = "CONTENT"
*/
$config = new Zend_Config_Ini('/chemin/vers/layout.ini', 'layout');
]]></programlisting>

        <example id="zend.layout.options.examples.constructor">
            <title>Passer des options au constructeur ou à startMvc()</title>

            <para>Le constructeur et la méthode statique <code>startMvc()</code> acceptent soit un tableau d'options,
            soit un objet <classname>Zend_Config</classname>.</para>

            <para>Voyons le cas du tableau :</para>

            <programlisting role="php"><![CDATA[
// Avec le constructeur :
$layout = new Zend_Layout($options);

// Avec startMvc():
$layout = Zend_Layout::startMvc($options);
]]></programlisting>

            <para>Et maintenant avec l'objet de configuration :</para>

            <programlisting role="php"><![CDATA[
$config = new Zend_Config_Ini('/chemin/vers/layout.ini', 'layout');

// Cas du constructeur:
$layout = new Zend_Layout($config);

// Via startMvc():
$layout = Zend_Layout::startMvc($config);
]]></programlisting>

            <para>C'est la manière la plus simple de configurer votre objet <classname>Zend_Layout</classname>.</para>
        </example>

        <example id="zend.layout.options.examples.setoptionsconfig">
            <title>Utilisation de setOptions() et setConfig()</title>

            <para>Pour configurer <classname>Zend_Layout</classname> après l'avoir instanciée, utilisez les méthodes
            <code>setOptions()</code> et <code>setConfig()</code> sur l'objet :</para>

            <programlisting role="php"><![CDATA[
// Utilisation d'un tableau d'options:
$layout->setOptions($options);

// Utilisation d'un objet Zend_Config:
$layout->setConfig($options);
]]></programlisting>

            <para>Notez cependant que certaines options comme <code>pluginClass</code> et <code>helperClass</code>
            n'auront aucun effet avec ses méthodes. Elles doivent être passées au constructeur ou à la méthode
            <code>startMvc()</code>.</para>
        </example>

        <example id="zend.layout.options.examples.accessors">
            <title>Utilisation des accesseurs</title>

            <para>Enfin, vous pouvez aussi configurer votre objet de <classname>Zend_Layout</classname> grâce à ses accesseurs.
            Ils peuvent s'utiliser chaînés (interface fluide):</para>

            <programlisting role="php"><![CDATA[
$layout->setLayout('foo')
       ->setLayoutPath('/chemin/vers/layouts')
       ->setContentKey('CONTENT');
]]></programlisting>
        </example>
    </sect2>
</sect1>