<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 20827 -->
<!-- Reviewed: no -->
<sect2 id="zend.navigation.pages.mvc">
    <title>Zend_Navigation_Page_Mvc</title>

    <para>
        <acronym>MVC</acronym> Seiten werden definiert indem <acronym>MVC</acronym> Parameter
        verwendet werden wie von der <classname>Zend_Controller</classname> Komponent bekannt. Eine
        <acronym>MVC</acronym> Seite wird intern in der <methodname>getHref()</methodname> Methode
        <classname>Zend_Controller_Action_Helper_Url</classname> verwenden um hrefs zu erstellen,
        und die <methodname>isActive()</methodname> Methode wird die Parameter von
        <classname>Zend_Controller_Request_Abstract</classname> mit den Seiten Parametern verknüpfen
        um zu erkennen ob die Seite aktiv ist.
    </para>

    <table id="zend.navigation.pages.mvc.options">
        <title>MVC Seiten Optionen</title>

        <tgroup cols="4">
            <thead>
                <row>
                    <entry>Schlüssel</entry>
                    <entry>Typ</entry>
                    <entry>Standardwert</entry>
                    <entry>Beschreibung</entry>
                </row>
            </thead>

            <tbody>
                <row>
                    <entry><code>action</code></entry>
                    <entry><type>String</type></entry>
                    <entry><constant>NULL</constant></entry>

                    <entry>
                        Name der Aktion die verwendet wird wenn eine href zur Seite erstellt wird.
                    </entry>
                </row>

                <row>
                    <entry><code>controller</code></entry>
                    <entry><type>String</type></entry>
                    <entry><constant>NULL</constant></entry>

                    <entry>
                        Name des Controllers der verwendet wird wenn eine href zur Seite erstellt
                        wird.
                    </entry>
                </row>

                <row>
                    <entry><code>module</code></entry>
                    <entry><type>String</type></entry>
                    <entry><constant>NULL</constant></entry>

                    <entry>
                        Name des Moduls das verwendet wird wenn eine href zur Seite erstellt wird.
                    </entry>
                </row>

                <row>
                    <entry><code>params</code></entry>
                    <entry><type>Array</type></entry>
                    <entry><methodname>array()</methodname></entry>

                    <entry>
                        Benutzer Parameter die verwendet werden wenn eine href zur Seite erstellt
                        wird.
                    </entry>
                </row>

                <row>
                    <entry><code>route</code></entry>
                    <entry><type>String</type></entry>
                    <entry><constant>NULL</constant></entry>

                    <entry>
                        Name der Route die verwendet wird wenn eine href zur Seite erstellt wird.
                    </entry>
                </row>

                <row>
                    <entry><code>reset_params</code></entry>
                    <entry><code>bool</code></entry>
                    <entry><constant>TRUE</constant></entry>

                    <entry>
                        Ob Benutzer Parameter zurückgesetzt werden sollen wenn eine href zur Seite
                        erstellt wird.
                    </entry>
                </row>
            </tbody>
        </tgroup>
    </table>

    <note>
        <para>
            Die drei Beispiele anbei nehmen ein Standard <acronym>MVC</acronym> Setup an mit der
            <code>default</code> Route an.
        </para>

        <para>
            Die zurückgegebene <acronym>URI</acronym> ist relativ zur <code>baseUrl</code> in
            <classname>Zend_Controller_Front</classname>. Im Beispiel ist die baseUrl der
            Einfachheit halber '/'.
        </para>
    </note>

    <example id="zend.navigation.pages.mvc.example.getHref">
        <title>getHref() erstellt die Seiten URI</title>

        <para>
            Dieses Beispiel zeigt das <acronym>MVC</acronym> Seiten intern
            <classname>Zend_Controller_Action_Helper_Url</classname> verwenden um
            <acronym>URI</acronym>s zu erstellen wenn <code>$page->getHref()</code> aufgerufen wird.
        </para>

        <programlisting language="php"><![CDATA[
// getHref() gibt / zurück
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'index',
    'controller' => 'index'
));

// getHref() gibt /blog/post/view zurück
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'view',
    'controller' => 'post',
    'module'     => 'blog'
));

// getHref() gibt /blog/post/view/id/1337 zurück
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'view',
    'controller' => 'post',
    'module'     => 'blog',
    'params'     => array('id' => 1337)
));
]]></programlisting>
    </example>

    <example id="zend.navigation.pages.mvc.example.isActive">
        <title>isActive() erkennt ob eine Seite aktiv ist</title>

        <para>
            Dieses Beispiel zeigt das <acronym>MVC</acronym> Seiten erkennen ob sie aktiv sind indem
            die Parameter verwendet werden die im Anfrage Objekt gefunden werden.
        </para>

        <programlisting language="php"><![CDATA[
/*
 * Ausgeführte Anfrage:
 * - module:     default
 * - controller: index
 * - action:     index
 */
$page1 = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'index',
    'controller' => 'index'
));

$page2 = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'bar',
    'controller' => 'index'
));

$page1->isActive(); // returns true
$page2->isActive(); // returns false

/*
 * Ausgeführte Anfrage:
 * - module:     blog
 * - controller: post
 * - action:     view
 * - id:         1337
 */
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'view',
    'controller' => 'post',
    'module'     => 'blog'
));

// Gibt true zurück, weil die Anfrage die gleichen Module, Controller
// und Aktion hat
$page->isActive();

/*
 * Ausgefürte Anfrage:
 * - module:     blog
 * - controller: post
 * - action:     view
 */
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'view',
    'controller' => 'post',
    'module'     => 'blog',
    'params'     => array('id' => null)
));

// Gibt false zurück weil die Seite den id Parameter in der
// Anfrage gesetzt haben muß
$page->isActive(); // gibt false zurück
]]></programlisting>
    </example>

    <example id="zend.navigation.pages.mvc.example.routes">
        <title>Routen verwenden</title>

        <para>
            Routen können mit <acronym>MVC</acronym> Seite verwendet werden. Wenn eine Seite eine
            Route hat, wird diese Route in <methodname>getHref()</methodname> verwendet um die
            <acronym>URL</acronym> für die Seite zu erstellen.
        </para>

        <para>
            <note>
                <para>
                    Beachte, das wenn die <code>route</code> Eigenschaft in einer Seite verwendet
                    wird, man auch die Standard Parameter spezifizieren sollte die diese Route
                    definieren (module, controller, action, usw.), andernfalls ist die
                    <methodname>isActive()</methodname> Methode nicht dazu in der Lage zu erkennen
                    ob die Seite aktiv ist oder nicht. Der Grund hierfür ist, das es aktuell keinen
                    Weg gibt die Standardparameter von einem
                    <classname>Zend_Controller_Router_Route_Interface</classname> Objekt zu
                    erhalten, oder die aktuelle Route von einem
                    <classname>Zend_Controller_Router_Interface</classname> Objekt.
                </para>
            </note>
        </para>

        <programlisting language="php"><![CDATA[
// Die folgende Route wird den ZF Router hinzugefügt
Zend_Controller_Front::getInstance()->getRouter()->addRoute(
    'article_view', // route name
    new Zend_Controller_Router_Route(
        'a/:id',
        array(
            'module'     => 'news',
            'controller' => 'article',
            'action'     => 'view',
            'id'         => null
        )
    )
);

// Eine Seite wird mit der 'route' Option erstellt
$page = new Zend_Navigation_Page_Mvc(array(
    'label'      => 'A news article',
    'route'      => 'article_view',
    'module'     => 'news',    // wird für isActive() benötigt, siehe oben
    'controller' => 'article', // wird für isActive() benötigt, siehe oben
    'action'     => 'view',    // wird für isActive() benötigt, siehe oben
    'params'     => array('id' => 42)
));

// Gibt /a/42 zurück
$page->getHref();
]]></programlisting>
    </example>
</sect2>
