Blog archives

53 posts in the archive

Zend_Form: walidacja rozbudowanych formularzy

Walidacja rozbudowanych formularzy

Tworząc formularze przy użyciu Zend_From możemy szybko dojść do sytuacji gdzie  standardowy zestaw walidatorów nie spełni naszych potrzeb. Najlepszy przykład to formularz rejestracji i sprawdzanie czy pola "hasło" oraz "powtórz hasło" zawierają identyczne wartości. Albo formularz w którym opisujemy jakieś wydarzenie i wprowadzamy dwie daty: rozpoczęcia i zakończenia. Jak sprawdzić czy pierwsza z dat poprzedza drugą? W takich sytuacjach najczęściej spotykaną sugestią jest "napisz własny walidator". Otóż wbrew pozorom takie rozwiązanie jest skomplikowane i niezbyt przejrzyste. Wynika to z założenia że walidator ma sprawdzać poprawność tylko jednego pola. "Zgodność haseł" czy "poprawna kolejność dat" nie są cechami jednego pola, a raczej całego formularza. Zatem bardziej logiczne wydaje się być rozwiązanie w którym to sam formularz (a nie poszczególne elementy) zajmie się walidacją.

Zend Framework i Doctrine - łatwa integracja

Walidacja rozbudowanych formularzy

Ostatnio zainteresowałem się możliwością zastosowania Doctrine'a w jednym z moich projektów. Znalazłem wiele informacji na ten temat w internecie, niestety w większości zdezaktualizowanych. Okazało się że z wersji na wersję twórcy Doctrine coraz bardziej ułatwiają życie koderom piszącym w ZF. Aktualny przepis znalazłem na stronie ZendCasts. Podczas prób okazało się, że można to wszystko zrobić jeszcze prościej niż proponuje autor, zatem w tym wpisie podam własny przepis, przetestowany z Doctrine 1.2.1 i Zend-em 1.10 beta (1.9 też powinien działać).

Drzewko katalogów oparte na jsTree i SPL

Czasem aplikacja wymaga aby zaprezentować użytkownikowi drzewko  odzwierciedlające strukturę katalogów na serwerze. Zaprezentuję więc przykładowe rozwiązanie, oparte na jsTree (wyświetli drzewko po stronie klienta) oraz klasie DirectoryIterator z biblioteki SPL (wygeneruje drzewko po stronie serwera).

Aktualizacja openSUSE 11.1 do 11.2

W dniu wczorajszym wydano nową wersję Susełka. Jako zadowolony użytkownik tego systemu postanowiłem niezwłocznie dokonać aktualizacji. Myślę, że nie ma sensu po raz kolejny opisywać nowych funkcji czy ulepszeń - te informacje są już dostępne w wielu serwisach. Jednak to wydanie przynosi coś bardzo ciekawego: umożliwia łatwą migrację z edycji 11.1 do 11.2, bez potrzeby dokonywania reinstalacji. Ze względu na moją niecierpliwość połączoną z ciekawością postanowiłem wykorzystać właśnie tę opcję.

Wysyłanie plików na serwer - rsync

RSYNC musi być zainstalowany po stronie klienta i na serwerze.

strona/scripts/upload.sh

	#!/bin/sh

SRC='/home/mateusz/projekty/strona/'

rsync -ave 'ssh' \
        --filter='merge .rsync-filter' \
        $SRC \
        [email protected]:DIRECTORY

strona/scripts/.rsync-filter

	- /scripts
- /tests
- /nbproject
- /.hg
- /.hgignore
- /.zfproject.xml
- /application/configs/site.xml
- /application/configs/application.ini
- /public/media
- /public/images/captcha
- /public/index.php
- /data/cache
- /library/Zend
- /library/ZendX

użycie:

	cd /home/mateusz/projekty/strona/
./upload.sh

jQuery Tools

Chciałbym gorąco polecić pewną stronę na którą ostatnio się natknąłem: jQuery Tools. Serwis (jak wskazuje jego nazwa) prezentuje kilka rozszerzeń biblioteki jQuery. I to nie byle jakich!

Przykładowe komponenty to tooltip (wyświetla okienko informacyjne np w formularzach), overlay (wyskakujące okienka) czy scrollable (można nim opakować wszelkiego rodzaju przesuwane treści). Co wyróżnia jQuery Tools na tle innych, podobnych rozwiązań? Przede wszystkim jakość wykonania - efekty są ładne, działają poprawnie we wszystkich przeglądarkach i łatwo je wdrożyć. Dodatkowo serwis wypełniony jest przykładami dzięki którym szybko i bezboleśnie postawimy pierwsze kroki.

Praktycznie od ręki udało mi się dodać kilka efektów do bloga: tooltipy przy formularzach i wyszukiwarce, oraz wyskakujące okienko z formularzem kontaktowym.

Typografia stosowana: wygładzanie czcionek

Lorem ipsum dolor...Dobry projektant zwraca uwagę aby jego strona wyglądała podobnie (a najlepiej tak samo) w każdej przeglądarce. Jest jednak pewien aspekt na który nie można mieć wpływu: wygładzanie czcionek. Twórcy przeglądarek podchodzą do tego tematu na różne sposoby. Najczęściej przeglądarka dopasowuje się do ustawień systemu, ale czasem autorzy danego programu implementują własne metody wygładzania.

Aby mieć jakieś porównanie pobrałem szablon ze strony freecsstemplates.org, poddałem go niewielkiej edycji, uruchomiłem kilka przeglądarek i wykonałem zrzuty ekranu.

Zend_Form i wysyłanie plików - cz. 3

Oto trzeci artykuł dotyczący wysłania plików na serwer przy użyciu komponentu Zend_Form. Tym razem pokażę jak wyświetlić użytkownikowi pasek postępu.

Pasek nie zadziała przy standardowej konfiguracji PHP. Wymagane jest jedno z dwóch rozszerzeń: APC lub uploadprogress. Zend Framework automatycznie wykryje które z nich jest dostępne i użyje go.

Założenia

Chcemy uzyskać prosty pasek pokazujący postęp wysyłania pliku w tle. Niech strona w określonym odstępie czasu (np 1/10 sekundy) wysyła zapytania do serwera, który zwróci żądaną informację.

Podobnie jak w poprzednim artykule przedstawione rozwiązanie musi być elastyczne - niech zadziała także gdy serwer nie obsługuje paska postępu lub gdy użytkownik wyłączy obsługę Java Script.

Podstawą będzie aplikacja napisana w poprzednim artykule.

Przyśpieszyć Zend_Captcha_Image

Ogromną wadą komponentu Zend_Captcha_Image jest jego niska wydajność. Główną przyczyną jest użycie biblioteki GD i czystego PHP do utworzenia i zdeformowania obrazka. Jak obejść ten problem?

Interesującym rozwiązaniem będzie zastosowanie ImageMagick. Rozszerzenie to dostarcza zestaw klas manipulujących obrazkami, a bogaty zestaw funkcji pozwoli na uzyskanie efektu podobnego do Zend_Captcha_Image. Ta ostatnia klasa zostanie wykorzystana jako baza, co bardzo ułatwi proces kodowania.