Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Własny zaawansowany system templatów
Forum PHP.pl > Forum > PHP
deirathe
Tak jak w temacie.
Na pewno każdy z was po pewnym czasie przejada się gotowcami i ma zamiar stworzyć własny system szablonów, a więc rozpocząłem topic abyśmy mogli podzielić się pomysłami, kodem i uwagami.
To tak na start pierwsz pytanie, czy lepiej przy tworzeniu systemu szablonów korzystać z DOMDocumenty czy z pregów?
sticker
Myśle że chyba sie mylisz że każdy ma ochote napisać swój system temlatów, np.: ja nie mam bo na rynku są dostępne bardzo przyjemne i gotowe systemy (korzystam z xslt) i wiec szkoda czasu na budowę własnego,co więcej programowanie dąży do budowy całych systemów z klocków i po co pisać ponownie jakiś klocek jak już go mamy? (jednyną rozsądną myślą przemawiającą za to jest zwiększenie wydajności renderowania frontu)
deirathe
No i właśnie wracając do klocków to nie zawsze każdy system templaków pasuje do tego co mamy bądź też chcemy wykonać. Smarty- wolny i cachuje pliki- po co to nie wiem? patTemplate- średnio się sprawdza, PHPtal- choć miły to nie każdy ma ochotę się męczyć żeby go zrozumieć, itp... Prosiłbym o jakieś propozycję chociaż o co się zaczepić itd...
p.s. Google mam i używam dobrze się spisuje tongue.gif
sticker
tak jak pisze XSL wspierany przez w3c super system nie potrzeba dodatkowych parserów bo wszystko jest co potrzeba w funkcjach php, nie wiem jak u niego z szybkością renderowania ale zakładając ze bazuje na libkach napisanych w c to pewnie bardzo szybki, jednyny mantkament to koniecznosc budowy dokumentu xml na podstawie ktorego parsuje sie stronę
deirathe
A korzystasz z foo? czy jakiś inny bo ja na xsl to tak średnio się znam.
sticker
nie korzystam z niczego co jest z poza biblioteki php smile.gif mam tylko to opakowane w klase i wsio
deirathe
hmmm... nie chciałem zaśmiecać tego posta, ale z tego co mi się wydaję xsl to style do xml-a, albo czegoś nie rozumiem, możesz wytłumaczyć?
sticker
xsl to język do formatowania dokumentów zgodnych z xml, jako że xhtml jest zgodny to również można wykonać przetwarzanie do xhtmla
http://www.w3schools.com/xsl/ zobacz tutka do szybko zrozumiesz ocb smile.gif
PiratNowegoPokolenia
Cytat(sticker @ 28.06.2007, 21:47:55 ) *
xsl to język do formatowania dokumentów zgodnych z xml, jako że xhtml jest zgodny to również można wykonać przetwarzanie do xhtmla
http://www.w3schools.com/xsl/ zobacz tutka do szybko zrozumiesz ocb smile.gif

znaczy się to co generuje twój skrypt jest w przypadku każdej templatki jest niezmienne ? tylko gdy chcesz templatke zmienić to zmieniasz jeden fragment który mówi którego pliku XSL ma użyć ... o to w tym chodzi ?
deirathe
W xsl chodzi o to że za każdym razem musisz sam tworzyć nowy szablon- takie miniprogramowanie... i plikami które podajesz do xsl muszą być pliki xml
cicik
Najlepszą rzeczą do budowania szablonów w skryptach PHP jest... PHP
PiratNowegoPokolenia
właściwie ... to też tak uważam... przynajmniej narazie
Takie rozwiązanie daje duże możliwości. A jak by to dobrze zrobić to można osiągnąć to samo ... czyli oddzielić warstwę logiczną aplikacji od layoutu ...

Ten kto będzie tworzył taką templatke i tak musi mieć napisane co ma wpisać aby na przykład wpisać tu tytuł strony albo powtórzyć pewien blok...
cicik
Cytat(PiratNowegoPokolenia @ 28.06.2007, 23:06:29 ) *
A jak by to dobrze zrobić to można osiągnąć to samo ... czyli oddzielić warstwę logiczną aplikacji od layoutu ...


Jest dokładnie odwrotnie. Dobrze napisany system szablonów ma szansę osiągnąć to co daje PHP.
Systemy szablonów w efekcie dają kod PHP więc na pewno nie mają większych możliwości od samego PHP.
Używając PHP jako systemu szablonów trzeba jedynie się pilnować żeby używać go tam TYLKO do tworzenia szablonu. Tonie jest trudne. Za to przyspiesza sporo aplikacje.

Używanie systemu szbalonów innego od PHP przypomina mi trochę taki kod:

  1. <?php
  2. echo a();
  3.  
  4. function a() {
  5. return b();
  6. }
  7.  
  8. function b() {
  9. return c();
  10. }
  11.  
  12. function c() {
  13. return d();
  14. }
  15.  
  16. function d() {
  17. return "głupi sposób pisania programu";
  18. }
  19. ?>


Niby można. Tylko po co?
deirathe
Wszyscy wiemy że system templaków szablonów ma odzielać warstwę logiczną od kodu, teraz kwestia jest takaa od czego zacząć tworząc system szablonów? Gdzieś tu na forum miałem początek systemu, zmieniał tekst zawarty pomiędzy tagami
  1. <template>tekst</template>
na zmienna o nazwie tekst. Tylko jak wygenerować pętle chciałbym aby w pliku tpl wyglądało to tak
  1. <template action="loop" index="a" [step="int" [start="int" [max="int"]]]><template var="zmiennadopetli[a]"/></template>
.
Jakieś pomysły jak napisać funkcje w systemie szablonów żeby na podstawie tego generował pętle?
P.S. to w nawias kwadratowych oznacza opcje- może być ale nie musi
Strzałek
Od czego zacząć? Najlepiej nie zaczynać winksmiley.jpg Chyba że jest się w stanie napisać coś szybszego od smartów, bo smarty akurat nie są wolne.

Ja używałem kiedyś smartów, ale ostanio uywam tylko natywnych szablonów w php. Żeby to zaimplementować Wystarczy kilka linijek. Na algorytmach kiedyś wrzuciłem taką klasę.

Czegoś szybszego nie da się od tego napisać snitch.gif
cicik
Cytat(Strzałek @ 29.06.2007, 12:26:52 ) *
Od czego zacząć? Najlepiej nie zaczynać winksmiley.jpg


Wreszcie ktoś mnie rozumie.
Moja klasa do szablonów w PHP ma może 20 linijek.
deirathe
Cytat(Strzałek @ 29.06.2007, 12:26:52 ) *
Czegoś szybszego nie da się od tego napisać snitch.gif

Smarty są tak szybkie jak ja jestem księdzem... już samo to że potrzebują osobnego folderu do kompilacji templakow przemawia za tym ze nie operuja tylko na pliku tpl jaki stworzysz ale w dodatku na plikach ktore sam sobie stworzy, a tak btw smarty zaczyna bardziej juz przypominac jezyk programowania niz system szablonow, a to kolejny powod dla ktorego ludzie sie zniechecaja, a jak pracujesz w jakiejs firmie i zajmujesz sie tylko programowaniem i mowisz do webmastera tu masz smarty zrob to na smarty to on na Ciebie spojrzy i sie skrzywi bo nie ma czasu sie czegos takiego uczyc tylko trzeba projekt zrealizować:P


BTW

Wszystko się da:) nigdy nie mów nigdy
Strzałek
Hmm. Ktoś tutaj posiada testy porównujące prędkości systemów szablonów - smarty, opt, savant i coś tam jeszcze. Z tego co pamietam to smarty wygrywało. Ale nie będę się kłócił. Może i są najwolniejsze. Ja od jakiegoś czasu nie używam.

Smarty podchodzi pod język programowania mówisz. Ok, w takim razie co system szablonów ma robić? Smarty dają nam to że nie musimy klepać:

<?php echo $template['var']; ?> tylko możemy {$template.var} i jest to wygonde. A nauka smartów - no proszę Cię. Co tam jest do uczenia się? Jak obsłużyć zmienne, kilka funkcji oraz pętle.

Cytat
, a tak btw smarty zaczyna bardziej juz przypominac jezyk programowania niz system szablonow


  1. <template action="loop" index="a" [step="int" [start="int" [max="int"]]]><template var="zmiennadopetli[a]"/></template>


I teraz przekonaj mnie że łatwiej grafikowi będzie nauczyć się twoich tpl niż foreach/for w smartach snitch.gif


Cytat
Wszystko się da:) nigdy nie mów nigdy


Tak, tutaj mnie poniosło, zapomniałem edytować biggrin.gif
deirathe
tego templaka robie akurat dla siebie, a co do jego budowy to przynajmniej przypomina html-a tongue.gif z tym jezykiem programowania tez mnie troche ponioslo no nie powiem- nie gniewajmy sie na siebie :]
btw w smartach nie ma foreach tylko {section} :PPPPPPP
Strzałek
E tam. Jak to nie ma jak jest Smarty Manual :: {foreach},{foreachelse} winksmiley.jpg Zawsze używałem foreach :]

Jak już coś napiszesz, co będzie kompletne, albo będzie posiadało łatwą możliwość rozbudowy (pluginy) i będzie to jako tako działało - chętnie zobaczę.

Pozdrawiam Rkingsmiley.png
deirathe
No i sorry za te foreach z pamieci pisalem nawet nie pamietal ze smart sa "so smart" tongue.gif

Dzięki jak coś wymyślę to nieomieszkam CIe powiadomić biggrin.gif

CZyżby temat padł? szkoda:(...

No ja postanowiłem odświeżyć temat szablonów. Tworze cms i zastanawiam się czy warto używać szablonów czy też nie ma sensu spowalniać skryptu?
sticker
Cytat(cicik @ 28.06.2007, 20:38:36 ) *
Najlepszą rzeczą do budowania szablonów w skryptach PHP jest... PHP


takie podejście powoduje że łatwo zapomnieć jakiegokolwiek znacznika a wplatanie czegoś w nowego w szablon php moze spowodować wiele błędów, zgodnie z ideą inzynierii oprogramowania to błedy powinno sie wykrywać na wczesnym etapie tworzenia czegoś a nie w momencie kiedy coś ci wyskoczy i pozniej szukasz problemu w skrypcie i patrzeć co nie działa, poza tym jak chcesz coś zmienić na stronie musisz ingerować w kod php a przecież nie ma takiej potrzeby, moze to zrobić całkiem kto inny bez znajomości kodu i umiejętności programowania w php - to ogromna zalete systemów szablonów.
XSL wymusza od Ciebie poprawność juz w momencie tworzenia dokumentu, poza tym tak naprawde nie potrzebuje żadnego prasera bo sparsować xsl potrafi każda przeglądarka i zrobi to zawsze dobrze.
Jedyne wąskie gardło to generator xml bo to moze troszke potrwać ale to trzeba by patrzeć na testy, niestety nie potrafie tego poprzeć żadnymi testami. Czyli plus dla xsl to jest: poprawność, modularność, łatwość tworzenia (jest wiele edytorów,) oddzielenie warstwy prezentacji od warstwy biznesowej. Minus to przede wszystkim koniecznosć generacji danych wyjściowych do wyświetlanie w postaci xml.
deirathe
ok, a jak z php przekazujesz wartosci na przyklad dla petli dla xsl?
cicik
Cytat(sticker @ 6.07.2007, 22:42:51 ) *
/... ciach .../


Mam wrażenie, że mylisz pojęcia. Ja nie mówię o tym, żeby warstwę prezentacji mieszać z logiką w PHP tylko o tym, żeby oddzielić prezentację od logiki ale żeby prezentacja również była pisana za pomocą PHP.

  1. <?php $this->tytul = $this->dzial->tytul ?>
  2.  
  3. <?php $this->dolacz('wspolne/normalny/header.php') ?>
  4.  
  5. <?php $this->jezyk = $this->langdef('dzial.aktualnosci/widok/normalny/lang.xml') ?>
  6.  
  7. <?php foreach($this->artykuly as $artykul) { ?>
  8. <a class="tytul" href="<?php echo $artykul['link'] ?>"><?php echo $artykul['tytul'] ?></a>
  9. <div class="zajawka">
  10. <?php if($artykul['zdjecie']) { ?>
  11. <img src="<?php echo $artykul['zdjecie'] ?>" alt="<?php echo $artykul['tytul'] ?>" title="<?php echo $artykul['tytul'] ?>" />
  12. <?php } ?>
  13. <?php echo $artykul['tresc'] ?>
  14. </div>
  15. <p class="date"><?php echo $this->jezyk->InformacjeWprowadzil ?> <a href="<?php echo $artykul['autor'] ?>"><?php echo $artykul['imie'] . $artykul['nick'] . $artykul['nazwisko'] ?></a> <img src="<?php echo self::$katalog ?>/images/more.gif" alt="" /> <a href="<?php echo $artykul['link'] ?>"><?php echo $this->jezyk->Wiecej ?></a> <img src="<?php echo self::$katalog ?>/images/comment.gif" alt="" /> <a href="<?php echo $artykul['komentarze'] ?>"><?php echo $this->jezyk->Komentarze ?> (<?php echo $artykul['komentarzy'] ?>)</a> <img src="<?php echo self::$katalog ?>/images/timeicon.gif" alt="" /> <?php echo $artykul['data'] ?></p><br />
  16. <?php } ?>
  17.  
  18. <?php if($this->nastepna || $this->poprzednia) { ?>
  19. <p class="srodek">
  20. <?php if($this->poprzednia) { ?>
  21. <a href="<?php echo $this->poprzednia ?>" class="wiecej"><?php echo $this->jezyk->Nowsze ?></a>
  22. <?php } ?>
  23. <?php if($this->poprzednia && $this->nastepna) {
  24. ?> <?php
  25. } ?>
  26. <?php if($this->nastepna) { ?>
  27. <a href="<?php echo $this->nastepna ?>" class="wiecej"><?php echo $this->jezyk->Starsze ?></a>
  28. <?php } ?>
  29. </p>
  30. <?php } ?>
  31.  
  32. <?php $this->dolacz('wspolne/normalny/footer.php') ?>


To jest szablon wyświetlający listę newsów na jednej z moich stron.
Czym się różni pętla foreach w php od tej w smarty. Jedynie wyglądem. Za to na pewno działa szybciej.
Smarty to również język programowania (wbrew pozorom), którego potencjalny grafk też się musi nauczyć. Nauczenie składni Smarty nie jest według mnie wcale łatwiejsze od nauczenia się podstawowych elemnentów składni PHP umożliwiających pisanie szablonów.
deirathe
No to teraz popatrz na ten Twój kod i np na phptal.
  1. <?xml version="1.0"?>
  2. <head>
  3. <title tal:content="title">
  4. place for the page title
  5. </title>
  6. </head>
  7. <body>
  8. <h1 tal:content="title">sample title</h1>
  9. <tr>
  10. <th>name</th>
  11. <th>phone</th>
  12. </tr>
  13. </thead>
  14. <tr tal:repeat="item result">
  15. <td tal:content="item/name">item name</td>
  16. <td tal:content="item/phone">item phone</td>
  17. </tr>
  18. <tr tal:replace="">
  19. <td>sample name</td>
  20. <td>sample phone</td>
  21. </tr>
  22. <tr tal:replace="">
  23. <td>sample name</td>
  24. <td>sample phone</td>
  25. </tr>
  26. </tbody>
  27. </table>
  28. </body>
  29. </html>

Które jest czytelniejsze? i bardziej przypomina html?
domis86
ja glosujue za cicikiem biggrin.gif bo lubie proste i nieskomplikowane rozwiazania
abc667
cicik, nie uważasz, że jest to strasznie nieczytelne, nienaturalne? W takim kodzie trzeba się naprawdę mocno przypatrzeć, które nawiasy są parą itp. Czy nie lepiej nieznacznie zwolnić skrypt i stworzyć xml-ową strukturę w której od razu widać gdzie się dany znacznik kończy, a gdzie zaczyna.
Smarty dla mnie są ble, ale własny prosty system szablonów wg bardzo pomaga.
domis86
Jak dla mnie to php jest czytelne.
Tylko proponowałbym zamiast takiego czegoś:
  1. <?php if($artykul['zdjecie']) { ?>
  2. <img............. />
  3. <?php } ?>

stosować takie :
  1. <?php if($artykul['zdjecie']): ?>
  2. <img............. />
  3. <?php endif; ?>
deirathe
Ja też uważam że przykład przedstawiony przez cirika jest raczej mało czytelny, chociaż szczerze mówiąc niektóre systemy szablonów wprowadzają pewne ograniczenia i to jest właśnie ble :/
sticker
w szablonach jakież to ograniczenia są? Co do budowy dokumentu to żadne smile.gif
cicik: kod jest czyutelny dla programisty tyle że to webmaster zajmuje sie layoutem a nie programista
deirathe
nie pamiętam już ale miałem jeden problem przy smartach raz tongue.gif
btw. nadal nie odpisales jak przekazujesz tablice do xsl z php zeby ja loopowal smile.gif
sticker
tablice przekazaujesz za pomocą dokumentu xml ktory generujesz na podstawie danych a pozniej w xsl uzywasz konstrukcji for-each
deirathe
To dużo zabawy z tym jest :/
Moli
Jak ktoś wspomniał, szablony są po to, aby grafik czy ktoś kto nie zna php się mógł jako tako połapać w szablonie. Chodź wielkiej różnicy między
Kod
{if $a == $b}

a
Kod
<?php if( $a == $b ) {

niema, to i tak ludzie tworzą systemy szablonów. Osobiście używam, czegoś w stylu kodu cicik i mój "system szablonów" ma chyba4 linijki smile.gif Ale w zleceniach używam (też własnego), troszkę większego tak aby zleceniodawca wiedział że ma plik html z szablonem, nie ma tam kodu php i może sobie zmienić co chce smile.gif
PiratNowegoPokolenia
Cytat(deirathe @ 10.07.2007, 07:22:21 ) *
To dużo zabawy z tym jest :/

Może i zabawy jest dużo ... ale nie trzeba znać żadnego języka typu php czy asp ...
Dzięki temu templatke możesz podpiąć pod aplikacje w każdym języku ... jeśli istnieje taka potrzeba

Zrobiłem sobie taki klase do obróbki templatek php i mam takie drobne pytanie:
  1. <?php foreach( $this->tabs as $aTab ): ?>
  2. // Da się coś zrobić aby takie sformułowanie nie wywoływało wogóle błędu... Jeśli 
    zmienna nie jest tablicą ?
  3. // A może to zostawić tak jak jest ?
  4. <li id="current"><a href="<?php echo $aTab['href']?>"><span><?php echo $aTab['text']?></span></a></li>
  5. <?php endforeach; ?>
  6. <?php global $a; ?>
  7. // Zabezpieczyć się przed takimi dziwnymi sformułowaniami ?
  8. // Opłaca to się ? :]
kosmowariat
Cytat(sticker @ 7.07.2007, 20:49:44 ) *
w szablonach jakież to ograniczenia są? Co do budowy dokumentu to żadne smile.gif
cicik: kod jest czyutelny dla programisty tyle że to webmaster zajmuje sie layoutem a nie programista


Za to webmaster musi uczyć się praktycznie nowego języka programowania jakim jest np smarty. Programowanie ma to do siebie że wystarczy zrozumieć idee, przyswojenie składni to juz drobnostka ;-) więc nie widze większej różnicy między foreach(){} a {foreach}{/foreach}. Czytelność kodu... ? hmm jest trochę większa w przypadku systemów szablonów gdyż nie jest to czysty php i nie jest podświetlany przez edytory biggrin.gif Można by długo dyskutować na te tematy i każdy będzie miał własną opinię snitch.gif chociaż nie widze wiele wad smarty i wolałbym ich nie używać to jednak ich używam że względu na to iż skracają czas tworzenia skryptów. Jednym słowem zależy ile mamy czasu :-)
WebCM
Również zastanawiam się nad użyciem systemu szablonów, ewentualnie napisaniu własnego. Przy zaawansowanym kodzie warunkiem jest jednak kompilacja do kodu PHP.

Najlepiej byłoby nie używać pętli w szablonach. Dane tam trzeba jeszcze przetworzyć, chyba, że użyjemy 2 pętli, co jest bez sensu, gdy pobieramy rekordy z bazy na bieżąco. Aktualnie w pliku skórki dla nowości stosuję funkcję wywoływaną przy każdej iteracji.

Z ciekawym rozwiązaniem spotkałem się w PhpBB2.

Gdyby nie zaawansowane konstrukcje, PHP jest również dobrym językiem szablonów. Jednak mniej czytelny:
  1. <a href="<?= $data['url'] ?>"><?= $data['caption'] ?></a>

Kod
<a href="{url}">{caption}</a>

Mam wątpliwości, czy XLST jest rzeczywiście najlepszym rozwiązaniem. Może sprawiać problemy początkującym przy edycji wyglądu strony. Trzeba jeszcze generować kod XML. Przeglądarki nie otrzymują zwykłego kodu (x)HTML, lecz muszą również przetworzyć szablon.
deirathe
Ja się teraz zająłem phptal ale napotkałem kilka trudności i tak jak na początku mnie zafascynował budową i działaniem tak teraz poprzez błędy zaczyna mnie odrzucać:/ polskie czcionki idą się kochać w macrach przestrzen i18l mi nie chodzi sad.gif nie wiem co jest zgrane... Jak ktoś korzystał z phptal niech się odezwie
kosmowariat
Cytat(deirathe @ 18.07.2007, 22:36:58 ) *
Ja się teraz zająłem phptal ale napotkałem kilka trudności i tak jak na początku mnie zafascynował budową i działaniem tak teraz poprzez błędy zaczyna mnie odrzucać:/ polskie czcionki idą się kochać w macrach przestrzen i18l mi nie chodzi sad.gif nie wiem co jest zgrane... Jak ktoś korzystał z phptal niech się odezwie


W PHP Solutions szykuje się art na ten temat, więc spróbuje im zasugerować coś na temat tych błędów
deirathe
Zwracam honor. Polskie znaki są ale tylko w utf-8, nie wiem jak u innych ale umnie na iso nie działały :/ ale i18l dalej nie funkcjonuje sad.gif , jakby tak wszystko zaczęło działać to to jest nawet lepsze od smarty bo od tych klamrowych templaków to już nudno się robi
Joachim Peters
Napisałem kiedyś system szablonów, operujący na składni alternatywnej http://forum.php.pl/index.php?showtopic=67741
Czekam aż w tym temacie wypowie się ktoś z większym stażem.
deirathe
Ten system to nic specjalnego najprostsze podmienianie, równie dobrze preg_replace mogłeś zastosować albo wykorzystać poprostu file_get_contents, z plikiem który by zawierał
  1. <div><?=$zmienna?></div>

a zmienne być tworzył w php ;]

stworzyłem coś takiego pod obsługę templaków napisanych w xslt:P jak możecie to zajrzyjcie i powiedzcie co jest nie tak, co można poprawić:
class ethtpl:
template.php
  1. <?php
  2. class ethtpl{
  3. public $tpl;
  4. public $_xsl;
  5. public $_vars;
  6. public $translator=0;
  7. public $lang;
  8. public $_langPack;
  9. public function __construct($file=""){
  10. header("Content-type:text/xml");
  11. if(!file_exists($file)) exit("Nie mogłem odnaleźć pliku templatu");
  12. else $this->_xsl = $file;
  13. }
  14. public function set($name,$var){
  15. $this->_vars[$name] = $var;
  16. }
  17. public function setTranslator($lang){
  18. if(file_exists($lang)){
  19. $this->_translator=1;
  20. $this->lang = $lang;
  21. $this->loadLangPack();
  22. }elseif(file_exists($lang.".xml")){
  23. $this->translator=1;
  24. $this->lang = $lang.".xml";
  25. $this->loadLangPack();
  26. }else{
  27. exit("Nie odnalazlem pliku jezykowego");
  28. }
  29.  
  30. }
  31. public function loadLangPack(){
  32. $this->_langPack = @simplexml_load_file($this->lang)or die("Plik langPack nie jest prawidłowym plikiem xml");
  33. }
  34. public function translate($key,$value){
  35. $translated = trim($this->_langPack->$key);
  36. $translated?$translated = $translated:$translated =$value;
  37. return $translated;
  38. }
  39. public function array2xml($array,$tag=0){
  40. foreach($array as $key=>$value){
  41. if(is_array($value)){
  42. $tag?$this->tpl.='<'.$tag.'>':$this->tpl;
  43. $this->array2xml($value,$key);
  44. $tag?$this->tpl.='</'.$tag.'>':$this->tpl;
  45. }
  46. else{
  47. $this->translator?$this->tpl .= '<'.$key.'>'.$this->translate($key,$value).'</'.$key.'>':$this->tpl .= '<'.$key.'>'.$value.'</'.$key.'>';
  48. }
  49. }
  50. }
  51. public function display(){
  52. $this->tpl ='<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="'.$this->_xsl.'"?><tpl>';
  53. $this->array2xml($this->_vars);
  54. $this->tpl.='</tpl>';
  55. echo trim($this->tpl);
  56. }
  57.  
  58.  
  59. }
  60. ?>

plik index.php
  1. <?php
  2.  
  3. require_once('template.php');
  4.  
  5. $tpl = new ethtpl('template.xsl');
  6. $ar = array(
  7. 1=>array(
  8. 'title'=>'Empire Burlesque',
  9. 'artist'=>'Bob Dylan',
  10. 'country'=>'USA',
  11. 'company'=>'Columbia',
  12. 'price'=>'10.90',
  13. 'year'=>'1985',
  14. ),
  15. 2=>array(
  16. 'title'=>'Empire2 Burlesque2',
  17. 'artist'=>'Bob Dylan',
  18. 'country'=>'USA',
  19. 'company'=>'Columbia',
  20. 'price'=>'10.90',
  21. 'year'=>'1985',
  22. )
  23. );
  24. $tpl->set('cd',$ar);
  25. $tpl->set('name','adam');
  26. $tpl->setTranslator("pl");
  27. $tpl->display();
  28.  
  29.  
  30.  
  31. ?>

plik langPack
pl.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <langPack>
  3.      <name>Krzyś</name>
  4. </langPack>

plik xslt
template.xsl
  1. <?xml version="1.0" encoding="utf-8"?>
  2.  
  3. <xsl:stylesheet version="1.0"
  4. xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  5.  
  6. <xsl:template match="/">
  7.  <html>
  8.  <body>
  9.    <h2>My CD Collection</h2>
  10.    <table border="1">
  11.    <tr bgcolor="#9acd32">
  12.      <th align="left">Title</th>
  13.      <th align="left">Artist</th>
  14.    </tr>
  15.    <xsl:for-each select="tpl/cd">
  16.    <tr>
  17.      <td><xsl:value-of select="title"/></td>
  18.      <td><xsl:value-of select="artist"/></td>
  19.    </tr>
  20.    </xsl:for-each>
  21.    </table>
  22.      <xsl:value-of select="tpl/name"/>
  23.  </body>
  24.  </html>
  25. </xsl:template>
  26.  
  27. </xsl:stylesheet>


To tymczasowo taka mini beta, zrobiona w 2h guitar.gif
Teamon
Pozwolę sobie dorzucić trzy grosze.

Obecnie w aplikacjach używam frameworka Symfony. Zastanawiacie się jakie rozwiązanie 'szblonów' zastosowali twórcy? Odpowiedź - żadne. Tzn, prawie żadne. Szablony w Symfony to pliki *.php a w nich tzw. 'alternatywna' składnia PHP

  1. <?php if($a == 1): ?>
  2. <div class="a"></div>
  3. <?php endif; ?>
  4. ?>


W tym frameworku pliki z html`em są ściśle związane z akcja. Zmienne 'przesyła' się do templatki w bardzo prosty sposób:

  1. <?php
  2. public function executeMyAction()
  3. {
  4. $this->foo = 'bar';
  5. }
  6. ?>


I w templatce można już użyć zmiennej $foo. Według mnie jest to rozwiązanie bardzo proste a zarazem wydajne.

Co do kodu
  1. <a href="<?php echo $href; ?>" class="<?php echo $class; ?>"><?php echo $foo; ?></a>


Symfony dostarcza nam rozwiązań 'nieco' czytelniejszych:
  1. <?php echo link_to($foo, $href, array('class' => $class)); ?>

lub
  1. <?php echo link_to($foo, $href, 'class='.$class ); ?>


Po więcej informacji zapraszam na strone projektu ( kawałek dokumentacji w tym temacie )

Pozdrawiam smile.gif
kosmowariat
całkiem nieźle to wygląda w symfony (wniosek po przeczytaniu posta, bo symfony nie znam). ja czekam na wpełni funkcjonalny system do zend frameworka ;-) narazie podpinam Smarty pod ZF bo aktualny system jest baardzo ubogi o ile można powiedzieć że wogóle jest biggrin.gif
deirathe
Smarty jest ble :/ zobaczcie sobie na phptal, jest lepsze bo wygląda jak html- praktycznie do tagów dodaje się tylko atrybuty żeby wszystko śmigało, i ma to samo co smarty. phptal
Joachim Peters
Zastanawiam się czy nie lepszym rozwiązaniem zamiast smartów czy własnej klasy templatów będzie składnia alternatywna, dla mnie jest bardziej przejrzysta i daję większe możliwości.

Ps przepraszam, że lekko odbiegłem od tematu, ale myślę, że to tu pasuję.
drbane
Witam.
Wszystko zalezy kto ile ma czasu i zasobow.
Ja uzywam PHP+SMARTY. Bardzo dobra para, swietnie sie sprawdza. Co prawda brakuje mi tutaj kilku rzeczy (jak prostsze budowanie drzewek) ale nie jest zle.

Co do tego ze najlepszym szablonem dla PHP jest samo PHP to tutaj sie niezgadzam.
System szablonow powinnien byc maksymalnie prosty (liczba problemow jest skonczona, opis powinien byc prosty i przejrzysty), nie wyobrazam sobie mieszania HTML i PHP - robi sie z tego niesamowity bajzel. Przy bardziej skomplikowanych projektach trudno jest zlokalizowac bledy, gubi sie logika aplikacji itd.

Oczywiscie, jezeli stac kogos na zatrudnienie speca od XHTML i PHP to OK. Ale z tego co mi wiadomo, to standardowy model zespolu wyglada tak: programista, grafik, spec od HTML (nie musi znac PHP) (a czasami jest to ograniczone do programista+grafik). I trudno tlumaczyc takiemu specowi ze musi wstawiac np. w miejsca tytulow ciagle <?php articleTitle($titleid) ?>.
Duzo latwiej i krocej jest {$title} (zwlasza jak sie przygotowuje mape takich znacznikow) i samemu jest latwiej czasami cos poprawic wskakujac na chwile w XHTML.

To samo dotyczy XSLT. Masz czas i pieniadze - to powodzenia. Nie mowie ze to jest zle, bo nie jest (w koncu to oficjalny standard), ale z pewnoscia jest to czasochlonne.

Oczywiscie dla kazdego cos innego. Mi na ta chwile wystarczy PHP/SMARTY.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.