Autor: Tomasz "Zyx" Jędrzejewski
Prelekcja składać się będzie z dwóch części. Pierwsza poświęcona będzie problematyce systemów szablonów jako bibliotek budzących wiele kontrowersji. Odpowiemy sobie na pytania, czym te biblioteki naprawdę są, jaki mają potencjał oraz jakie mity o nich pokutują na ich temat nawet wśród dobrych programistów. W drugiej części skupimy się w całości na systemie szablonów Open Power Template, pokazując jego główne założenia, filozofię, najciekawsze rozwiązania oraz przyszłość tego ambitnego projektu. Prelekcja będzie ilustrowana praktycznymi przykładami oraz spostrzeżeniami zgromadzonymi w trakcie wielu lat badania i projektowania tego typu systemów.
8. Dwa podejścia do problemu języka szablonów PHP jako język szablonów Szablony pisane są w tym samym języku, co aplikacja, wzbogaconym o dodatkowe klasy i funkcje do generowania HTML. Przykłady: Savant, Zend_View Dedykowany język szablonów Wprowadzamy nowy język, w założeniu o prostszej składni, lepiej dopasowanej do współpracy z HTML-em. Przykłady: Smarty, Dwoo, PHPTAL
9. Dedykowany język szablonów – czy warto? Dlaczego ludzie tworzą nowe języki szablonów, zamiast użyć PHP? Dlaczego wynaleźli PHP, zamiast pisać aplikacje WWW w C? Niektóre odpowiedzi: Złożoność języka Ograniczenia języka Skomplikowana składnia
10.
11. Musimy krok po kroku informować komputer, jak wykonać nawet najprostsze operacje.
12. Kod staje się wyjątkowo nieczytelny, gdy osadzimy go w HTML-u.
15. Mity o systemach szablonów Po co mi kolejna warstwa abstrakcji, skoro PHP już jest systemem szablonów? System szablonów jest pewną biblioteką. PHP jest językiem , który poza pętlami i instrukcjami warunkowymi nie udostępnia nic , co nawet przypominałoby API systemów szablonów. Wynika stąd, że i tak będzie trzeba taką warstwę abstrakcji napisać. Frameworki nie używają systemów szablonów, po co nimi zawracać głowę? Cóż jest takiego wyjątkowego w warstwach widoku frameworków, że nie zasługują one na to miano? Jeśli ma skrzydła i kwacze jak kaczka, to jest to kaczka bez względu na to, jak sobie na nią będzie wołać gospodyni.
16. Mity o językach szablonów PHP był pierwotnie opracowywany jako język szablonów. Był , a nie jest . PHP już dawno obrał zupełnie inny kierunek rozwoju. Brak pomocniczych funkcji, brak uproszczeń składniowych do generowania kodu HTML – bez porządnego obudowania autorskim zestawem dodatków jest on ekstremalnie ciężki w użyciu w roli języka szablonów. PHP nie trzeba się uczyć, dedykowanego języka – tak. A co ze wszystkimi helperami i funkcjami pomocniczymi? Złożoność niektórych spotykanych rozwiązań jest bardzo duża. Gdy dana osoba zna podstawy programowania, nauka każdego nowego języka jest łatwiejsza. Tak samo mogli powiedzieć programiści, gdy pojawiła się Java. Nie zrobili tego.
17. Mity o językach szablonów Dodatkowy język to spadek wydajności Nieprawda – 99% systemów szablonów posiada kompilatory, które raz kompilują szablon do kodu PHP, a później tylko wykonują prekompilowaną wersję. Co więcej, PHP musi wszystko rozwiązywać w trakcie wykonywania. Kompilator może część rzeczy przeliczyć już na etapie kompilacji. Kompilator nie musi przejmować się czytelnością kodu wynikowego, może więc automatycznie wdrożyć szereg optymalizacji. Po co w takim razie dodatkowy język, skoro i tak zamieniamy to na PHP? Tworząc nowy język, ogranicza nas jedynie wyobraźnia i zasoby komputera. Po co korzystać z języków programowania, skoro możemy pisać w kodzie maszynowym? To proste – ich składnia i rozwiązania sprawiają, że programy pisze się szybciej, prościej i taniej .
18. Przykładowa lista w szablonie PHP Tak prosty problem, a tymczasem dostajemy klasyczny przykład kodu „napisz i zapomnij” Skomplikowane warunki do sprawdzania czy lista jest pusta. Ręcznie zakodowane algorytmy znajdujące pierwszy element . Opcjonalny atrybut to kłopoty – PHP nie rozumie kodu HTML. Musimy zajmować się escape'owaniem danych, co jeszcze bardziej wydłuża kod. Oraz wiedzieć już na tym etapie, co będzie obiektem, co tablicą itd. <?php if(is_array( $items ) && sizeof( $items ) > 0 ){ ?> <div> <h1>Nasza lista</h1> <ol> <?php $first = 0; foreach( $items as $item ){ ?> <li <?php if( $first == 0 ){ echo ' class=”first”' ; $first = 1 ; } ?> > <?php echo htmlspecialchars( $item [ 'title' ]); ?> </li> <?php } ?> </ol> </div> <?php } ?>
19. Smarty i większość systemów nie wnosi nic nowego Przykład języka, który powtarza błędy PHP i produkuje nowe. Wciąż musimy ręcznie opracowywać każdy możliwy algorytm. Nieuzasadnione wprowadzanie nowej, ezoterycznej składni do zwyczajnych rzeczy (wywołanie funkcji). I dalej musimy sami pamiętać o escape'owaniu. Smarty też nie rozumie HTML-a Dalej musimy znać szczegóły implementacyjne aplikacji. {if $items } <div> <h1>Nasza lista</h1> <ol> {assign var= 'first' value= 0 }{foreach from= $items item= $item } <li {if $first eq 0 } class=”first” {assign var= 'first' value= 1 }{/if} > { $item [ title ]|escape} </li> {/foreach} </ol> </div> {/if}
31. Ten sam przykład w Open Power Template Sekcje, inteligentne pętle, ukrywają wszystkie zbędne szczegóły implementacyjne i techniczne. Parser robi użytek ze znajomości HTML-a. Nie musimy wiedzieć, jak rozpoznać pierwszy element list. OPT zrobi to za nas. Dane są automatycznie escape'owane . A my nie musimy wiedzieć czy to jest tablica, obiekt czy coś innego . < opt:show name = ”items” > < div > < h1 > Nasza lista </ h1 > < ol > < li opt:section = ”items” > < opt:attribute str:name = ”class” str:value = ”first” opt:if =” $system.section.items.first ” /> { $items.title } </ li > </ ol > </ div > </ opt:show >
86. Niektóre nowe operatory: { $foo is [ 'idx1' : 'wartość 1' , 'idx2' : 'wartość 2' ] } { $foo.bar. ( $joe ) } {url ( 'controller' : 'index' , 'action' : 'index' ) } < opt:if test=” $foo contains 'abc' ” > ... </ opt:if > < opt:if test=” $foo contains both 'abc' and 'def' ” > ... </ opt:if > < opt:if test=” $foo is between 7 and 13 ” > ... </ opt:if > < opt:if test=” $foo is either 5 or 9 ” > ... </ opt:if >
87.
88. Open Power Forms – biblioteka obsługi formularzy zintegrowana z OPT o niespotykanej skalowalności: od prostego formularza logowania do arkusza kalkulacyjnego.
89. Open Power Classes – zbiór dodatkowych niewielkich bibliotek, w tym także do OPT (stronicowanie, cache, system tłumaczeń itd.)