<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.layout.options">
    <title>Опции конфигурирования Zend_Layout</title>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        <programlisting language="php"><![CDATA[
/**
[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>
                Как конструктор, так и статический метод <methodname>startMvc()</methodname>
                могут принимать массив опций или объект <classname>Zend_Config</classname>
                с опциями для конфигурирования экземпляра
                <classname>Zend_Layout</classname>.
            </para>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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