Browse Source

First three parts of the quickstart tutorial

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@21565 44c647ce-9c0f-0410-b52a-842ac1e357ba
tomeks 16 years ago
parent
commit
a179c487c6

+ 234 - 0
documentation/manual/pl/tutorials/quickstart-create-layout.xml

@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20977 -->
+<!-- Reviewed: no -->
+<sect1 id="learning.quickstart.create-layout">
+    <title>Utworzenie layoutu</title>
+
+    <para>
+        Jak nie trudno zauważyć, skrypty widoków z poprzedniej części zawierały jedynie fragmenty
+        kodu HTML a nie całe strony. Jest to intencjonalne i ma na celu przygotowanie akcji tak aby
+        zwracały jedynie zawartość związaną z samą akcją a nie aplikacją jako taką.
+    </para>
+
+    <para>
+        Teraz należy umieścić generowaną treść w pełnoprawnej stronie HTML. Przydatne jest również 
+        nadanie całej aplikacji jednolitego, zwięzłego wyglądu. Aby to osiągnąć zostanie użyty
+        globalny layout (wzór) strony.
+    </para>
+
+    <para>
+        Zend Framework używa dwóch wzorów projektowych przy implementacji layoutów: <ulink
+        url="http://martinfowler.com/eaaCatalog/twoStepView.html">Widok dwustopniowy (Two Step View)</ulink> and
+        <ulink
+        url="http://java.sun.com/blueprints/corej2eepatterns/Patterns/CompositeView.html">Widok
+        złożony (Composite View)</ulink>.
+        <emphasis>Widok dwustopniowy</emphasis> jest najczęściej powiązany z <ulink
+        url="http://www.martinfowler.com/eaaCatalog/transformView.html">Widokiem przekształconym
+        (Transform View)</ulink> - podstawową cechą jest założenie, że aplikacja tworzy widok
+        podrzędny, który zostaje umieszczony w widoku głównym (layout) i dopiero taki - złożony
+        widok jest przetwarzany do pokazania użytkownikowi.
+        <emphasis>Widok złożony</emphasis> natomiast, zakłada tworzenie jednego bądź wielu
+         autonomicznych widoków bez relacji rodzic-potomek.
+    </para>
+
+    <para>
+        <link linkend="zend.layout">Zend_Layout</link> jest komponentem, który łączy te wzorce w
+        aplikacji Zend Framework. Każdy skrypt widoku (view script) posiada własne elementy i
+        nie musi zajmować się wyświetlaniem elementów wspólnych dla całej strony.
+    </para>
+
+    <para>
+        Mogą powstać sytuacje, w których niezbędne okaże się umieszczenie globalnych elementów w 
+        pojedynczym widoku. W tym celu Zend Framework udostępnia szereg
+        <emphasis>pojemników (placeholders)</emphasis>, które umożliwają dostęp do takich
+        elementów z poziomu lokalnego skryptu widoku.
+    </para>
+
+    <para>
+        Aby rozpocząć korzystanie z Zend_Layout należy najpierw poinstruować bootstrap aby
+        włączył zasób <classname>Layout</classname>. Można to osiągnąć za pomocą komendy
+        <command>zf enable layout</command> (w katalogu tworzonego projektu):
+    </para>
+
+    <programlisting language="shell"><![CDATA[
+% zf enable layout
+Layouts have been enabled, and a default layout created at
+application/layouts/scripts/layout.phtml
+A layout entry has been added to the application config file.
+]]></programlisting>
+
+    <para>
+        Tak jak jest to napisane w potwierdzeniu komendy, plik
+        <filename>application/configs/application.ini</filename> został zaktualizowany i
+        zawiera następujący wpis w sekcji <constant>production</constant>:
+    </para>
+
+    <programlisting language="ini"><![CDATA[
+; application/configs/application.ini
+
+; Dodane do sekcji [production]:
+resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
+]]></programlisting>
+
+    <para>
+        W rezultacie plik INI powinien wyglądać następująco:
+    </para>
+
+    <programlisting language="ini"><![CDATA[
+; application/configs/application.ini
+
+[production]
+phpSettings.display_startup_errors = 0
+phpSettings.display_errors = 0
+includePaths.library = APPLICATION_PATH "/../library"
+bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
+bootstrap.class = "Bootstrap"
+appnamespace = "Application"
+resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
+resources.frontController.params.displayExceptions = 0
+resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
+
+[staging : production]
+
+[testing : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
+
+[development : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
+]]></programlisting>
+
+    <para>
+        Dodany zapis powoduje, że aplikacja szuka skryptów widoku w katalogu
+        <filename>application/layouts/scripts</filename>.
+        Należy zauważyć, iż taki katalog wraz z plikiem <filename>layout.phtml</filename>
+        zostały utworzone w strukturze projektu przez narzędzie wiersza poleceń zf.
+    </para>
+
+    <para>
+        Następną przydatną rzeczą będzie upewnienie się, że deklaracja XHTML DocType jest 
+        umieszczona i poprawnie sformułowana. Aby to osiągnąć należy dodać zasób do bootstrapa.
+    </para>
+
+    <para>
+        Najprostszym sposobem na dodanie zasobu bootstrap jest utworzenie chronionej metody o
+        nazwie zaczynającej się na <methodname>_init</methodname>. Celem jest zainicjalizowanie
+        deklaracji DocType więc nowa metoda w klasie bootstrap może się nazywać
+        <methodname>_initDoctype()</methodname>:
+    </para>
+
+    <programlisting language="php"><![CDATA[
+// application/Bootstrap.php
+
+class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
+{
+    protected function _initDoctype()
+    {
+    }
+}
+]]></programlisting>
+
+    <para>
+        W ciele metody należy powiadomić zasób widoku aby użył odpowiedni DocType. Tylko skąd
+        wziąć obiekt widoku? Najłatwiejszym rozwiązaniem jest zainicjalizowanie zasobu
+        <classname>View</classname>. Potem można pobrać obiekt i go użyć.
+    </para>
+
+    <para>
+        Aby zainicjalizować zasób widoku należy dodać następującą linijkę do pliku
+        <filename>application/configs/application.ini</filename> w sekcji
+        <constant>production</constant>:
+    </para>
+
+    <programlisting language="ini"><![CDATA[
+; application/configs/application.ini
+
+; Dodanie do sekcji [production]:
+resources.view[] =
+]]></programlisting>
+
+    <para>
+        Ten zapis inicjalizuje widok bez żadnych opcji (pisownia '[]' oznacza, że "view" jest
+        tablicą bez żadnych kluczy ani wartości).
+    </para>
+
+    <para>
+        Teraz, skoro widok jest skonfigurowany, można wrócić do metody
+        <methodname>_initDoctype()</methodname>.
+        W niej należy upewnić się, że zasób <classname>View</classname> został zainicjowany (na
+        podstawie zapisów w pliku konfiguracyjnym), pobrać obiekt widoku i go skonfigurować:
+    </para>
+
+    <programlisting language="php"><![CDATA[
+// application/Bootstrap.php
+
+class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
+{
+    protected function _initDoctype()
+    {
+        $this->bootstrap('view');
+        $view = $this->getResource('view');
+        $view->doctype('XHTML1_STRICT');
+    }
+}
+]]></programlisting>
+
+    <para>
+        Po zainicjalizowaniu <classname>Zend_Layout</classname> i ustawieniu deklaracji Doctype,
+        należy utworzyć główny layout strony:
+    </para>
+
+    <programlisting language="php"><![CDATA[
+<!-- application/layouts/scripts/layout.phtml -->
+<?php echo $this->doctype() ?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+  <title>Zend Framework Quickstart Application</title>
+  <?php echo $this->headLink()->appendStylesheet('/css/global.css') ?>
+</head>
+<body>
+<div id="header" style="background-color: #EEEEEE; height: 30px;">
+    <div id="header-logo" style="float: left">
+        <b>ZF Quickstart Application</b>
+    </div>
+    <div id="header-navigation" style="float: right">
+        <a href="<?php echo $this->url(
+            array('controller'=>'guestbook'),
+            'default',
+            true) ?>">Guestbook</a>
+    </div>
+</div>
+
+<?php echo $this->layout()->content ?>
+
+</body>
+</html>
+]]></programlisting>
+
+    <para>
+        Za pomocą view helpera <methodname>layout()</methodname> pobierana jest zawartość
+        przeznaczona do wyświetlenia (znajduje się w zmiennej "content"). Można ją umieszczać w
+        innych częściach layoutu ale w większości przypadków takie podejście wystarczy.
+    </para>
+
+    <para>
+        Należy zwrócić uwagę na użycie view helpera <methodname>headLink()</methodname>. Jest to
+        prosty sposób na zachowanie kontroli nad elementami &lt;link&gt; dodawanymi w
+        różnych miejscach aplikacji oraz na wygenerowanie kodu HTML dla tych elementów
+        w pliku layoutu bądź innego view scriptu.
+        Jeśli zajdzie potrzeba dodania dodatkowego arkusza CSS w pojedynczej akcji to
+        można to zrobić używając <methodname>headLink()</methodname>(na generowanej
+        stronie pojawi się automatycznie).
+    </para>
+
+    <note>
+        <title>Punkt kontrolny</title>
+
+        <para>
+            Teraz należy udać się pod adres "http://localhost" i sprawdzić efekty oraz
+            wytworzony kod. Powinien pojawić się nagłówek XHTML, elementy head, title oraz body.
+        </para>
+    </note>
+</sect1>

+ 537 - 0
documentation/manual/pl/tutorials/quickstart-create-project.xml

@@ -0,0 +1,537 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20996 -->
+<!-- Reviewed: no -->
+<sect1 id="learning.quickstart.create-project">
+    <title>Utworzenie projektu</title>
+
+    <para>
+        Aby utworzyć nowy projekt należy wcześniej pobrać i rozpakować Zend Framework.
+    </para>
+
+    <sect2 id="learning.quickstart.create-project.install-zf">
+        <title>Instalacja Zend Framework</title>
+
+        <para>
+            Najprostszym sposobem pobrania Zend Framework razem z całym środowiskiem PHP jest 
+            zainstalowanie
+            <ulink url="http://www.zend.com/en/products/server-ce/downloads">Zend Server</ulink>.
+            Zend Server zawiera instalatory dla Mac OSX, Windows, Fedora Core oraz Ubuntu. 
+            Oprócz tego dostępna jest uniwersalna paczka instalacyjna kompatybilna z większością
+            dystrybucji Linux.
+        </para>
+
+        <para>
+            Po zainstalowaniu Zend Server, pliki frameworka są dostępne w katalogu
+            <filename>/usr/local/zend/share/ZendFramework</filename> dla Mac OSX oraz Linux,
+            lub <filename>C:\Program Files\Zend\ZendServer\share\ZendFramework</filename> dla
+            Windows. Zmienna <constant>include_path</constant> będzie automatycznie ustawiona
+            tak aby obejmowała Zend Framework.
+        </para>
+
+        <para>
+            Alternatywnie można <ulink url="http://framework.zend.com/download/latest">pobrać 
+            najnowszą wersję Zend Framework</ulink> i rozpakować zawartość do dowolnego katalogu;
+            należy zapamiętać wybraną lokalizację instalacji.
+        </para>
+
+        <para>
+            Opcjonalnie w pliku <filename>php.ini</filename> można umieścić w 
+            zmiennej <constant>include_path</constant> ścieżkę do 
+            podkatalogu <filename>library/</filename> znajdującego się w pobranym archiwum.
+        </para>
+
+        <para>
+            Instalacja zakończona! Zend Framework jest zainstalowany i gotowy do użycia.
+        </para>
+    </sect2>
+
+    <sect2 id="learning.quickstart.create-project.create-project">
+        <title>Tworzenie projektu</title>
+
+        <note>
+            <title>Narzędzie wiersza poleceń zf</title>
+
+            <para>
+                W katalogu instalacji Zend Framework znajduje się podkatalog
+                <filename>bin/</filename>.
+                Zawiera on skrypty <filename>zf.sh</filename> oraz <filename>zf.bat</filename> 
+                odpowiednio dla użytkowników Unix oraz Windows. Należy zapamiętać ścieżkę dostępu
+                do tych skryptów.
+            </para>
+
+            <para>
+                Jeśli w dokumentacji pojawią się odniesienia do komendy <command>zf</command>,
+                prosze pamiętać o zastąpieniu ich pełną ścieżką dostępu do odpowiedniego skryptu.
+                Dla systemów Unix można skorzystać z polecenia alias:
+                <command>alias zf.sh=path/to/ZendFramework/bin/zf.sh</command>.
+            </para>
+
+            <para>
+                W przypadku problemów z konfiguracją narzędzia wiersza poleceń proszę zapoznać się
+                z <link linkend="zend.tool.framework.clitool.setup-general">jego instrukcją</link>.
+            </para>
+        </note>
+
+        <para>
+            Aby utworzyć nowy projekt należy otworzyć terminal (dla Windows - wiersz polecenia 
+            <command>Start -> Run</command> i polecenie <command>cmd</command>). Należy przejść do 
+            katalogu nowego projektu. Następnie, używając ścieżki do odpowiedniego skryptu, należy
+            wywołać następujące polecenie:
+        </para>
+
+        <programlisting language="shell"><![CDATA[
+% zf create project quickstart
+]]></programlisting>
+
+        <para>
+            Wywołanie tego polecenia spowoduje utworzenie podstawowej struktury katalogów, razem
+            z początkowymi kontrolerami i widokami. Drzewo katalogów powinno wyglądać podobnie do
+            poniższego:
+        </para>
+
+        <programlisting language="text"><![CDATA[
+quickstart
+|-- application
+|   |-- Bootstrap.php
+|   |-- configs
+|   |   `-- application.ini
+|   |-- controllers
+|   |   |-- ErrorController.php
+|   |   `-- IndexController.php
+|   |-- models
+|   `-- views
+|       |-- helpers
+|       `-- scripts
+|           |-- error
+|           |   `-- error.phtml
+|           `-- index
+|               `-- index.phtml
+|-- library
+|-- public
+|   |-- .htaccess
+|   `-- index.php
+`-- tests
+    |-- application
+    |   `-- bootstrap.php
+    |-- library
+    |   `-- bootstrap.php
+    `-- phpunit.xml
+]]></programlisting>
+
+        <para>
+            W tym momencie, jeśli Zend Framework nie jest umieszczony w zmiennej 
+            <constant>include_path</constant>, zaleca się przekopiowanie lub umieszczenie
+            linku symbolicznego do podkatalogu <filename>library/</filename> projektu.
+            Najistotniejszy jest aby zawartość katalogu <filename>library/Zend/</filename>
+            instalacji Zend Framework była dostępna w katalogu <filename>library/</filename>
+            projektu. Na systemach Unix można tego dokonać za pomocą następujących poleceń:
+        </para>
+
+        <programlisting language="shell"><![CDATA[
+# Symlink:
+% cd library; ln -s path/to/ZendFramework/library/Zend .
+
+# Kopia:
+% cd library; cp -r path/to/ZendFramework/library/Zend .
+]]></programlisting>
+
+        <para>
+            W systemach Windows najprostrzym rozwiązaniem będzie wykonanie tego z poziomu Explorera.
+        </para>
+
+        <para>
+            Teraz, kiedy nowy projekt jest utworzony należy zapoznać się z podstawowymi założeniami:
+            bootstrapem, konfiguracją, kontrolerami oraz widokami.
+        </para>
+    </sect2>
+
+    <sect2 id="learning.quickstart.create-project.bootstrap">
+        <title>Bootstrap</title>
+
+        <para>
+            Klasa <classname>Bootstrap</classname> definiuje zasoby i komponenty do inicjalizacji.
+            Domyślnie uruchamiany jest <link linkend="zend.controller.front">Front Controller</link>
+            ze standardowym katalogiem w którym szukane są kontrolery akcji (o których mowa później)
+            ustawionym na <filename>application/controllers/</filename>. Klasa przedstawia się 
+            następująco:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// application/Bootstrap.php
+
+class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
+{
+}
+]]></programlisting>
+
+        <para>
+            Jak widać, na początek wymagane jest nie wiele.
+        </para>
+    </sect2>
+
+    <sect2 id="learning.quickstart.create-project.configuration">
+        <title>Konfiguracja</title>
+
+        <para>
+            Sam Zend Framework nie wymaga konfiguracji ale tworzona aplikacja - najczęściej tak.
+            Standardowo plik konfiguracyjny umieszczony jest w 
+            <filename>application/configs/application.ini</filename>. Zawiera on podstawowe
+            instrukcje ustawienia środowiska PHP (np. włączanie/wyłączanie raportowania błędów),
+            wskazanie ścieżki i klasy <classname>Bootstrap</classname> oraz ścieżkę do katalogu
+            kontrolerów akcji. Domyślny plik wygląda następująco:
+        </para>
+
+        <programlisting language="ini"><![CDATA[
+; application/configs/application.ini
+
+[production]
+phpSettings.display_startup_errors = 0
+phpSettings.display_errors = 0
+includePaths.library = APPLICATION_PATH "/../library"
+bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
+bootstrap.class = "Bootstrap"
+appnamespace = "Application"
+resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
+resources.frontController.params.displayExceptions = 0
+
+[staging : production]
+
+[testing : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
+
+[development : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
+]]></programlisting>
+
+        <para>
+            Należy zwrócić uwagę na kilka cech tego pliku. Po pierwsze, używając konfiguracji
+            w pliku INI, można bezpośrednio używać stałych; <constant>APPLICATION_PATH</constant>
+            to stała PHP (opisana później). Dodatkowo, zdefiniowane zostały oddzielne sekcje:
+            production, staging, testing oraz development. Ostatnie trzy dziedziczą ustawienia ze
+            środowiska produkcyjnego (production). Podany sposób stanowi użyteczny przykład 
+            organizacji konfiguracji, dzięki której odpowiednie ustawienia są dostępne w
+            odpowiednim momencie cyklu rozwoju oprogramowania.
+        </para>
+    </sect2>
+
+    <sect2 id="learning.quickstart.create-project.action-controllers">
+        <title>Kontrolery akcji (action controllers)</title>
+
+        <para>
+            Zawarte w aplikacji <emphasis>kontrolery akcji</emphasis> przechowują ścieżki 
+            działania programu i odwzorowują żądania na odpowiednie modele i widoki. 
+        </para>
+
+        <para>
+            Kontroler akcji powinien posiadać co najmniej jedną metodę o nazwie zakończonej na
+            "Action". Te metody stają się dostępne dla użytkowników. Domyślnie URLe w Zend
+            Framework stosują się do schematu <constant>/kontroler/akcja</constant>, gdzie
+            "kontroler" jest odwzorowany na nazwę kontrolera akcji
+            (z pominięciem sufiksu "Controller")
+            a "akcja" jest odwzorowana na metodę w tym kontrolerze
+            (z pominięciem sufiksu "Action").
+        </para>
+
+        <para>
+            W typowym projekcie niezbędny jest kontroler <classname>IndexController</classname>,
+            który jest początkowym punktem odniesienia i stanowi stronę początkową aplikacji,
+            oraz <classname>ErrorController</classname> czyli kontroler obsługujący błędy HTTP 404
+            (brak kontrolera i/lub akcji) lub HTTP 500 (błąd aplikacji).
+        </para>
+
+        <para>
+            Domyślnie <classname>IndexController</classname> wygląda następująco:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// application/controllers/IndexController.php
+
+class IndexController extends Zend_Controller_Action
+{
+
+    public function init()
+    {
+        /* Inicjalizacja kontrolera akcji */
+    }
+
+    public function indexAction()
+    {
+        // ciało akcji
+    }
+}
+]]></programlisting>
+
+        <para>
+            Domyślny <classname>ErrorController</classname> przedstawia się jak poniżej:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+// application/controllers/ErrorController.php
+
+class ErrorController extends Zend_Controller_Action
+{
+
+    public function errorAction()
+    {
+        $errors = $this->_getParam('error_handler');
+
+        switch ($errors->type) {
+            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
+            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
+            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
+
+                // błąd 404 -- brak kontrolera i/lub akcji
+                $this->getResponse()->setHttpResponseCode(404);
+                $this->view->message = 'Page not found';
+                break;
+            default:
+                // błąd aplikacji
+                $this->getResponse()->setHttpResponseCode(500);
+                $this->view->message = 'Application error';
+                break;
+        }
+
+        $this->view->exception = $errors->exception;
+        $this->view->request   = $errors->request;
+    }
+}
+]]></programlisting>
+
+        <para>
+            Należy zwrócić uwagę, iż <classname>IndexController</classname> nie zawiera żadnego
+            kodu oraz <classname>ErrorController</classname> odnosi się do właściwości "view". To
+            prowadzi do następnego tematu.
+        </para>
+    </sect2>
+
+    <sect2 id="learning.quickstart.create-project.views">
+        <title>Widoki (views)</title>
+
+        <para>
+            Widoki (view scripts) w Zend Framework są napisane w starym dobrym PHP. Domyślnie
+            znajdują się w <filename>application/views/scripts/</filename>, gdzie są w dalszym 
+            stopniu dzielone wg. kontrolerów do których należą. W obecnym przypadku istnieją
+            dwa kontrolery: <classname>IndexController</classname> oraz 
+            <classname>ErrorController</classname>. Oznacza to, że w katalogu widoków powinny się
+            znaleźć dwa podkatalogi: <filename>index/</filename> oraz <filename>error/</filename>.
+            W nich należy umieścić skrypty widoków odpowiednie dla każdej z akcji danego kontrolera.
+            Domyślnie tworzone są skrypty <filename>index/index.phtml</filename> oraz
+            <filename>error/error.phtml</filename>.
+        </para>
+
+        <para>
+            Skrypty widoków mogą zawierać dowolny kod HTML i używać <code>&lt;?php</code> jako tagów
+            otwarcia i <code>?&gt;</code> jako tagów zamknięcia dla poleceń PHP.
+        </para>
+
+        <para>
+            Domyślnie skrypt <filename>index/index.phtml</filename> zawiera następującą zawartość:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+<!-- application/views/scripts/index/index.phtml -->
+<style>
+
+    a:link,
+    a:visited
+    {
+        color: #0398CA;
+    }
+
+    span#zf-name
+    {
+        color: #91BE3F;
+    }
+
+    div#welcome
+    {
+        color: #FFFFFF;
+        background-image: url(http://framework.zend.com/images/bkg_header.jpg);
+        width:  600px;
+        height: 400px;
+        border: 2px solid #444444;
+        overflow: hidden;
+        text-align: center;
+    }
+
+    div#more-information
+    {
+        background-image: url(http://framework.zend.com/images/bkg_body-bottom.gif);
+        height: 100%;
+    }
+
+</style>
+<div id="welcome">
+    <h1>Welcome to the <span id="zf-name">Zend Framework!</span><h1 />
+    <h3>This is your project's main page<h3 />
+    <div id="more-information">
+        <p>
+            <img src="http://framework.zend.com/images/PoweredBy_ZF_4LightBG.png" />
+        </p>
+
+        <p>
+            Helpful Links: <br />
+            <a href="http://framework.zend.com/">Zend Framework Website</a> |
+            <a href="http://framework.zend.com/manual/en/">Zend Framework
+                Manual</a>
+        </p>
+    </div>
+</div>
+]]></programlisting>
+
+        <para>
+            Skrypt <filename>error/error.phtml</filename> jest nieco bardziej interesujący - używa
+            instrukcji warunkowych PHP:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+<!-- application/views/scripts/error/error.phtml -->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN";
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+  <title>Zend Framework Default Application</title>
+</head>
+<body>
+  <h1>An error occurred</h1>
+  <h2><?php echo $this->message ?></h2>
+
+  <?php if ('development' == $this->env): ?>
+
+  <h3>Exception information:</h3>
+  <p>
+      <b>Message:</b> <?php echo $this->exception->getMessage() ?>
+  </p>
+
+  <h3>Stack trace:</h3>
+  <pre><?php echo $this->exception->getTraceAsString() ?>
+  </pre>
+
+  <h3>Request Parameters:</h3>
+  <pre><?php echo var_export($this->request->getParams(), 1) ?>
+  </pre>
+  <?php endif ?>
+
+</body>
+</html>
+]]></programlisting>
+    </sect2>
+
+    <sect2 id="learning.quickstart.create-project.vhost">
+        <title>Utworzenie wirtualnego hosta</title>
+
+        <para>
+            Na potrzeby tego wprowadzenia, założono użycie <ulink url="http://httpd.apache.org/">
+            web serwera Apache</ulink>. Zend Framework działa równie dobrze z innymi 
+            serwerami - włączając Microsoft Internet Information Services, lighttpd, nginx i 
+            wiele innych. Większość deweloperów jednak jest najbardziej zaznajomiona z Apache, który
+            ułatwia zrozumienie struktury katalogów Zend Framework i posiada szerokie możliwości
+            przepisywania linków (mod_rewrite).
+        </para>
+
+        <para>
+            Aby utworzyć wirtualnego hosta należy odnaleźć plik <filename>httpd.conf</filename> oraz
+            ewentualne pozostałe pliki konfiguracyjne serwera. Popularne katalogi:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <filename>/etc/httpd/httpd.conf</filename> (Fedora, RHEL i inne)
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <filename>/etc/apache2/httpd.conf</filename> (Debian, Ubuntu i inne)
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <filename>/usr/local/zend/etc/httpd.conf</filename> (Zend Server
+                    na maszynach *nix)
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <filename>C:\Program Files\Zend\Apache2\conf</filename> (Zend Server
+                    na maszynach Windows)
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            W pliku <filename>httpd.conf</filename> (lub <filename>httpd-vhosts.conf</filename>
+            dla niektórych systemów) należy dokonać dwóch zmian. Po pierwsze - upewnić się, że
+            jest zainicjowana zmienna <varname>NameVirtualHost</varname>; Typowe ustawienie to
+            "*:80". Po drugie - zdefiniować wirtualnego hosta:
+        </para>
+
+        <programlisting language="apache"><![CDATA[
+<VirtualHost *:80>
+    ServerName quickstart.local
+    DocumentRoot /sciezka/do/quickstart/public
+
+    SetEnv APPLICATION_ENV "development"
+
+    <Directory /sciezka/do/quickstart/public>
+        DirectoryIndex index.php
+        AllowOverride All
+        Order allow,deny
+        Allow from all
+    </Directory>
+</VirtualHost>
+]]></programlisting>
+
+        <para>
+            Należy zwrócić uwagę na kilka szczegółów. Po pierwsze, <varname>DocumentRoot</varname>
+            wskazuje na podkatalog projektu o nazwie <filename>public</filename>. To oznacza, że
+            jedynie pliki znajdujące się w tym podkatalogu mogą być zwracane przez serwer 
+            bezpośrednio. Po drugie, instrukcje <varname>AllowOverride</varname>, 
+            <varname>Order</varname> oraz <varname>Allow</varname> umożliwiają stosowanie plików
+            <filename>htacess</filename> w projekcie. W środowisku programistycznym (development)
+            jest to uznawane za dobrą praktykę ponieważ eliminuje potrzebę resetowania
+            serwera po każdej zmianie instrukcji konfiguracyjnych. Jednak w środowisku produkcyjnym
+            (production), zalecane jest przeniesienie zawartości pliku <filename>htaccess</filename>
+            do głównego pliku konfiguracyjnego serwera oraz wyłączenie obsługi 
+            <filename>htaccess</filename>. Po trzecie, instrukcja
+            <varname>SetEnv</varname> pozwala zainicjować zmienną środowiskową oraz
+            przekazać ją do PHP i <filename>index.php</filename>.
+            Dzięki temu stanie się ona podstawą stałej
+            <constant>APPLICATION_ENV</constant> aplikacji Zend Framework.
+            W środowisku produkcyjnym można ją ustawić na "production" lub zrezygnować 
+            z tej instrukcji ("production" jest domyślną wartością stałej 
+            <constant>APPLICATION_ENV</constant>).
+        </para>
+
+        <para>
+            Na koniec należy dodać wpis w pliku <filename>hosts</filename> odnoszący się do wartości
+            <varname>ServerName</varname>. Na systemach *nix jest to zazwyczaj
+            <filename>/etc/hosts</filename>. Na maszynach Windows typową lokalizacją jest
+            <filename>C:\WINDOWS\system32\drivers\etc</filename>. Wpis powinien być podobny do:
+        </para>
+
+        <programlisting language="text"><![CDATA[
+127.0.0.1 quickstart.local
+]]></programlisting>
+
+        <para>
+            Po uruchomieniu webserwera (lub restarcie) projekt powinien być gotowy do użytku.
+        </para>
+    </sect2>
+
+    <sect2 id="learning.quickstart.create-project.checkpoint">
+        <title>Punkt kontrolny</title>
+
+        <para>
+            W tym momencie aplikacja Zend Framework jest gotowa do uruchomienia. Po wpisaniu
+            w przeglądarce nazwy serwera (ustalonej w poprzednim punkcie) powinna się pojawić
+            strona powitalna.
+        </para>
+    </sect2>
+</sect1>

+ 128 - 0
documentation/manual/pl/tutorials/quickstart-intro-mvc.xml

@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20106 -->
+<!-- Reviewed: no -->
+<sect1 id="learning.quickstart.intro">
+    <title>Zend Framework &amp; wprowadzenie do MVC</title>
+
+    <sect2 id="learning.quickstart.intro.zf">
+        <title>Zend Framework</title>
+
+        <para>
+	        Zend Framework to otwarty, zorientowany obiektowo framework aplikacji webowych
+	        przeznaczony dla <acronym>PHP</acronym> 5. ZF jest często określany mianem 'biblioteki
+	        komponentów' ponieważ składa się z wielu, luźno powiązanych komponentów, których można
+	        używać niezależnie od siebie.
+	        Dodatkowo Zend Framework oferuje zaawansowaną implementację
+	        wzorca projektowego Model-Widok-Kontroler
+	        (Model-View-Controller - <acronym>MVC</acronym>),
+	        która może zostać użyta do skonstruowania podstawowej struktury aplikacji.
+	        Pełna lista komponentów Zend Framework razem z krótkim opisem znajduje się w dziale
+	        <ulink url="http://framework.zend.com/about/components">components overview</ulink>.
+	        Wprowadzenie "QuickStart" stanowi wstęp do poznania najczęściej używanych komponentów
+	        Zend Framework, takich jak:
+	        <classname>Zend_Controller</classname>, 
+	        <classname>Zend_Layout</classname>,
+	        <classname>Zend_Config</classname>,
+	        <classname>Zend_Db</classname>,
+            <classname>Zend_Db_Table</classname>,
+            <classname>Zend_Registry</classname>, oraz kilku klas pomocniczych (view helpers).
+        </para>
+
+        <para>
+	        Za pomocą tych komponentów w ciągu kilkudziesięciu minut zostanie utworzona 
+	        prosta aplikacja oparta na bazie danych - księga gości (guest book). Pełny kod
+	        źródłowy tej aplikacji jest dostępny w następujących archiwach:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    <ulink 
+                    url="http://framework.zend.com/demos/ZendFrameworkQuickstart.zip">zip</ulink>
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    <ulink
+                url="http://framework.zend.com/demos/ZendFrameworkQuickstart.tar.gz">tar.gz</ulink>
+                </para>
+            </listitem>
+        </itemizedlist>
+    </sect2>
+
+    <sect2 id="learning.quickstart.intro.mvc">
+        <title>Model-View-Controller</title>
+
+        <para>
+	        Tak więc, czym dokładnie jest ten będący na ustach wszystkich wzorzec
+	        <acronym>MVC</acronym>? I dlaczego miałoby to mnie obchodzić?
+	        <acronym>MVC</acronym> to o wiele więcej niż kolejny skrót,
+	        który można mimowolnie wplątać w wypowiedź aby spróbować wywrzeć wrażenie na innych;
+	        z biegiem czasu <acronym>MVC</acronym> nie bez przyczyny stał się standardem
+	        projektowania nowoczesnych aplikacji webowych.
+	        Większość aplikacji sieciowych opiera się w znacznej mierze
+	        na funkcjonalnościach, które można podzielić na trzy kategorie: warstwa prezentacji,
+	        logika biznesowa, dostęp do danych.
+	        Wzorzec <acronym>MVC</acronym> ułatwia zaprojektowanie oprogramowania z
+	        zachowaniem odrębności każdej z tych warstw.
+	        W efekcie kod prezentacji może zostać umieszczony w jednej części aplikacji,
+	        logika biznesowa w drugiej a dostęp do danych w trzeciej.
+	        Wielu deweloperów przekonało się, że dobrze zdefiniowane odseparowanie jest
+	        nieodzowne dla utrzymania kodu w zorganizowanej 
+	        strukturze, zwłaszcza przy projektach wieloosobowych.
+        </para>
+
+        <note>
+            <title>Więcej informacji</title>
+
+            <para>
+                Omawiany wzorzec można podzielić na następujące części:
+            </para>
+
+            <para>
+                <inlinegraphic width="321" scale="100" align="center" valign="middle"
+                    fileref="figures/learning.quickstart.intro.mvc.png" format="PNG" />
+            </para>
+
+            <itemizedlist>
+                <listitem>
+                    <para>
+	                    <emphasis>Model</emphasis> - Ta część aplikacji definiuje jej podstawowe
+	                    funkcjonalności w sposób mniej bądź bardziej abstrakcyjny. Sposób dostępu
+	                    do danych oraz logika biznesowa również mogą być zdefiniowane w tym miejscu.
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+	                    <emphasis>View (Widok)</emphasis> - Ten element definiuje wszystko to co
+	                    zostaje zaprezentowane użytkownikowi. Najczęściej kontrolery przekazują
+	                    dane do każdego z widoków do uformowania i przedstawienia w określonym
+	                    formacie. Poprzez widoki następuje również odebranie danych od użytkownika.
+	                    W tej części będzie się znajdował kod HTML aplikacji <acronym>MVC</acronym>.
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+	                    <emphasis>Controller (Kontroler)</emphasis> - Ten składnik łączy cały 
+	                    wzorzec razem. Kontrolery manipulują modelami, decydują o widoku, jaki
+	                    zostanie zaprezentowany (na podstawie interakcji z użytkownikiem).
+	                    Odpowiadają także za przekazanie danych do widoków lub przekazanie
+	                    kontroli do innego kontrolera. Większość ekspertów MVC zaleca
+                    <ulink url="http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model">
+                        tworzenie możliwie jak najmniejszych kontrolerów</ulink>.
+                    </para>
+                </listitem>
+            </itemizedlist>
+
+            <para>
+	            Oczywiście, aby zgłębić temat wzorca <acronym>MVC</acronym>
+	            <ulink url="http://ootips.org/mvc-pattern.html">należałoby go rozwinąć</ulink>
+	            ale dla zrozumienia opisywanej aplikacji - księgi gości - powyższy, minimalny
+	            opis powinien wystarczyć.
+            </para>
+        </note>
+    </sect2>
+</sect1>