Просмотр исходного кода

Zend_ProgressBar translated and added

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@21686 44c647ce-9c0f-0410-b52a-842ac1e357ba
tomeks 16 лет назад
Родитель
Сommit
57e382526a

+ 99 - 0
documentation/manual/pl/module_specs/Zend_ProgressBar.xml

@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20827 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.progressbar.introduction" xmlns:xi="http://www.w3.org/2001/XInclude">
+    <title>Zend_ProgressBar</title>
+
+    <sect2 id="zend.progressbar.whatisit">
+        <title>Wprowadzenie</title>
+
+        <para>
+            <classname>Zend_ProgressBar</classname> to komponent służący do tworzenia i
+            aktualizacji pasków postępu (progressbar) w różnych środowiskach. Składa się na niego
+            pojedynczy element backendu, który sygnalizuje postęp poprzez jeden z wielu
+            dostępnych adapterów. Podczas każdej aktualizacji brana jest wartość absolutna i
+            opcjonalna wiadomość o stanie postępu a następnie skonfigurowany adapter
+            jest wywoływany z obliczonymi danymi takimi jak procent postępu
+            oraz czas, jaki został do końca wykonywanej akcji.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.progressbar.basic">
+        <title>Podstawowe użycie Zend_Progressbar</title>
+
+        <para>
+            <classname>Zend_ProgressBar</classname> jest komponentem łatwym w użyciu. Należy,
+            po prostu, utworzyć nową instancję klasy <classname>Zend_Progressbar</classname>,
+            definiując wartość minimalną i maksymalną oraz wybrać adapter służący prezentacji
+            danych o postępie działań. W przypadku operacji na pliku, użycie może wyglądać
+            następująco:
+        </para>
+
+        <programlisting language="php"><![CDATA[
+$progressBar = new Zend_ProgressBar($adapter, 0, $fileSize);
+
+while (!feof($fp)) {
+    // Wykonanie operacji
+
+    $progressBar->update($currentByteCount);
+}
+
+$progressBar->finish();
+]]></programlisting>
+
+        <para>
+            W pierwszym kroku tworzona jest instancja <classname>Zend_ProgressBar</classname>
+            ze zdefiniowanym adapterem, wartością minimalną: 0, oraz maksymalną równą
+            rozmiarowi pliku. Po tym następuje seria operacji na pliku w pętli.
+            Podczas każdej iteracji pętli, pasek postępu jest aktualizowany danymi o
+            ilości "przerobionych" bajtów pliku.
+        </para>
+
+        <para>
+            Metodę <methodname>update()</methodname> klasy <classname>Zend_ProgressBar</classname>
+            można również wywoływać bez argumentów. Powoduje to przeliczenie czasu do końca
+            wykonywanej akcji i wysłanie go do adaptera. Ten sposób może być przydatny gdy nie
+            ma konkretnych danych do wysłania adapterowi ale niezbędna jest aktualizacja
+            paska postępu. 
+        </para>
+    </sect2>
+
+    <sect2 id="zend.progressbar.persistent">
+        <title>Postęp utrwalony (persistent progress)</title>
+
+        <para>
+            Jeśli zajdzie potrzeba utrzymania paska postępu przez wiele żądań, można w tym celu
+            podać łańcuch znaków z przestrzenią nazw sesji
+            jako czwary argument konstruktora. W tym przypadku
+            pasek postępu nie uaktualni adaptera w momencie konstruowania - niezbędne będzie
+            wywołanie metody <methodname>update()</methodname>
+            lub <methodname>finish()</methodname>.
+            Obecna wartość, tekst stanu postępu oraz czas rozpoczęcia działania
+            (wymagany przy obliczaniu czasu pozostałego do końca) będą pobrane podczas następnego
+            żądania i uruchomienia skryptu.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.progressbar.adapters">
+        <title>Standardowe adaptery</title>
+
+        <para>
+            Standardowo <classname>Zend_ProgressBar</classname> ma do dyspozycji następujące
+            adaptery:
+            <itemizedlist mark="opencircle">
+                <listitem>
+                    <para><xref linkend="zend.progressbar.adapter.console" /></para>
+                </listitem>
+                <listitem><para><xref linkend="zend.progressbar.adapter.jspush" /></para></listitem>
+                <listitem><para><xref linkend="zend.progressbar.adapter.jspull" /></para></listitem>
+            </itemizedlist>
+        </para>
+
+        <xi:include href="Zend_ProgressBar_Adapter_Console.xml" />
+        <xi:include href="Zend_ProgressBar_Adapter_JsPush.xml" />
+        <xi:include href="Zend_ProgressBar_Adapter_JsPull.xml" />
+    </sect2>
+</sect1>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 120 - 0
documentation/manual/pl/module_specs/Zend_ProgressBar_Adapter_Console.xml

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20827 -->
+<!-- Reviewed: no -->
+<sect3 id="zend.progressbar.adapter.console">
+    <title>Zend_ProgressBar_Adapter_Console</title>
+
+    <para>
+        <classname>Zend_ProgressBar_Adapter_Console</classname> to adapter tekstowy przeznaczony
+        do użytku z terminalem (konsolą, wierszem polecenia). Adapter potrafi automatycznie wykryć
+        dostępną szerokość ale można również podać ją ręcznie. Oprócz tego można definiować
+        elementy, jakie mają zostać pokazane oraz ich kolejność jak również sam styl wyświetlanego
+        paska postępu.
+    </para>
+
+    <note>
+        <title>Automatyczne rozpoznawanie szerokości konsoli</title>
+
+        <para>
+            W przypadku systemów *nix niezbędny dla tej fukncjonalności jest
+            <code>shell_exec</code>. Na maszynach Windows szerokość terminala jest stała
+            (wynosi 80 znaków) więc automatyczne rozpoznawanie szerokości nie jest potrzebne.
+        </para>
+    </note>
+
+    <para>
+        Opcje adaptera można ustawiać za pomocą metod <code>set*</code> albo przez podanie
+        tablicy asocjacyjnej lub obiektu <classname>Zend_Config</classname> w pierwszym parametrze
+        konstruktora. Dostępne opcje to:
+    </para>
+
+    <itemizedlist>
+        <listitem>
+            <para>
+                <code>outputStream</code>: Strumień do którego będzie kierowany wynik.
+                Domyślnie to STDOUT.
+                Może być dowolnym strumieniem, np.: <code>php://stderr</code> lub ścieżką do pliku.
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <code>width</code>: Liczba całkowita lub stała <constant>AUTO</constant>
+                klasy <classname>Zend_Console_ProgressBar</classname>.
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <code>elements</code>: Przyjmuje <constant>NULL</constant> dla domyślnej
+                konfiguracji lub tablicę zawierającą co najmniej jedną z następujących wartości:
+            </para>
+
+            <itemizedlist>
+                <listitem>
+                    <para>
+                        <constant>ELEMENT_PERCENT</constant>: Obecna wartość wyrażona procentowo
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <constant>ELEMENT_BAR</constant>: Pasek pokazujący wartość procentową.
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <constant>ELEMENT_ETA</constant>: Automatycznie obliczany czas do
+                        zakończenia operacji. Ten element jest pokazywany pierwszy raz z
+                        opóźnieniem 5 sekund bo w krótszym czasie nie ma możliwości
+                        obliczenia wiarygodnych wyników.
+                    </para>
+                </listitem>
+
+                <listitem>
+                    <para>
+                        <constant>ELEMENT_TEXT</constant>: Opcjonalna wiadomość stanu postępu
+                        operacji.
+                    </para>
+                </listitem>
+            </itemizedlist>
+        </listitem>
+
+        <listitem>
+            <para>
+                <code>textWidth</code>: Szerokość elementu <constant>ELEMENT_TEXT</constant>
+                podana w znakach. Domyślnie to 20.
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <code>charset</code>: Kodowanie elementu <constant>ELEMENT_TEXT</constant>.
+                Domyślnie to utf-8.
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <code>barLeftChar</code>: Łańcuch znaków używany jako lewa krawędź paska postępu.
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <code>barRightChar</code>: Łańcuch znaków używany jako prawa krawędź paska postępu.
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <code>barIndicatorChar</code>: Łańcuch znaków używany jako wskaźnik paska postępu.
+                Może zostać pusty.
+            </para>
+        </listitem>
+    </itemizedlist>
+</sect3>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 39 - 0
documentation/manual/pl/module_specs/Zend_ProgressBar_Adapter_JsPull.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20827 -->
+<!-- Reviewed: no -->
+<sect3 id="zend.progressbar.adapter.jspull">
+    <title>Zend_ProgressBar_Adapter_JsPull</title>
+
+    <para>
+        Adapter <classname>Zend_ProgressBar_Adapter_JsPull</classname> jest przeciwieństwem
+        jsPush. W jego przypadku niezbędne jest "wyciągnięcie" aktualizacji
+        zamiast "wypchnięcia" z przeglądarki. Generalnie zaleca się użycie tego adaptera
+        z opcją utrwalania postępu <classname>Zend_ProgressBar</classname>.
+        Jego działanie polega na wysłaniu do przeglądarki
+        łańcucha znaków (w formacie <acronym>JSON</acronym>), który wygląda tak
+        jak string <acronym>JSON</acronym> wysyłany przez adapter jsPush. Jedyną różnicą
+        pomiędzy nimi jest dodatkowy parametr (w stringu wysyłanym przez adapter jsPull)
+        o nazwie <code>finished</code>. Zawiera on wartość <constant>FALSE</constant> kiedy
+        uruchamiana jest metoda <methodname>update()</methodname> lub <constant>TRUE</constant>
+        w przypadku wywoływania metody <methodname>finish()</methodname>.
+    </para>
+
+    <para>
+        Opcje adaptera można ustawiać za pomocą metod <code>set*</code> albo przez podanie
+        tablicy asocjacyjnej lub obiektu <classname>Zend_Config</classname> w pierwszym parametrze
+        konstruktora. Dostępne opcje to:
+    </para>
+
+    <itemizedlist>
+        <listitem>
+            <para>
+                <code>exitAfterSend</code>: Flaga oznaczająca czy bieżące żądanie ma zostać
+                zakończone po wysłaniu danych do przeglądarki. Domyślnie przyjmuje wartość
+                <constant>TRUE</constant>.
+            </para>
+        </listitem>
+    </itemizedlist>
+</sect3>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 191 - 0
documentation/manual/pl/module_specs/Zend_ProgressBar_Adapter_JsPush.xml

@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 20854 -->
+<!-- Reviewed: no -->
+<sect3 id="zend.progressbar.adapter.jspush">
+    <title>Zend_ProgressBar_Adapter_JsPush</title>
+
+    <para>
+        <classname>Zend_ProgressBar_Adapter_JsPush</classname> to adapter pozwalający na
+        aktualizację paska postępu w przeglądarce poprzez JavaScript Push. To oznacza, że
+        nie jest potrzebne nowe połączenie na potrzeby przesyłu danych o postępie operacji.
+        Proces pracujący po stronie serwera komunikuje się bezpośrednio z przeglądarką
+        użytkownika.
+    </para>
+
+    <para>
+        Opcje adaptera można ustawiać za pomocą metod <code>set*</code> albo przez podanie
+        tablicy asocjacyjnej lub obiektu <classname>Zend_Config</classname> w pierwszym parametrze
+        konstruktora. Dostępne opcje to:
+    </para>
+
+    <itemizedlist>
+        <listitem>
+            <para>
+                <code>updateMethodName</code>: Metoda JavaScript, która zostanie wywołana
+                przy każdej aktualizacji paska postępu. Domyślnie jest to
+                <classname>Zend_ProgressBar_Update</classname>.
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <code>finishMethodName</code>: Metoda JavaScript, która zostanie wywołana
+                po zakończeniu prowadzonej operacji. Domyślna wartość to
+                <constant>NULL</constant>, co oznacza brak reakcji.
+            </para>
+        </listitem>
+    </itemizedlist>
+
+    <para>
+        Użycie tego adaptera jest dość proste. Na początku należy utworzyć pasek postępu w
+        przeglądarce za pomocą poleceń JavaScript lub <acronym>HTML</acronym>. Następnie należy
+        zdefiniować metodę JavaScript wywoływaną przy aktualizacji oraz (opcjonalnie)
+        po skończeniu działania. Obie powinny przyjmować pojedynczy argument - obiekt
+        <acronym>JSON</acronym>. Aby otworzyć połączenie należy wywołać długo trwającą akcję
+        w ukrytym obiekcie <code>iframe</code> lub <code>object</code>. Podczas wykonywania
+        tego procesu przy każdej aktualizacji adapter będzie wywoływał odpowiednią metodę
+        przekazując do niej obiekt <acronym>JSON</acronym> o następujących parametrach:
+    </para>
+
+    <itemizedlist>
+        <listitem>
+            <para>
+                <code>current</code>: Obecna wartość absolutna
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <code>max</code>: Maksymalna wartość absolutna
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <code>percent</code>: Obliczony procent postępu
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <code>timeTaken</code>: Czas trwania procesu (do obecnej chwili)
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <code>timeRemaining</code>: Oszacowanie czasu pozostałego do końca
+            </para>
+        </listitem>
+
+        <listitem>
+            <para>
+                <code>text</code>: Opcjonalna wiadomość dotycząca stanu postępu
+            </para>
+        </listitem>
+    </itemizedlist>
+
+    <example id="zend.progressbar-adapter.jspush.example">
+        <title>Podstawowy przykład kodu po stronie klienta</title>
+
+        <para>
+            Ten przykład ilustruje prosty kod <acronym>HTML</acronym>, <acronym>CSS</acronym>
+            oraz JavaScript do użytku z adapterem JsPush
+        </para>
+
+        <programlisting language="html"><![CDATA[
+<div id="zend-progressbar-container">
+    <div id="zend-progressbar-done"></div>
+</div>
+
+<iframe src="long-running-process.php" id="long-running-process"></iframe>
+]]></programlisting>
+
+        <programlisting language="css"><![CDATA[
+#long-running-process {
+    position: absolute;
+    left: -100px;
+    top: -100px;
+
+    width: 1px;
+    height: 1px;
+}
+
+#zend-progressbar-container {
+    width: 100px;
+    height: 30px;
+
+    border: 1px solid #000000;
+    background-color: #ffffff;
+}
+
+#zend-progressbar-done {
+    width: 0;
+    height: 30px;
+
+    background-color: #000000;
+}
+]]></programlisting>
+
+        <programlisting language="javascript"><![CDATA[
+function Zend_ProgressBar_Update(data)
+{
+    document.getElementById('zend-progressbar-done').style.width = data.percent + '%';
+}
+]]></programlisting>
+
+        <para>
+            Powyższy kod tworzy prosty pojemnik z czarną granicą oraz blok wskazujący
+            zaawansowanie procesu. Należy pamiętać by nie ukrywać elementów
+            <code>iframe</code> lub <code>object</code> poprzez <code>display: none;</code>
+            ponieważ w takiej sytuacji niektóre przeglądarki jak Safari 2 w ogóle nie pobiorą
+            tych elementów.
+        </para>
+
+        <para>
+            Zamiast własnoręcznie tworzyć pasek postępu, można skorzystać z jednej z wielu
+            dostępnych bibliotek JavaScript, takich jak Dojo czy jQuery. Np.:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    Dojo: <ulink
+                        url="http://dojotoolkit.org/book/dojo-book-0-9/part-2-dijit/user-assistance-and-feedback/progress-bar" />
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    jQuery: <ulink url="http://t.wits.sg/2008/06/20/jquery-progress-bar-11/" />
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    MooTools: <ulink url="http://davidwalsh.name/dw-content/progress-bar.php" />
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Prototype: <ulink url="http://livepipe.net/control/progressbar" />
+                </para>
+            </listitem>
+        </itemizedlist>
+    </example>
+
+    <note>
+        <title>Odstęp czasowy pomiędzy aktualizacjami</title>
+
+        <para>
+            Należy upewnić się, że nie jest tworzona zbyt duża ilość aktualizacji. Każda z nich
+            powinna przesyłać dane o wielkości co najmniej 1kB. Dla przeglądarki Safari jest to
+            niezbędny warunek do wykonania polecenia wywołania funkcji. Internet Explorer ma
+            podobne ograniczenie - w jego przypadku jest to 256 Bajtów.
+        </para>
+    </note>
+</sect3>
+<!--
+vim:se ts=4 sw=4 et:
+-->