Wrocław Non Stop to jedyny w swoim rodzaju maraton kulturalny, podkreślający dynamizm i barwność tego miasta.Firma, w której pracuję, wygrała po raz drugi konkurs na realizację portalu związanego z festiwalem Wrocław Non Stop. Moim zadaniem było przygotowanie strony w oparciu o gotowe szablony XHTML.
Czas bardzo naglił, więc zdecydowałem się wykorzystać moduł artykułów do prezentacji programu. Na początku pomysł wydawał się dobry, bo faktycznie bardzo szybko udało się zaimplementować potrzebną funkcjonalność. Problemy zaczęły się, gdy okazało się, że konieczne są zmiany. Musiałem się nieźle zagimnastykować, by wyciągnąć potrzebne dane. Wynikło to z tego, że sposób prezentacji programu ulegał dynamicznie zmianom wraz z upływem kolejnych dni imprezy.
Kolejnym wyzwaniem był mechanizm buforowania. Kolega Sławek dał mi dwie ważne wskazówki: włączaj tylko te pliki, które są naprawdę potrzebne (najlepiej tylko bibliotekę obsługi buforowania) i wyeliminuj konieczność łączenia się z bazą danych za każdym razem. Wykorzystałem świetną bibliotekę PEAR::CacheLite i zrobiłem, tak jak sugerował. Faktycznie, w przypadku odczytu strony z bufora, czas potrzebny na jej wygenerowanie jest rzędu tysięcznych sekund. Niestety, kłopoty pojawiły się przy stronie głównej, gdzie przy każdym wejściu powinny się pokazywać losowo inne wydarzenia. Ilość możliwych kombinacji była tak duża, że cache nigdy by się prawdopodobnie nie wygenerował. Ostatecznie postanowiłem, że nie będzie pełnej losowości, ale będę wybierał losowo sekwencje np. element 1 i 2, 2 i 3, itd. Napisałem funkcję, która generowała wyszystkie możliwe kombinacje i buforowała je. Przy wyświetlaniu strony odczytywałem plik z kombinacjami, losowałem jedną i używałem jako klucza dla mechanizmu buforowania.
Teraz rozwiązałbym to jeszcze inaczej i dużo prościej: dla każdego losowanego elementu tworzyłbym bufor w postaci pliku z fragmentem kodu HTML. Przy wyświetlaniu losowałbym potrzebne elementy, pobierał kod HTML dla nich i składał gotową stronę.
Na szczęście nie było problemu z pokazywaniem najbliższych wydarzeń: czasowe wygasanie buforów rozwiązywało sprawę. Przez to, że się bardzo spieszyłem nie doczytałem w dokumentacji CacheLite o bardzo użytecznym parametrze automaticCleaningFactor. Gdybym to zrobił, nie musiałbym pisać specjalnych skryptów do czyszczenia bufora uruchamianych przez CRON.
Wykorzystałem po raz kolejny moduł biuletynów, ale wyszukiwanie zrealizowałem już z wykorzystaniem modułu, który od dość dawna istniał w naszym CMS’ie, a na który nie zwróciłem uwagi. Kolega Piotr wykorzystał go w innym projekcie, więc szlak był przetarty – wystarczyło skorzystać z jego doświadczeń. Dodałem tylko zbieranie statystyk o wyszukiwanych frazach.
Serwis został uruchomiony 22.06.2006 roku w nocy – równo z rozpoczęciem festiwalu.
Użyte technologie: PHP5, MySQL 4.1, Smarty, PEAR, XHTML


