Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
TWIG    Niezłe widoki dla PHP{meet}.php #5, Poznań 2012   Piotr Gabryjeluk
Po co widoki●   Żeby odseparować wygląd od logiki●   Dla innych osób niż programiści●   Dla bezpieczeństwa
Twig jako język szablonów●   Twig jest językiem szablonów,    a nie językiem programowania●   Twig pozwala na dostęp do   ...
Instalacja●   git clone lub git submodule add      git://github.com/fabpot/Twig.git●   PEAR      $ pear channel-discover p...
Bootstrap → twig.php<?phprequire_once lib/Twig/Autoloader.php;Twig_Autoloader::register();$twig = new Twig_Environment(   ...
Użycie → meeting.php<?phprequire_once lib/twig.php;$context = array(    imie => Gabryś,    miasto => Poznań,    miejsce =>...
Użycie → meeting.html <html> <head><title>Spotkanie</title></head> <body>   <h1>{{ spotkanie }} #{{ numer }}</h1>   <p>Mie...
Język szablonów Twiga●   Wyświetlenie zmiennej     {{ zmienna }}●   Filtr raw       {{ zmienna | raw }}●   Spaceless      ...
Mały wielki operator                .
Mały wielki operator Multioperator „kropka”: {{ a.bar }} ●   $a[bar] ●   $a->bar ●   $a->bar() ●   $a->getBar() ●   $a->is...
Filtry {{ zmienna | filtr }}  ●   title, capitalize, upper, lower, striptags, nl2br  ●   format, replace  ●   join(, ), le...
Warunki●   {% if warunek %} … {% endif %}    ●   operatory logiczne: or, and, not, ()    ●   testy: is odd, is even, is em...
Pętle {% for u in uczestnicy %}   <p>{{ loop.index }}</p>   <p>{{ u.imie }} {{ u.nazwisko }}</p>   <p>{{ u.miasto }}</p>  ...
Range {% for i in range(1, gwiazdki) %}   <img src=”/img/star.png” alt=”*”> {% endfor %} Uwaga na range(1, 0)!
Budowanie klocków●   Makra●   Includey●   Własne tagi    (uwaga na    przenośność)
Szablony → layout.html <head>   <title>{% block tytul %}{% endblock %}</title> </head> <body>   {% block tresc %}{% endblo...
Szablony → meeting.html {% extend layout.html %} {% block tytul %}   {{ spotkanie }} #{{ numer }} {% endblock %} {% block ...
Integracja●   Zend Framework: zwig●   Zend Framework 2: ZFTwig●   Symfony: out of the box●   Code Igniter: tak●   Twój fra...
Dla innych środowisk●   Python: DTL (Django), Jinja●   JavaScript: JinJS, Swig, Node-T, Templ8●   Ruby: Djerb, Liquid
Źródło●   http://twig.sensiolabs.org/
Dziękuję za uwagę
Bonus – PHP vs Twig vs Smarty<?php// Przykładowa klasa użytkownikaclass User {    public function __construct($firstName, ...
Bonus – PHP (Zend View style) <? foreach ($this->users as $u): ?>   <div class=”name”>      <?= $u->getFirstName() ?>     ...
Bonus – Smarty {foreach $users as $u}    <div class=”name”>      {u->getFirstName}         →   dla obiektów               ...
Bonus – Twig {% for u in users %}          {{…..}} wyświetlanie                               {%..%} logika, tagi   <div c...
Upcoming SlideShare
Loading in …5
×

TWIG - niezłe widoki dla PHP

4,318 views

Published on

Prezentacja przedstawi pokrótce zalety używania szablonów, język szablonów Twig i jego zalety względem alternatywnych rozwiązań dla PHP.

Published in: Technology

TWIG - niezłe widoki dla PHP

  1. 1. TWIG Niezłe widoki dla PHP{meet}.php #5, Poznań 2012 Piotr Gabryjeluk
  2. 2. Po co widoki● Żeby odseparować wygląd od logiki● Dla innych osób niż programiści● Dla bezpieczeństwa
  3. 3. Twig jako język szablonów● Twig jest językiem szablonów, a nie językiem programowania● Twig pozwala na dostęp do z góry określonych metod● Twig pozwala na tworzenie struktur w ramach szablonów Fabien Potencier● Twig jest szybki i bezpieczny
  4. 4. Instalacja● git clone lub git submodule add git://github.com/fabpot/Twig.git● PEAR $ pear channel-discover pear.twig-project.org $ pear install twig/Twig
  5. 5. Bootstrap → twig.php<?phprequire_once lib/Twig/Autoloader.php;Twig_Autoloader::register();$twig = new Twig_Environment( /* loader */ new Twig_Loader_Filesystem(/app/templates), /* opts */ array(cache => /tmp/twig-cache));
  6. 6. Użycie → meeting.php<?phprequire_once lib/twig.php;$context = array( imie => Gabryś, miasto => Poznań, miejsce => Coworking ZOO, spotkanie => {meet}.php, numer => 5,);$twig->render(meeting.html, $context);
  7. 7. Użycie → meeting.html <html> <head><title>Spotkanie</title></head> <body> <h1>{{ spotkanie }} #{{ numer }}</h1> <p>Miejsce: {{ miejsce }}, {{ miasto }}</p> <p>Uczestnik: {{ imie }}</p> </body> </html>
  8. 8. Język szablonów Twiga● Wyświetlenie zmiennej {{ zmienna }}● Filtr raw {{ zmienna | raw }}● Spaceless {% spaceless %} kod HTML {% endspaceless %}
  9. 9. Mały wielki operator .
  10. 10. Mały wielki operator Multioperator „kropka”: {{ a.bar }} ● $a[bar] ● $a->bar ● $a->bar() ● $a->getBar() ● $a->isBar() Kot pod wrażeniem operatora „kropki”
  11. 11. Filtry {{ zmienna | filtr }} ● title, capitalize, upper, lower, striptags, nl2br ● format, replace ● join(, ), length ● number_format(2, ,), url_encode, json_encode
  12. 12. Warunki● {% if warunek %} … {% endif %} ● operatory logiczne: or, and, not, () ● testy: is odd, is even, is empty, is constant
  13. 13. Pętle {% for u in uczestnicy %} <p>{{ loop.index }}</p> <p>{{ u.imie }} {{ u.nazwisko }}</p> <p>{{ u.miasto }}</p> {% if u.organizator %} <p class=”role”>organizator</p> {% endif %} {% endfor %} Przykładowa pętla
  14. 14. Range {% for i in range(1, gwiazdki) %} <img src=”/img/star.png” alt=”*”> {% endfor %} Uwaga na range(1, 0)!
  15. 15. Budowanie klocków● Makra● Includey● Własne tagi (uwaga na przenośność)
  16. 16. Szablony → layout.html <head> <title>{% block tytul %}{% endblock %}</title> </head> <body> {% block tresc %}{% endblock %} <div class=”footer”> {% block stopka %} <p>© 2012, Poznań</p> {% endblock %} </div> </body>
  17. 17. Szablony → meeting.html {% extend layout.html %} {% block tytul %} {{ spotkanie }} #{{ numer }} {% endblock %} {% block tresc %} <p>Miejsce: {{ miejsce }}, {{ miasto }}</p> <p>Uczestnik: {{ imie }}</p> {% endblock %}
  18. 18. Integracja● Zend Framework: zwig● Zend Framework 2: ZFTwig● Symfony: out of the box● Code Igniter: tak● Twój framework: już wiesz jak to zrobić
  19. 19. Dla innych środowisk● Python: DTL (Django), Jinja● JavaScript: JinJS, Swig, Node-T, Templ8● Ruby: Djerb, Liquid
  20. 20. Źródło● http://twig.sensiolabs.org/
  21. 21. Dziękuję za uwagę
  22. 22. Bonus – PHP vs Twig vs Smarty<?php// Przykładowa klasa użytkownikaclass User { public function __construct($firstName, $lastName, $location) ... public function getFirstName() … public function getLastName() … public function getLocation() … // zwraca array}// Kontekst przekazywany do szablonu$context->add(users, array( new User(Piotr, Gabryjeluk, array(city => Poznań, street => Św. Marcin)), new User(Jan, Kowalski, array(city => Tomyśl, street => Towarowa)), new User(Mariusz, Kolonko, array(city => Nowy Jork, street => Wall Street)),));
  23. 23. Bonus – PHP (Zend View style) <? foreach ($this->users as $u): ?> <div class=”name”> <?= $u->getFirstName() ?> <?= $u->getLastName() ?> </div> <div class=”location”> <?= $u->getLocation()[city] ?> <?= $u->getLocation()[street] ?> </div> <? endforeach; ?> Tylko w PHP 5.4! A htmlspecialchars?
  24. 24. Bonus – Smarty {foreach $users as $u} <div class=”name”> {u->getFirstName} → dla obiektów . dla tablic asocjacyjnych {u->getLastName} </div> <div class=”location”> {u->getLocation.city} {u->getLocation.street} </div> {/foreach}
  25. 25. Bonus – Twig {% for u in users %} {{…..}} wyświetlanie {%..%} logika, tagi <div class=”name”> Do przejścia od ogółu do szczegółu {{ u.firstName }} zawsze używamy kropki, a zatem bez zmiany w szablonach, możemy {{ u.lastName }} zmienić implementację zmiennych </div> przekazywanych do szablonu (np. dodać lazy-metody zamiast <div class=”location”> prepopulowanych arrayów) {{ u.location.city }} Ułatwia to też prototypowanie: można stworzyć szablony i wypełnić je {{ u.location.street }} przykładowymi danymi (jako arraye), a potem wymienić kod na taki, który </div> pobiera prawdziwe dane z bazy {% endfor %} (jako metody)

×