Daniel Częstki senior php developer
Temat: Nowy system szablonów Twig
HejNatknąłem się na ciekawy projekt. Może ktoś z Was już użył tego systemu szablonów o nazwie twig.
Jak wrażenia ?
http://www.twig-project.org/
Daniel Częstki senior php developer
konto usunięte
konto usunięte
{{ BEGIN test }}
{{ BEGIN darek }}
{{ $a }}
{{ END }}
{{ END }}
Łukasz
C.
Senior Technical
Architect
konto usunięte
Łukasz C.:
siablony sa be :P
konto usunięte
{{ var }}
{% for user in users %}
{{ $var }}
{{ foreach $users as $user }}
konto usunięte
foreach($users as $k => $v) {
echo 'Jestem '.$v['imie'];
}
{foreach from=$users key=key item=item}
Jestem {$item.imie}
{/foreach}
{{ BEGIN users }}
Jestem {{ $imie }}
{{ END }}
{{ BEGIN users }}
Jestem {{ $imie }}
Moje dzieci: {{ BEGIN dzieci }} {{ $imie }}, {{ END }}
{{ END }}
{foreach from=$users key=key item=item}
Jestem {$item.imie}
Moje dzieci:
{foreach from=$item.dzieci key=key2 item=item2}
{$item2.imie}
{/foreach}
{/foreach}
konto usunięte
{foreach $a.b.c as $k => $v}
$v.imie
{/foreach}
Łukasz
C.
Senior Technical
Architect
Piotr Lewandowski:bo ogromna wiekszosc stron w internecie ma ogladalnosc taka co kot naplakal ;p
Łukasz C.:
siablony sa be :P
ano są.. a jednocześnie są bardzo często używane :D
Janusz Radkiewicz freelancer
Mało tego, zapis Smarty jest mało intuicyjny i niewygodny w zapisie. Już wolę to zrobić w czystym PHP wsadzonym w HTML. Tyle dobrego że taki Netbeans ma np wtyczkę do smarty która podświetla na żółto elementy szablonu smarty. Za to to samo za pomocą blitz:
{{ BEGIN users }}
Jestem {{ $imie }}
{{ END }}
wydaje mi się o wiele sensowniejsze. Chce dać dzieci usera ? Proste:
{{ BEGIN users }}
Jestem {{ $imie }}
Moje dzieci: {{ BEGIN dzieci }} {{ $imie }}, {{ END }}
{{ END }}
Co może mi wypisać:
Jestem Darek,
Moje dzieci to: Zenek, Henek, Kunegunda,
Gdzie w smarty miał bym takiego potwora:
{foreach from=$users key=key item=item}
Jestem {$item.imie}
Moje dzieci:
{foreach from=$item.dzieci key=key2 item=item2}
{$item2.imie}
{/foreach}
{/foreach}
<-users>
Jestem %%imie%%
Moje dzieci:
<-#dzieci>%%imie%%,<-/>
<-/>
<-users>
Jestem %%imie%%
<-=dzieci>
a moje dzieci:
<-#dzieci><-_>, <-/>%%imie%%<-/#dzieci>.
<-/=dzieci>
<-~dzieci>i nie mam dzieci o których bym wiedział.<-/~dzieci>
<-/>
Mirosław
Ratman
Manager IT,
Architekt systemów
@Avast, Founder
@aSyncro ...
Łukasz C.:
dlaczego szablony sa be, jak i reszta php, przyklad z zycia:
konto usunięte
Janusz Radkiewicz:
strawne? ;)
ew. wersja bez nadmiarowego przecinka na końcu i uwzględniająca bezdzietnych:
<-users>
Jestem %%imie%%
<-=dzieci>
a moje dzieci:
<-#dzieci><-_>, <-/>%%imie%%<-/#dzieci>.
<-/=dzieci>
<-~dzieci>i nie mam dzieci o których bym wiedział.<-/~dzieci>
<-/>
Michał Wachowski:
To napisz sobie system szablonów który obsługuje
{foreach $a.b.c as $k => $v}
$v.imie
{/foreach}
Swoją drogą - jak blitz rozwiązuje powyższą sytuację (konkretnie o foreach z $a.b.c)
PS. Dobra prezentacja nie jest zła :D Skoro nie używasz kluczy to po co je definiujesz? :D
{{ BEGIN wpis }}
{{ $tytul }}
{{ $tekst }}
{{ BEGIN komentarze }}
{{ $komentarz }}
{{ BEGIN rangi }}
{{ $ranga }}
{{ END }}
{{ END }}
{{ END }}
MOJA NOTKA
------------------------
Lorem ipsum costam costam Lorem ipsum costam costam Lorem ipsum costam costam Lorem ipsum costam costam Lorem ipsum costam costam Lorem ipsum costam costam Lorem ipsum costam costam Lorem ipsum costam costam Lorem ipsum costam costam Lorem ipsum costam costam Lorem ipsum costam costam Lorem ipsum costam costam
~ @darek: Wiesz, całkiem niezły ten wpis
( uzytkownik, super-sprzedawca )
~ @marek: nie zgodzę się, kiepski
(moderator, redaktor)
array(
array(
tytul => moja notka
tekst => lorem ipsum
komentarze => array(
array(
komentarz => wiesz, calkiem niezly wpis...
rangi => array( uzytkownik, super-sprzedawca
)
array(
komentarz => wiesz, calkiem niezly wpis...
rangi => array( uzytkownik, super-sprzedawca
)
)
)
array(
tytul => moja notka 2
tekst => lorem ipsum 2
komentarze => array(
array(
komentarz => hehe..
rangi => array( uzytkownik, super-sprzedawca
)
)
)
)
konto usunięte
Łukasz C.:
Piotr Lewandowski:bo ogromna wiekszosc stron w internecie ma ogladalnosc taka co kot naplakal ;p
Łukasz C.:
siablony sa be :P
ano są.. a jednocześnie są bardzo często używane :D
dlaczego szablony sa be, jak i reszta php, przyklad z zycia:
- strona firmowa
- na stronie firmowej jest mala pod stronka ktora informuje o tym ze cos sie popsulo w usludze SAAS
jak sie czasem cos zjebie i stronka zaczyna byc potrzebna to:
- srednio 90,000,000 odslon miesiecznie :]
- ~34 requesty na sekunde
- apache jest zbyt wolne aby obsluzyc taki ruch na jednym serwerze
- ladowanie modulow php zajmuje wiecej niz czas dany na jeden request (max 0.029s)
- cachowanie? jakie ku**a cachowanie, tylko narzut dodatkowy :D
- load balancing nie lubi statycznych cache :D
- szablony przewaznie uzywaja statycznego cache i jeszcze potrzeba czasu na ich obsluzenie
wniosek taki, jak ktos ma 1000 odslon strony dziennie to mega wypasione szablony nie przeszkadzaja, chociaz i tak sa kiepawe bo to tylko dodatkowy narzut a pozytek marny,
ale jak strona ma prawdziwy ruch to czasem statyczny html i lekki serwer www to jedyne wyjscie :)
Tomasz Zadora programuję
Janusz Radkiewicz freelancer
Tomasz Zadora:
Najlepszy system szablonów to PHP samo w sobie, reszta to dorabianie piątego koła.
Janusz Radkiewicz freelancer
Dariusz Półtorak:
Janusz Radkiewicz:
strawne? ;)
ew. wersja bez nadmiarowego przecinka na końcu i uwzględniająca bezdzietnych:
<-users>
Jestem %%imie%%
<-=dzieci>
a moje dzieci:
<-#dzieci><-_>, <-/>%%imie%%<-/#dzieci>.
<-/=dzieci>
<-~dzieci>i nie mam dzieci o których bym wiedział.<-/~dzieci>
<-/>
Musiał bym więcej popisać w tym co pokazałęś ale nie wydaje mi się strawne. Czemu ? Mając dokument HTML ciężko by mi było wzrokowo wyłowić fragment szablonu w kodzie HTML.
{obj users}
Jestem %%imie%%
{if dzieci}
a moje dzieci:
{each dzieci} %%imie%% {end each dzieci}.
{end if dzieci}
{ifnot dzieci}i nie mam dzieci{end ifnot dzieci}
{end obj users}
W wypadku Blitz (a nawet smarty) nie mam z tym problemów. Oczywiście głowy nie odda,m trzeba by popisać i się przekonać.
Tomasz Zadora programuję
<?php
$treeHTML->levelStart = '<ul class="treeLevel">';
$treeHTML->levelEnd = '</ul>';
$treeHTML->nodeStart = '<li class="treeNodeName">';
$treeHTML->nodeEnd = '</li>';
$tree->setHTMLTemplate($treeHTML);
?>
...inne mięso html...
<div class="treeContainer">
<?php echo $tree->display(); ?>
</div>
...inne mięso html...
Janusz Radkiewicz freelancer
Tomasz Zadora:
Chodzi Ci np. o rekurencyjne pokazywanie drzewa kategorii o dowolnym zagłębieniu ?
Od tego są obiekty i właściwości.
Jeżeli masz w zmiennej $tree instancję klasy która realizuje rekurencję, a $treeHTML to "mini szablon" to np.:
<?php[/quote]> $treeHTML->levelStart = '<ul class="treeLevel">';[quote]$treeHTML->levelEnd = '</ul>';
$treeHTML->nodeStart = '<li class="treeNodeName">';
$treeHTML->nodeEnd = '</li>';
$tree->setHTMLTemplate($treeHTML);
?>
...inne mięso html...
<div class="treeContainer">
<?php echo $tree->display(); ?>
</div>
...inne mięso html...
Można sobie wyobrazić prostą modyfikację do innego przedstawiania poszczególnych poziomów drzewa.
PS. Od studzenia zapędów to jest kierownik.
Tomasz Zadora programuję
No patrz, a ja pechowo otrzymałem dane (nie ważne, czy z bazy,
czy z jakiegoś > XML) np. w postaci tablicy asocjacyjnej.
Janusz Radkiewicz freelancer
Tomasz Zadora:
To, czy jest ul czy co innego to należy już do webmastera, on sobie to zmienia tak jak chce, cały kod który wpisałem znajduje się w jednym pliku.
No patrz, a ja pechowo otrzymałem dane (nie ważne, czy z bazy,
czy z jakiegoś > XML) np. w postaci tablicy asocjacyjnej.
To w jaki sposób dane są dostarczone do obiektu $tree jest całkowicie abstrakcyjne i transparentne dla prezentacji, nie rozumiem co chciałeś osiągnąć pisząc to co wyżej ???
Następna dyskusja: