<sect1 id="zend.view.controllers">
    <title>Skrypt kontrolera</title>

    <para>
        Kontroler jest miejscem, w którym tworzysz i konfigurujesz instancję
        Zend_View. Potem przypisujesz do tej instancji zmienne zawierające dane,
        a następnie wybierasz skrypt widoku, który ma być zrenderowany.
    </para>

    <sect2 id="zend.view.controllers.assign">

        <title>Przekazywanie zmiennych</title>

        <para>
            Twój skrypt kontrolera powinien przypisać potrzebne zmienne do
            instancji widoku, zanim przekaże kontrolę do skryptu widoku. Możesz
            to zrobić przypisując zmienne do zmiennych instancji widoku:
        </para>

        <programlisting role="php"><![CDATA[
$view = new Zend_View();
$view->a = "Hay";
$view->b = "Bee";
$view->c = "Sea";
]]>
        </programlisting>

        <para>
            Jednak mogłoby być niewygodnie gdy zmienne, które masz przekazać
            są zebrane w tablicy lub obiekce.
        </para>

        <para>
            Metoda assign() pozwala na automatyczne przypisanie wszystkich
            zmiennych z tablicy lub obiektu. Poniższe przykłady dają taki sam
            efekt jak poprzedni przykład, w którym zmienne były przypisywane
            pojedynczo:
        </para>

        <programlisting role="php"><![CDATA[
$view = new Zend_View();

// przypisuje tablicę zmiennych w postaci par
// klucz-wartość, gdzie klucz jest nazwą przypisanej
// zmiennej, a wartość jest jej wartościa.
$array = array(
    'a' => "Hay",
    'b' => "Bee",
    'c' => "Sea",
);
$view->assign($array);

// robi to samo z publicznymi właściwościami
// obiektu. zauważ jak rzutujemy obiekt na
// tablicę podczas przypisywania
$obj = new StdClass;
$obj->a = "Hay";
$obj->b = "Bee";
$obj->c = "Sea";
$view->assign((array) $obj);
]]>
        </programlisting>

        <para>
            Oczywiście możesz także przypisywać zmienne jedna po drugiej,
            przekazując nazwę zmiennej jako łańcuch znaków, a potem wartość
            zmiennej:
        </para>

        <programlisting role="php"><![CDATA[
$view = new Zend_View();
$view->assign('a', "Hay");
$view->assign('b', "Bee");
$view->assign('c', "Sea");
]]>
        </programlisting>

    </sect2>

    <sect2 id="zend.view.controllers.render">

        <title>Wykonywanie skryptu widoku</title>

        <para>
            Kiedy już przypisałeś wszystkie zmienne, kontroler powinien przekazać
            obiektowi Zend_View informację o wykonaniu konkretnego skryptu widoku.
            Zrób to wywołując metodę render(). Zauważ, że ta metoda zwróci
            wygenerowany widok zamiast wyświetlając go, więc musisz sam go wyświetlić
            za pomocą funkcji echo() lub print().
        </para>

        <programlisting role="php"><![CDATA[
$view = new Zend_View();
$view->a = "Hay";
$view->b = "Bee";
$view->c = "Sea";
echo $view->render('someView.php');
]]>
        </programlisting>

    </sect2>

    <sect2 id="zend.view.controllers.script-paths">

        <title>Ścieżki skryptu widoku</title>

        <para>
            Domyślnie, Zend_View oczekuje, że skrypty widoku są umieszczone
            względnie do skryptu wywołującego. Na przykład jeśli
            Twój skrypt kontrolera jest w katalogu "/path/to/app/controllers"
            i wywołuje on $view->render('someView.php'), to Zend_View będzie
            szukać pliku "/path/to/app/controllers/someView.php".
        </para>

        <para>
            Oczywiście, Twoje skrypty są pewnie umieszczone gdzieś indziej.
            Aby poinformować Zend_View o tym, gdzie ma szukać skryptów, użyj
            metody setScriptPath().
        </para>

        <programlisting role="php"><![CDATA[
$view = new Zend_View();
$view->setScriptPath('/path/to/app/views');
]]>
        </programlisting>

        <para>
            Teraz kiedy wywołasz metodę $view->render('someView.php'), będzie ona
            szukać pliku "/path/to/app/views/someView.php".
        </para>

        <para>
            Oczywiście możesz dodawać ścieżki na stos używająć metody addScriptPath().
            Gdy dodajesz ścieżki na stos, Zend_View będzie szukać skryptu widoku
            począwszy od ostatnio dodanej ścieżki. To pozwala na nadpisanie domyślnych
            widoków za pomocą innych widoków, dzięki czemu możesz tworzyć różne
            "motywy" czy "skórki" dla niektórych widoków, zostawiając inne bez zmian.
        </para>

        <programlisting role="php"><![CDATA[
$view = new Zend_View();
$view->addScriptPath('/path/to/app/views');
$view->addScriptPath('/path/to/custom/');

// teraz gdy wywołasz $view->render('booklist.php'), Zend_View będzie
// wpierw szukać pliku "/path/to/custom/booklist.php", potem
// "/path/to/app/views/booklist.php", a ostatecznie pliku "booklist.php"
// w bieżącym katalogu
]]>
        </programlisting>

    </sect2>

</sect1>