<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<sect1 id="zend.cache.frontends">
    <title>Frontendy Zend_Cache</title>

    <sect2 id="zend.cache.core">
        <title>Zend_Cache_Core</title>
        <sect3 id="zend.cache.core.introduction">
            <title>Wprowadzenie</title>
            <para>
                <classname>Zend_Cache_Core</classname> jest specjalnym frontendem ponieważ
                jest on jądrem modułu. Jest on podstawowym frontendem bufora i
                jest rozszerzany przez inne klasy.
            </para>
            <note><para>
                Wszystkie frontendy dziedziczą z klasy <classname>Zend_Cache_Core</classname>
                więc jej metody i opcje (opisane niżej) są także dostępne w innych
                frontendach, dlatego nie będą tu opisane.
            </para></note>
        </sect3>
        <sect3 id="zend.cache.core.options">
            <title>Dostępne opcje</title>
            <para>
                Te opcje są przekazywane do metody fabryki jako pokazano w
                poprzednich przykładach.
            </para>
            <table id="zend.cache.frontends.core.options.table">
                <title>Dostępne opcje</title>
                <tgroup cols="4">
                     <thead>
                          <row>
                            <entry>Opcja</entry>
                            <entry>Typ danych</entry>
                            <entry>Domyślna wartość</entry>
                            <entry>Opis</entry>
                        </row>
                     </thead>
                     <tbody>
                          <row>
                              <entry><emphasis>caching</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>TRUE</constant></entry>
                              <entry>
                                  włącza / wyłącza buforowanie (może być użyteczne do
                                  sprawdzania buforowanych skryptów)
                              </entry>
                          </row>
                          <row>
                              <entry><emphasis>cache_id_prefix</emphasis></entry>
                              <entry><type>String</type></entry>
                              <entry><constant>NULL</constant></entry>
                              <entry>
                                określa rzedrostek dla wszystkich identyfikatorów
                                bufora, jeśli ma wartość <constant>NULL</constant>, nie
                                będzie użyty żaden przedrostek. Przedrostek
                                identyfikatorów zasadniczo tworzy przestrzeń nazw
                                dla buforu, pozwalając na korzystanie z dzielonego
                                bufora przez kilka aplikacji czy serwisów
                                internetowych. Każda aplikacja czy serwis
                                internetowy powinny używać innego przedrostka,
                                więc określone identyfikatory będą mogły być
                                użyte więcej niż raz.
                              </entry>
                          </row>
                          <row>
                              <entry><emphasis>lifetime</emphasis></entry>
                              <entry><type>Integer</type></entry>
                              <entry>3600</entry>
                              <entry>
                                okres ważności bufora (w sekundach), jeśli ustawiony na
                                <constant>NULL</constant>, bufor będzie ważny na zawsze
                              </entry>
                          </row>
                          <row>
                              <entry><emphasis>logging</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>FALSE</constant></entry>
                              <entry>
                                jeśli ma wartość true, aktywowane jest logowanie za pomocą
                                <classname>Zend_Log</classname> is activated (ale system jest wolniejszy)
                              </entry>
                          </row>
                          <row>
                              <entry><emphasis>write_control</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>TRUE</constant></entry>
                              <entry>
                                Włącza / wyłącza kontrolę zapisu (bufor jest odczytywany zaraz
                                po zapisaniu aby wykryć uszkodzone wpisy), włączając kontrolę
                                zapisu lekko zwolniesz zapisywanie bufora, ale nie będzie to
                                miało wpływu na jego odczytywanie (może to wykryć niektóre
                                uszkodzone pliki bufora, ale nie jest to perfekcyjna kontrola)
                              </entry>
                          </row>
                          <row>
                              <entry><emphasis>automatic_serialization</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>FALSE</constant></entry>
                              <entry>
                                Włącza / wyłącza serializację, może być użyte do bezpośredniego
                                zapisywania danych, które nie są łańcuchami znaków (ale jest to wolniejsze)
                              </entry>
                          </row>
                          <row>
                              <entry><emphasis>automatic_cleaning_factor</emphasis></entry>
                              <entry><type>Integer</type></entry>
                              <entry>10</entry>
                              <entry>
                                Włącza / ustawia proces automatycznego czyszczenia (garbage collector):
                                0 oznacza brak automatycznego czyszczenia, 1 oznacza systematyczne czyszczenie
                                bufora, a x &gt; 1 oznacza automatyczne losowe czyszczenie 1 raz na x operacji
                                zapisu.
                              </entry>
                          </row>
                              <row>
                              <entry><emphasis>ignore_user_abort</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>FALSE</constant></entry>
                              <entry>
                                jeśli ma wartość true, komponent ustawi flagę
                                PHP ignore_user_abort wewnątrz metody save()
                                aby zapobiec uszkodzeniom buforu w niektórych
                                przypadkach
                              </entry>
                          </row>
                      </tbody>
                  </tgroup>
              </table>
        </sect3>

        <sect3 id="zend.cache.core.examples">
            <title>Przykłady</title>
            <para>
                Przykład jest podany w dokumentacji na samym początku.
            </para>
            <para>
                Jeśli w buforze przechowujesz tylko łańcuchy znakow (ponieważ z opcją "automatic_serialization" możliwe
                jest przechowywanie wartości logicznych), możesz użyć bardziej kompaktowej konstrukcji:
            </para>
            <programlisting language="php"><![CDATA[
// zakładamy, że mamy już obiekt $cache

$id = 'myBigLoop'; // id bufora czyli "tego co chcemy buforować"

if (!($data = $cache->load($id))) {
    // brak bufora

    $data = '';
    for ($i = 0; $i < 10000; $i++) {
        $data = $data . $i;
    }

    $cache->save($data);

}

// [...] przetwarzaj dane $data (wyświetl je, przekaż itp.)
]]></programlisting>
            <para>
                Jeśli chcesz buforować wiele bloków lub instancji danych, idea
                jest ta sama:
            </para>
            <programlisting language="php"><![CDATA[
// upewnij się, że używasz unikalnych identyfiikatorów:
$id1 = 'foo';
$id2 = 'bar';

// blok 1
if (!($data = $cache->load($id1))) {
    // brak bufora

    $data = '';
    for ($i=0;$i<10000;$i++) {
        $data = $data . $i;
    }

    $cache->save($data);

}
echo($data);

// to nigdy nie jest buforowane
echo('NEVER CACHED! ');

// blok 2
if (!($data = $cache->load($id2))) {
    // brak bufora

    $data = '';
    for ($i=0;$i<10000;$i++) {
        $data = $data . '!';
    }

    $cache->save($data);

}
echo($data);
]]></programlisting>
            <para>
                Jeśli chcesz buforować specjalne wartości (np. wartości logiczne
                przy włączonej opcji "automatic_serialization") lub puste
                łańcuchy znaków, nie możesz używać uproszczonej konstrukcji
                przedstawionej powyżej. Musisz jawnie sprawdzić rekord bufora.
            </para>
            <programlisting language="php"><![CDATA[
// konstrukcja uproszczona (nie działa poprawnie dla pustych
// łańcuchów znaków i wartości logicznych)
if (!($data = $cache->load($id))) {

    // brak bufora

    // [...] tworzymy dane $data

    $cache->save($data);

}

// pracujemy na danych $data

// [...]

// konstrukcja kompletna (działa zawsze)
if (!($cache->test($id))) {

    // brak bufora

    // [...] tworzymy dane $data

    $cache->save($data);

} else {

    // bufor został znaleziony

    $data = $cache->load($id);

}

// pracujemy na danych $data
]]></programlisting>
        </sect3>
    </sect2>

    <sect2 id="zend.cache.frontend.output">
        <title>Zend_Cache_Frontend_Output</title>
        <sect3 id="zend.cache.frontend.output.introduction">
            <title>Wprowadzenie</title>
            <para>
                <classname>Zend_Cache_Frontend_Output</classname> jest frontendem przechwytującym
                dane wyjściowe. Przejmuje on wyświetlanie danych wyjściowych w PHP
                przechwytując wszystko co jest pomiędzy metodami <methodname>start()</methodname>
                oraz <methodname>end()</methodname>.
            </para>
        </sect3>
        <sect3 id="zend.cache.frontend.output.options">
            <title>Dostępne opcje</title>
            <para>
                Ten frontend nie ma żadnych specyficznych opcji innych niż te
                z <classname>Zend_Cache_Core</classname>.
            </para>
        </sect3>

        <sect3 id="zend.cache.frontend.output.examples">
            <title>Przykłady</title>
            <para>
                Przykład jest podany w dokumentacji na samym początku. To są główne różnice:
            </para>
            <programlisting language="php"><![CDATA[
// jeśli bufor nie istnieje, przechwytywane są dane wyjściowe
if (!($cache->start('mypage'))) {

    // wyświetlaj jak zawsze
    echo 'Witaj! ';
    echo 'To jest buforowane ('.time().') ';

    $cache->end(); // kończy się wyświetlanie danych
}

echo 'To nie jest nigdy buforowane ('.time().').';
]]></programlisting>
            <para>
                Używając tej formy bardzo łatwe jest ustawienie buforowania
                danych wyjściowych w twoim aktualnie działającym projekcie przy
                małej ilości przeróbek w kodzie lub przy ich braku.
            </para>
        </sect3>
    </sect2>

    <sect2 id="zend.cache.frontend.function">
        <title>Zend_Cache_Frontend_Function</title>
        <sect3 id="zend.cache.frontend.function.introduction">
            <title>Wprowadzenie</title>
            <para>
                Frontend <classname>Zend_Cache_Frontend_Function</classname> buforuje
                rezultaty wywołań funkcji. Posiada on jedną metodą nazwaną
                <methodname>call()</methodname>, ktora przyjmuje nazwę funkcji oraz
                parametry do wywołania w tablicy.
            </para>
        </sect3>
        <sect3 id="zend.cache.frontend.function.options">
            <title>Dostępne opcje</title>
            <table>
                <title>Dostępne opcje</title>
                <tgroup cols="4">
                     <thead>
                          <row>
                            <entry>Opcja</entry>
                            <entry>Typ danych</entry>
                            <entry>Domyślna wartość</entry>
                            <entry>Opis</entry>
                        </row>
                     </thead>
                     <tbody>
                          <row>
                              <entry><emphasis>cache_by_default</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>TRUE</constant></entry>
                              <entry>
                                  jeśli ma wartość true, wywołania funkcji będą
                                  domyślnie buforowane
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>cached_functions</emphasis></entry>
                              <entry><type>Array</type></entry>
                              <entry></entry>
                              <entry>
                                  nazwy funkcji które mają być zawsze buforowane
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>non_cached_functions</emphasis></entry>
                              <entry><type>Array</type></entry>
                              <entry></entry>
                              <entry>
                                  nazwy funkcji które nigdy nie mają być buforowane
                              </entry>
                         </row>
                      </tbody>
                  </tgroup>
              </table>
        </sect3>

        <sect3 id="zend.cache.frontend.function.examples">
            <title>Przykłady</title>
            <para>
                Użycie funkcji <methodname>call()</methodname> jest takie samo jak użycie
                funkcji <methodname>call_user_func_array()</methodname> w PHP:
            </para>
            <programlisting language="php"><![CDATA[
$cache->call('veryExpensiveFunc', $params);

// $params jest tablicą
// przykładowo aby wywołać (z buforowaniem) funkcję veryExpensiveFunc(1, 'foo', 'bar'), użyj
// $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar'))
]]></programlisting>
            <para>
                Frontend <classname>Zend_Cache_Frontend_Function</classname> jest na tyle sprytny,
                że buforuje zarówno wartość zwracaną przez funkcję, jak i wszystkie
                dane wyjściowe, które ona wypisuje.
            </para>
            <note><para>
                Możesz przekazać dowolną wbudowaną funkcję lub zdefiniowną przez
                użytkownika z wyjątkiem <methodname>array()</methodname>, <methodname>echo()</methodname>,
                <methodname>empty()</methodname>, <methodname>eval()</methodname>, <methodname>exit()</methodname>,
                <methodname>isset()</methodname>, <methodname>list()</methodname>, <methodname>print()</methodname>
                oraz <methodname>unset()</methodname>.
            </para></note>
        </sect3>
    </sect2>

    <sect2 id="zend.cache.frontend.class">
        <title>Zend_Cache_Frontend_Class</title>
        <sect3 id="zend.cache.frontend.class.introduction">
            <title>Wprowadzenie</title>
            <para>
                Frontend <classname>Zend_Cache_Frontend_Class</classname> różnie się od
                frontendu <classname>Zend_Cache_Frontend_Function</classname> tym, że
                umożliwia buforowanie wywołań metod obiektów (także statycznych)
            </para>
        </sect3>
        <sect3 id="zend.cache.frontend.class.options">
            <title>Dostępne opcje</title>
            <table  id="zend.cache.frontends.class.options.table">
                <title>Dostępne opcje</title>
                <tgroup cols="4">
                     <thead>
                          <row>
                            <entry>Opcja</entry>
                            <entry>Typ danych</entry>
                            <entry>Domyślna wartość</entry>
                            <entry>Opis</entry>
                        </row>
                     </thead>
                     <tbody>
                          <row>
                              <entry><emphasis>cached_entity</emphasis> (wymagane)</entry>
                              <entry><type>Mixed</type></entry>
                              <entry></entry>
                              <entry>
                                  jeśli ustawiona jest nazwa klasy, będziemy buforować klasę
                                  abstrakcyjną i używać tylko statycznych wywołań; jeśli ustawiony
                                  jest obiekt będziemy buforować metody tego obiektu
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>cache_by_default</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>TRUE</constant></entry>
                              <entry>
                                  jeśli ma wartość true, wywołania będą domyślnie buforowane
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>cached_methods</emphasis></entry>
                              <entry><type>Array</type></entry>
                              <entry></entry>
                              <entry>
                                  nazwy metod które mają być zawsze buforowane
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>non_cached_methods</emphasis></entry>
                              <entry><type>Array</type></entry>
                              <entry></entry>
                              <entry>
                                  nazwy metod które nie mają być nigdy buforowane
                              </entry>
                         </row>
                      </tbody>
                  </tgroup>
              </table>
        </sect3>

        <sect3 id="zend.cache.frontend.class.examples">
            <title>Przykłady</title>
            <para>
                Na przykład, aby buforować statyczne wywołania:
            </para>
            <programlisting language="php"><![CDATA[
class Test {

    // metoda statyczna
    public static function foobar($param1, $param2) {
        echo "foobar_output($param1, $param2)";
        return "foobar_return($param1, $param2)";
    }

}

// [...]
$frontendOptions = array(
    'cached_entity' => 'Test' // Nazwa klasy
);
// [...]

# buforowane wywołanie
$result = $cache->foobar('1', '2');
]]></programlisting>
            <para>
                Aby buforować klasyczne wywołania metod:
            </para>
            <programlisting language="php"><![CDATA[
class Test {

    private $_string = 'hello !';

    public function foobar2($param1, $param2) {
        echo($this->_string);
        echo "foobar2_output($param1, $param2)";
        return "foobar2_return($param1, $param2)";
    }

}

// [...]
$frontendOptions = array(
    'cached_entity' => new Test() // instancja klasy
);
// [...]

# buforowane wywołanie
$result = $cache->foobar2('1', '2');
]]></programlisting>
        </sect3>
    </sect2>

    <sect2 id="zend.cache.frontends.file">
        <title>Zend_Cache_Frontend_File</title>
        <sect3 id="zend.cache.frontends.file.introduction">
            <title>Wprowadzenie</title>
            <para>
                <classname>Zend_Cache_Frontend_File</classname> jeest frontendem działającym
                w oparciu o datę modyfikacji "głównego pliku". Jest to bardzo
                interesujące, na przykład przy zagadnieniach związanych z konfiguracją
                czy szablonami.
            </para>
            <para>
                Na przykład, jeśli masz plik konfiguracyjny XML, który jest analizowany
                przez funkcję zwracającą obiekt konfiguracji (na przykład <classname>Zend_Config</classname>).
                Za pomocą frontendu <classname>Zend_Cache_Frontend_File</classname>, możesz przechować
                obiekt konfiguracji w buforze (aby zapobiec analizowaniu pliku konfiguracyjnego
                XML za każdym razem), ale przy zależności od "głównego pliku".
                Więc jeśli plik konfiguracyjny XML zostanie zmodyfikowany, bufor natychmiast
                straci ważność.
            </para>
        </sect3>
        <sect3 id="zend.cache.frontends.file.options">
            <title>Dostępne opcje</title>
            <table id="zend.cache.frontends.file.options.table">
                <title>Dostępne opcje</title>
                <tgroup cols="4">
                     <thead>
                          <row>
                            <entry>Opcja</entry>
                            <entry>Typ danych</entry>
                            <entry>Domyślna wartość</entry>
                            <entry>Opis</entry>
                        </row>
                     </thead>
                     <tbody>
                          <row>
                              <entry><emphasis>master_file (mandatory)</emphasis></entry>
                              <entry><type>String</type></entry>
                              <entry></entry>
                              <entry>
                                  kompletna ścieżka i nazwa głównego pliku
                              </entry>
                         </row>
                      </tbody>
                  </tgroup>
              </table>
        </sect3>
        <sect3 id="zend.cache.frontends.file.examples">
            <title>Przykłady</title>
            <para>
                Użycie tego frontendu jest takie same jak <classname>Zend_Cache_Core</classname>.
                Nie ma potrzeby zamieszczania specyficznego przykładu - jedyną rzeczą
                do zrobienia jest zdefiniowanie pliku <emphasis>master_file</emphasis> gdy
                używamy metody fabryki.
            </para>
        </sect3>
    </sect2>

    <sect2 id="zend.cache.frontends.page">
        <title>Zend_Cache_Frontend_Page</title>
        <sect3 id="zend.cache.frontends.page.introduction">
            <title>Wprowadzenie</title>
            <para>
                Frontend <classname>Zend_Cache_Frontend_Page</classname> działa jak <classname>Zend_Cache_Frontend_Output</classname>
                ale jest zaprojektowany dla kompletnej strony. Nie jest możliwe użycie <classname>Zend_Cache_Frontend_Page</classname>
                do buforowania pojedynczego bloku.
            </para>
            <para>
                Z drugiej strony, identyfikator bufora jest obliczany na podstawie
                <varname>$_SERVER['REQUEST_URI']</varname> oraz (zależnie od opcji)
                <varname>$_GET</varname>, <varname>$_POST</varname>, <varname>$_SESSION</varname>, <varname>$_COOKIE</varname>, <varname>$_FILES</varname>.
                Jeszcze lepiej, masz tylko jedną metodę do wywołania (<methodname>start()</methodname>)
                ponieważ metoda <methodname>end()</methodname> jest wywoływana w pełni automatycznie
                na końcu strony.
            </para>
            <para>
                Obecnie nie jest to zaimplementowane, ale planujemy dodać warunkowy system HTTP
                w celu oszczędzania transferu (system wyśle nagłówek HTTP 304 Not Modified jeśli
                bufor istnieje i gdy przeglądarka ma aktualną wersję bufora).
            </para>
        </sect3>
        <sect3 id="zend.cache.frontends.page.options">
            <title>Dostępne opcje (for this frontend in Zend_Cache factory)</title>
            <table id="zend.cache.frontends.page.options.table">
                <title>Dostępne opcje</title>
                <tgroup cols="4">
                     <thead>
                          <row>
                            <entry>Opcja</entry>
                            <entry>Typ danych</entry>
                            <entry>Domyślna wartość</entry>
                            <entry>Opis</entry>
                        </row>
                     </thead>
                     <tbody>
                          <row>
                              <entry><emphasis>http_conditional</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>FALSE</constant></entry>
                              <entry>
                                  użyj systemu http_conditional (obecnie jeszcze nie zaimplementowane)
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>debug_header</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>FALSE</constant></entry>
                              <entry>
                                  jeśli ma wartość true, testowy tekst jest dodawany przed każdą buforowaną stroną
                              </entry>
                         </row>
                         <row>
                               <entry><emphasis>default_options</emphasis></entry>
                              <entry><type>Array</type></entry>
                              <entry><methodname>array(...zobacz niżej...)</methodname></entry>
                              <entry>
                                  asocjacyjna tablica domyślnych opcji:
                                  <itemizedlist>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość true) cache</emphasis> :
                                              bufor jest włączony jeśli ma wartość true
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość false) cache_with_get_variables</emphasis> :
                                              jeśli ma wartość true, buforowanie jest włączone nawet wtedy gdy są jakieś
                                              zmienne w tablicy <varname>$_GET</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość false) cache_with_post_variables</emphasis> :
                                              jeśli ma wartość true, buforowanie jest włączone nawet wtedy gdy są jakieś
                                              zmienne w tablicy <varname>$_POST</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość false) cache_with_session_variables</emphasis> :
                                              jeśli ma wartość true, buforowanie jest włączone nawet wtedy gdy są jakieś
                                              zmienne w tablicy <varname>$_SESSION</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość false) cache_with_files_variables</emphasis> :
                                              jeśli ma wartość true, buforowanie jest włączone nawet wtedy gdy są jakieś
                                              zmienne w tablicy <varname>$_FILES</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość false) cache_with_cookie_variables</emphasis> :
                                              jeśli ma wartość true, buforowanie jest włączone nawet wtedy gdy są jakieś
                                              zmienne w tablicy <varname>$_COOKIE</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość true) makeI_id_with_get_variables</emphasis> :
                                              jeśli ma wartość true, identyfikator bufora będzie zależał od
                                              zawartości tablicy <varname>$_GET</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość true) make_id_with_post_variables</emphasis> :
                                              jeśli ma wartość true, identyfikator bufora będzie zależał od
                                              zawartości tablicy <varname>$_POST</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość true) make_id_with_session_variables</emphasis> :
                                              jeśli ma wartość true, identyfikator bufora będzie zależał od
                                              zawartości tablicy <varname>$_SESSION</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość true) make_id_with_files_variables</emphasis> :
                                              jeśli ma wartość true, identyfikator bufora będzie zależał od
                                              zawartości tablicy <varname>$_FILES</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość true) make_id_with_cookie_variables</emphasis> :
                                              jeśli ma wartość true, identyfikator bufora będzie zależał od
                                              zawartości tablicy <varname>$_COOKIE</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(int, domyślnie wartość false)
                                                  specific_lifetime</emphasis> : jeśli ma wartość
                                                  inną niż false, podana wartość zostanie użyta dla
                                                  danego wyrażenia regularnego
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(array, domyślnie wartość array()) tags</emphasis>
                                              : etykiety dla buforowanego rekordu
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(int, domyślnie wartość null) priority</emphasis> :
                                              priorytet (jeśli backend to obsługuje)
                                          </para>
                                      </listitem>
                                  </itemizedlist>
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>regexps</emphasis></entry>
                              <entry><type>Array</type></entry>
                              <entry><methodname>array()</methodname></entry>
                              <entry>
                                    tablica asocjacyjna do ustawienia opcji tylko dla pewnych adresów REQUEST_URI,
                                    klucze są wyrażeniami regularnymi (PCRE), wartości są asocjacyjnymi tablicami
                                    ze specyficznymi opcjami do ustawienia gdy wyrażenie regularne zostanie
                                    dopasowane do $_SERVER['REQUEST_URI'] (zobacz default_options aby zobaczyć listę
                                    wszystkich dostępnych opcji) ; jeśli kilka wyrażen regularnych będzie pasowało
                                    do $_SERVER['REQUEST_URI'], zostanie użyte tylko te ostatnie
                              </entry>
                         </row>
                         <row>
                             <entry><emphasis>memorize_headers</emphasis></entry>
                             <entry><type>array</type></entry>
                             <entry><methodname>array()</methodname></entry>
                             <entry>
                                 tablica łańcuchów znaków odpowiadająca nazwom nagłówków
                                 HTTP. Wymienione nagłówki będą przechowane wraz
                                 z danymi buforu i odtworzone gdy bufor zostanie użyty
                             </entry>
                         </row>
                      </tbody>
                  </tgroup>
              </table>
        </sect3>
        <sect3 id="zend.cache.frontends.page.examples">
            <title>Przykłady</title>
            <para>
                Użycie <classname>Zend_Cache_Frontend_Page</classname> jest naprawdę łatwe:
            </para>
            <programlisting language="php"><![CDATA[
// [...] // wymagane, konfiguracja i fabryka

$cache->start();
// jeśli bufor jest trafiony, wynik jest wysyłany do przeglądaki a skrypt tutaj kończy działanie

// reszta strony
]]></programlisting>
            <para>
                bardziej kompleksowy przykład, który pokazuje sposób centralnego
                zarządzania buforowaniem w pliku ładującym (przykładowo do użycia
                z klasą <classname>Zend_Controller</classname>)
            </para>
            <programlisting language="php"><![CDATA[
/**
 * Powinieneś unikać tworzenia dużej ilości kodu przed sekcją buforowania na
 * przykład, w celu optymalizacji, instrukcje "require_once" lub
 * "Zend_Loader::loadClass" powinny znajdować się za sekcją buforowania
 */

$frontendOptions = array(
   'lifetime' => 7200,
   'debug_header' => true, // dla testów
   'regexps' => array(
       // buforuj cały kontroler IndexController
       '^/$' => array('cache' => true),

       // buforuj cały kontroler IndexController
       '^/index/' => array('cache' => true),

       // nie buforuj kontrolera ArticleController...
       '^/article/' => array('cache' => false),

       // ...ale buforuj akcję "view"
       '^/article/view/' => array(
           // kontrolera ArticleController
           'cache' => true,

           // i buforuj gdy są dostępne zmienne $_POST
           'cache_with_post_variables' => true,

           // (ale bufor będzie zależał od tablicy $_POST)
           'make_id_with_post_variables' => true,
       )
   )
);

$backendOptions = array(
    'cache_dir' => '/tmp/'
);

// pobieranie obiektu Zend_Cache_Frontend_Page
$cache = Zend_Cache::factory('Page',
                             'File',
                             $frontendOptions,
                             $backendOptions);

$cache->start();
// jeśli bufor jest trafiony, wynik jest wysyłany do przeglądaki
// a skrypt tutaj kończy działanie

// [...] koniec pliku uruchamiającego
// te linie nie będą wykonane jeśli bufor jest trafiony
]]></programlisting>
        </sect3>
        <sect3 id="zend.cache.frontends.page.cancel">
            <title>Metoda zaniechania buforowania</title>
            <para>
                Z powodu wymagań projektowych, w niektórych przypadkach (na przykład
                gdy używamy kodów innych niż HTTP/200), możesz potrzebować zaniechać
                proces buforowania. Dlatego dla tego frontendu udostępniamy metodę cancel().
            </para>
            <programlisting language="php"><![CDATA[
// [...] // konfiguracja itp.

$cache->start();

// [...]

if ($someTest) {
    $cache->cancel();
    // [...]
}

// [...]
]]></programlisting>
        </sect3>
    </sect2>
</sect1>