Epopeja OPT w listopadzie będzie obchodzić czwarte urodziny istnienia. Stabilne wydania dostępne są już od 19 miesięcy. Do sukcesów odniesionych w tym czasie zaliczyłbym:
- Stworzenie czegoś, co może śmiało konkurować ze Smarty'm i w wielu aspektach prześcignąć tamten parser.
- Osiągnięcie (przynajmniej w Polsce) całkiem niezłej popularności. Choć na forach dalej królują posty dotyczące Smarty'ego, ale jeśli już trafi się coś innego, najczęściej jest to OPT. Biblioteka istnieje w świadomości polskich programistów i doczekała się nawet - uwaga uwaga - wejścia do programu nauczania niektórych uczelni wyższych. Dowiedziałem się niedawno od znajomego, że w krakowskiej Wyższej Szkole Zarządzania i Bankowości OPT jest w programie do przedmiotu "Techniki internetowe". A ponieważ wykłada tam wielu pracowników AGH, jest szansa, że za dwa lata sam będę miał okazję tych wykładów posłuchać :D.
- Zdobycie nowych doświadczeń. Próba stworzenia bez nich OPT 2.0.0 zakończyłaby się pewnie spektakularną klapą.
Oczywiście były też i kiepskie elementy:
- Nie czarujmy się, w OPT 1.x jest kilka improwizacji i nie do końca przemyślanych lub rozwiniętych rozwiązań. Dziś mam kaca moralnego po lekko spieprzonej obsłudze buforowania wyjścia czy niewykorzystaniu od początku prawdziwego potencjału instrukcji bind oraz insert - przecież dodać do tego jeszcze nowy mechanizm detekcji, który szablon uległ modyfikacji i mielibyśmy dziedziczenie szablonów, jak w mordę strzelił jeszcze zanim w światku PHP ten termin w ogóle zaistniał :).
- Baza wiedzy o OPT. Kompletna dokumentacja jest tylko po angielsku, zaś jedyne trzy artykuły, które znam, są po polsku i w dodatku mojego autorstwa.
- Źle zorganizowane zaplecze internetowe oraz społecznościowe.
Te trzy rzeczy chcę poprawić w nowym kodzie, nieobciążany już żadnymi głupotami w stylu wstecznej kompatybilności. Pierwsze porady zostały opublikowane, na dysku mam zaczętych kilka artykułów, powstaje dedykowany system dokumentacji, a ponadto mamy wreszcie zalążek porządnej infrastruktury sieciowej.
Zaś wracając do samego OPT 1.1.4. Z poprawek błędów najważniejsze są chyba dwie. Odkryłem, że opcja "default" z instrukcji "include" nie działała poprawnie przy włączonej opcji performance. Powodem było pomylenie nazw zmiennych. Druga rzecz dotyczy odkrycia, że choć w kodzie PHP było przygotowane wszystko do obsługi bloków konfiguracyjnych... zapomniałem podłączyć je pod parser wyrażeń :D. Do dziś nie wiem, jak to się stało, a tym bardziej jakim cudem nikt się nie zorientował (pewnie nikt nie korzysta z tego i tyle :)). Oprócz poprawek błędów, dorzuciłem parę nowych opcji. Na prośbę jednego z użytkowników dodałem możliwość ustawienia prefiksu skompilowanym szablonom tak, aby nie zachodziły kolizje nazw plików (znana ze Smarty'ego opcja compileId). Do parsera wyrażeń dodałem obsługę wartości specjalnych true, false oraz null, których jakimś cudem także nie było. Pojawiły się dwa nowe wyłączniki pozwalające wyłączyć niektóre elementy składni (bloki konfiguracyjne oraz dostęp do zmiennych środowiskowych). Ponadto dostałem informacje, że zestaw funkcji w OPT 1.x był wzięty trochę z kosmosu, dlatego przeportowałem kilka użytecznych funkcji z wersji 2.0.0. Są to: escape(), firstof(), strip(), indent(), spacify() i truncate(). Na koniec wymienione zostały informacje copyright w związku z przeniesieniem projektu na grupę Invenzzia. Zapraszam do ściągania.
Jest truncate() - super! Jestem w trakcie pisania projektu sklepu internetowego i truncate() strasznie mi brakowało. Na szczęście pojawiła się ostatnia wersja OPT z tą funkcją, co mnie przeogromnie cieszy :)
Sorki, że naspamuję Wam blog, zamiast zgłosić to bugtracka, ale nie przyszedł do mnie e-mail z hasłem.
truncate() nie jest zgodna z UTF-8 - ucina znaki dwubajtowe w połowie. Rezultat przycięcia:
www.rozne.geozone.pl/konnekt/opt-bug.png
Może warto zapożyczyć sobie liby do UTF-8 z projektu KohanaPHP? (licencja BSD-like)
http://trac.kohanaphp.com/browser/t...
Albo http://phputf8.sf.net/
PS. Zyx, ja ci chyba zainstaluję wtyczkę do dotCleara do obsługi składni markdown :P (jak znajdę.. :P)
Skoro masz Kohanę, to wejdź sobie do opt.functions.php i zamień wywołania substr() na to, co tam masz. Niestety to jest biblioteka i z zewnątrz może łatwo wyglądać takie "dodaj", a tymczasem przez takie rzeczy znów się zrobi burdel w przyszłości.
1. Musiałbym ładować dodatkową, w dodatku zewnętrzną bibliotekę, co jest nie do zaakceptowania.
2. Mam ograniczone zasoby - główny plik musi być jak najmniejszy. W OPT2 osiągnąłem już kres i żadnej własnej implementacji UTF-8 tam nie upchnę, a require() też w grę nie wchodzi.
3. Muszę patrzeć przyszłościowo. PHP6 będzie mieć UTF-8, tam istniejąca implementacja zadziała.
4. Smarty też nie ma obsługi unikodu w tym miejscu.
Zyx, z 1-3 poniekąd się zgadzam. Poprawię obsługę stringów po swojemu, dużo roboty nie będzie.
@4. To nie jest argument :] OPT do Smartów nie porównuj. Cieszę się, że OPT poszedł swoją drogą.
//OT//
Nowaker: za używanie słowa "smartów" (czy tym podobnej odmiany liczbomnogowej jak "smartach", "smartami") ja morduję zardzewiałymi grabiami i każdy sąd mnie uniewinni :P Tego słowa się nie odmienia, albo odmienia jako l. poj. ("OPT do Smarty'ego nie porównuj" / "OPT do Smarty nie porównuj")..
//OT2//
Wiem :] Tak jak Linux, lecz Linuksa. Miałem zdanie napisane inaczej, potem zmieniłem i z pośpiechu weszło jak weszło, po wieśniacku
Po co używać zewnętrznych bibliotek do operacji obcinania ciągów? Proponuję skorzystać z natywnych funkcji php z rodziny mb_* (http://pl2.php.net/manual/en/ref.mb...).
Prawie każda funkcja do operacji na ciągach znaków ma swój odpowiednik multibyte.
Przydałyby się funkcje formatujące liczby. Np. chcę, aby wynik {$item.price * $item.amount} posiadał dwa miejsca po przecinku, a znakiem oddzielającym część całkowitą i ułamkową był nasz polski przecinek.
Nowaker -> akurat takie coś jest bodajże od wersji 1.0 i parseInt() się nazywa :).
Aha ;] Nie zauważyłem :) Tak to czasami jest.