<sect1 id="zend.layout.options">
    <title>Опции конфигурирования Zend_Layout</title>

    <para>
        <code>Zend_Layout</code> имеет свой набор конфигурационных опций. Они
        могут быть установлены путем вызова соответствующих аксессоров, путем
        передачи массива или объекта <code>Zend_Config</code> конструктору или
        методу <code>startMvc()</code>, передачей массива опций методу
        <code>setOptions()</code> или передачей объекта <code>Zend_Config</code>
        методу <code>setConfig()</code>.
    </para>

    <itemizedlist>
        <listitem><para>
                <emphasis>layout</emphasis>: используемый макет. Использует
                текущий инфлектор для определения пути к скрипту макета,
                соответствующего данному имени макета. По умолчанию используется имя 'layout', и оно соответствует скрипту
                'layout.phtml'. Аксессоры - <code>setLayout()</code> и
                <code>getLayout()</code>.
        </para></listitem>

        <listitem><para>
                <emphasis>layoutPath</emphasis>: базовый путь к скрипту макета.
                Аксессоры: <code>setLayoutPath()</code> и
                <code>getLayoutPath()</code>.
        </para></listitem>

        <listitem><para>
                <emphasis>contentKey</emphasis>: переменная макета, используемая
                для содержимого по умолчанию (при использовании с компонентами
                MVC). Значением по умолчанию является 'content'. Аксессоры -
                <code>setContentKey()</code> и
                <code>getContentKey()</code>.
        </para></listitem>

        <listitem><para>
                <emphasis>mvcSuccessfulActionOnly</emphasis>: действует при
                использовании с компонентами MVC. Если действие бросает
                исключение, и этот флаг установлен в true, то рендеринг макета
                не будет произведен (это сделано для предотвращения повторного
                рендеринга макета при использовании
                <link linkend="zend.controller.plugins.errorhandler">плагина
                ErrorHandler</link>). По умолчанию он установлен в true.
                Аксессоры - <code>setMvcSuccessfulActionOnly()</code> и
                <code>getMvcSuccessfulActionOnly()</code>.
        </para></listitem>

        <listitem><para>
                <emphasis>view</emphasis>: объект вида, используемый для
                рендеринга. При использовании с компонентами MVC
                <code>Zend_Layout</code> будет пытаться использовать объект
                вида, зарегистрированный в
                <link
                    linkend="zend.controller.actionhelpers.viewrenderer"> ViewRenderer</link>, если объект вида не был передан явным
                    образом. Аксессоры - <code>setView()</code> и
                <code>getView()</code>.
        </para></listitem>

        <listitem><para>
                <emphasis>helperClass</emphasis>: класс помощника действия,
                применяемый при использовании <code>Zend_Layout</code> с
                компонентами MVC. По умолчанию это
                <code>Zend_Layout_Controller_Action_Helper_Layout</code>.
                Аксессоры - <code>setHelperClass()</code> и
                <code>getHelperClass()</code>.
        </para></listitem>

        <listitem><para>
                <emphasis>pluginClass</emphasis>: класс плагина
                фронт-контроллера, применяемый  при использовании
                <code>Zend_Layout</code> с компонентами MVC. По умолчанию это
                <code>Zend_Layout_Controller_Plugin_Layout</code>. Аксессоры -
                <code>setPluginClass()</code> и
                <code>getPluginClass()</code>.
        </para></listitem>

        <listitem><para>
                <emphasis>inflector</emphasis>: инфлектор, используемый для
                определения путей к скрипту вида по имени макета, подробнее об
                этом читайте в <link
                    linkend="zend.layout.advanced.inflector">документации по инфлектору <code>Zend_Layout</code></link>.
                Аксессоры - <code>setInflector()</code>
                и <code>getInflector()</code>.
        </para></listitem>
    </itemizedlist>

    <note>
        <title>helperClass и pluginClass должны передаваться startMvc()</title>

        <para>
            Для того чтобы установка опций <code>helperClass</code> и
            <code>pluginClass</code> произвела нужный эффект, эти опции должны
            быть переданы методу <code>startMvc()</code>. Если они
            устанавливаются позже, то это не произведет нужного действия.
        </para>
    </note>

    <sect2 id="zend.layout.options.examples">
        <title>Примеры</title>

        <para>
            Следующие примеры предполагают наличие следующих массива опций и
            объекта конфигурации:
        </para>

        <programlisting language="php"><![CDATA[<?php
$options = array(
    'layout'     => 'foo',
    'layoutPath' => '/path/to/layouts',
    'contentKey' => 'CONTENT',  // игнорируется, если не используется MVC
);
?>]]></programlisting>

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

        <example id="zend.layout.options.examples.constructor">
            <title>Передача опций конструктору или startMvc()</title>

            <para>
                Как конструктор, так и статический метод <code>startMvc()</code>
                могут принимать массив опций или объект <code>Zend_Config</code>
                с опциями для конфигурирования экземпляра
                <code>Zend_Layout</code>.
            </para>

            <para>
                Передача массива:
            </para>

            <programlisting language="php"><![CDATA[<?php
// Использование конструктора:
$layout = new Zend_Layout($options);

// Использование startMvc():
$layout = Zend_Layout::startMvc($options);
?>]]></programlisting>

            <para>
                Использование объекта конфигурации:
            </para>

            <programlisting language="php"><![CDATA[<?php
$config = new Zend_Config_Ini('/path/to/layout.ini', 'layout');

// Использование конструктора:
$layout = new Zend_Layout($config);

// Использование startMvc():
$layout = Zend_Layout::startMvc($config);
?>]]></programlisting>

            <para>
                Как правило, это наиболее легкий способ настройки экземпляра
                <code>Zend_Layout</code>.
            </para>
        </example>

        <example id="zend.layout.options.examples.setoptionsconfig">
            <title>Использование setOption() и setConfig()</title>

            <para>
                Иногда нужно сконфигурировать объект <code>Zend_Layout</code>
                после того, как он уже был инстанцирован. Методы
                <code>setOptions()</code> и <code>setConfig()</code> позволяют
                сделать это легко и быстро:
            </para>

            <programlisting language="php"><![CDATA[<?php
// Использование массива опций:
$layout->setOptions($options);

// Использование объекта Zend_Config:
$layout->setConfig($options);
?>]]></programlisting>

            <para>
                Но следует иметь в виду, что некоторые опции, такие, как
                <code>pluginClass</code> и <code>helperClass</code> не будут
                действовать, если были переданы с использованием этих методов,
                их следует передавать конструктору или методу
                <code>startMvc()</code>.
            </para>
        </example>

        <example id="zend.layout.options.examples.accessors">
            <title>Использование аксессоров</title>

            <para>
                И наконец, вы можете конфигурировать свой экземпляр с
                помощью аксессоров. Все аксессоры реализуют fluent
                interface, это значит, что их вызовы могут следовать
                непосредственно друг за другом:
            </para>

            <programlisting language="php"><![CDATA[<?php
$layout->setLayout('foo')
       ->setLayoutPath('/path/to/layouts')
       ->setContentKey('CONTENT');
?>]]></programlisting>
        </example>
    </sect2>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
