Zend_ProgressBar_Adapter_JsPush
Zend_ProgressBar_Adapter_JsPush 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.
Opcje adaptera można ustawiać za pomocą metod set* albo przez podanie
tablicy asocjacyjnej lub obiektu Zend_Config w pierwszym parametrze
konstruktora. Dostępne opcje to:
updateMethodName: Metoda JavaScript, która zostanie wywołana
przy każdej aktualizacji paska postępu. Domyślnie jest to
Zend_ProgressBar_Update.
finishMethodName: Metoda JavaScript, która zostanie wywołana
po zakończeniu prowadzonej operacji. Domyślna wartość to
NULL, co oznacza brak reakcji.
Użycie tego adaptera jest dość proste. Na początku należy utworzyć pasek postępu w
przeglądarce za pomocą poleceń JavaScript lub HTML. Następnie należy
zdefiniować metodę JavaScript wywoływaną przy aktualizacji oraz (opcjonalnie)
po skończeniu działania. Obie powinny przyjmować pojedynczy argument - obiekt
JSON. Aby otworzyć połączenie należy wywołać długo trwającą akcję
w ukrytym obiekcie iframe lub object. Podczas wykonywania
tego procesu przy każdej aktualizacji adapter będzie wywoływał odpowiednią metodę
przekazując do niej obiekt JSON o następujących parametrach:
current: Obecna wartość absolutna
max: Maksymalna wartość absolutna
percent: Obliczony procent postępu
timeTaken: Czas trwania procesu (do obecnej chwili)
timeRemaining: Oszacowanie czasu pozostałego do końca
text: Opcjonalna wiadomość dotycząca stanu postępu
Podstawowy przykład kodu po stronie klienta
Ten przykład ilustruje prosty kod HTML, CSS
oraz JavaScript do użytku z adapterem JsPush
]]>
Powyższy kod tworzy prosty pojemnik z czarną granicą oraz blok wskazujący
zaawansowanie procesu. Należy pamiętać by nie ukrywać elementów
iframe lub object poprzez display: none;
ponieważ w takiej sytuacji niektóre przeglądarki jak Safari 2 w ogóle nie pobiorą
tych elementów.
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.:
Dojo:
jQuery:
MooTools:
Prototype:
Odstęp czasowy pomiędzy aktualizacjami
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.