Ostatnio do naszego CMS-a pisałem nowy moduł biuletynu internetowego. Prosty newsletter, a jednak wymaga sporo pracy i jak się domyślam to jeszcze nie koniec, pomimo pomyślnych pierwszych testów.
Do wysłania maili ściągniętych z bazy użyłem pętli while. Początek wyglądał tak, że jeśli mail się wysłał, to użytkownik biuletynu otrzymywał komunikat, że wiadomość została prawidłowo wysłana pod adres: xxx@domena.pl. Jak maili było w bazie 1000, to użytkownik otrzymywał 1000 takich komunikatów, co uznałem za niepotrzebne. Wymyśliłem więc, że chce aby użytkownik widział pasek postępu. Zaczęły się więc poszukiwania u wujka googla, jak by można by to rozwiązać. Powiem szczerze, że poszukiwania nie były łatwe. Owszem rozwiązań z jquery, czy ajaxem jest wiele, ale większość tyczy się np. z uploadowaniem plików, a my przecież chcemy aby postęp był liczony w miarę wykonania pętli FOR, czy WHILE.
Po kilkugodzinnych poszukiwaniach znalazłem. Z pomocą przyszedł blog SPidgorny. Rozwiązanie proste i jakże bardzo funkcjonalne:
<?php require_once 'class.ProgressBar.php'; echo 'Starting…<br />'; $p = new ProgressBar(); echo '<div style="width: 300px;">'; $p->render(); echo '</div>'; for ($i = 0; $i < ($size = 100); $i++) { $p->setProgressBarProgress($i*100/$size); usleep(1000000*0.1); } $p->setProgressBarProgress(100); echo 'Done.<br />'; ?>
Staryyy to jest zajebiste! Szukałem tego w necie od tygodni, spać nie mogłem i pewnego dnia znalazłem to u ciebie. Wielkie dzięki!