W snippetach pojawiła się możliwość wstawienia zawartości rodzica za pomocą znacznika opt:parent:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <opt:extend file="test_inherited_a.tpl"> <opt:snippet name="header"> <h1>Webmaster Of Puppets</h1> <p>Here is the parent content:</p> <opt:parent/> <p>End of the parent content</p> </opt:snippet> </opt:extend>
W tym wypadku, jeżeli w pliku test_inherited_a.tpl zdefiniowaliśmy snippet o identycznej nazwie, jego zawartość trafi na miejsce znacznika opt:parent. Takie zagnieżdżanie działa wielopoziomowo. Gdyby i w tamtym snippecie użyto tego mechanizmu, OPT sięgnąłby jeszcze głębiej i tak dalej. Możliwe jest nawet wyciągnięcie domyślnej zawartości bloku opt:insert, do którego ostatecznie snippet będzie wstawiony. Do całości dodałem na dokładkę prosty kod wykrywający nieskończoną rekurencję. Gdy taka zostanie wykryta, programista otrzyma elegancki, czerwony komunikat błędu :).
Przy korzystaniu z nowego OPT powinna znacząco przydać się nowa konsola debugowa, rozszerzona w stosunku do analogicznej opcji w OPT 1.1.x. Główna zmiana dotyczy rozbicia listy wykonanych szablonów na mniejsze listy, które pokazują różne informacje:
- Lista wykonanych szablonów
- Lista aktualnie przekompilowanych szablonów
- Lista szablonów wczytanych z cache'u.
- Lista dziedziczenia szablonów - pokazuje użyte łańcuch zależności wraz z informacją, czy były one właśnie rekompilowane, czy nie.
Dodatkowo, konsola wyświetla wszystkie ostrzeżenia, które w tej wersji nie są już bezczelnie ładowane na ekran. Można się do nich dostać jedynie poprzez konsolę debugową lub komunikat błędu, o ile ustawiliśmy odpowiedni poziom debugowania.
Sprawa wydajności przedstawia się bardzo dobrze. Ostatecznie zamknąłem plik opt.class.php w około 25 KB, w porównaniu do 32 KB z poprzedniej wersji, a na chwilę obecną wpływ jego rozmiaru jest dość dobrze widoczny w wynikach, jako że PHP musi załadować taki parser i go wstępnie skompilować do wewnętrznego bajtkodu. Naturalnie, gdy pozałączamy dużo szablonów, nie będzie to aż takie widoczne, ale mimo wszystko cieszę się z uzyskanego efektu.
Paczkę można ściągnąć stąd. Zawiera ona również częściowo ukończoną polską dokumentację.
Nie wytrzymam i już go zacznę używać :). Zbyt piękny jest żeby tak leżał :P.
Tylko uważaj z cache'm, bo w kolejnym devie będzie on jeszcze inaczej zrobiony, mam nadzieję, że tym razem już ostatecznie :). Gdy się ukaże, opiszę, co i jak.