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