Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Własny zaawansowany system templatów, Od czego zacząć tworząc własny system templaków.
deirathe
post
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
deirathe
post
Post #2





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif)

Ten post edytował deirathe 19.07.2007, 11:33:15
Go to the top of the page
+Quote Post

Posty w temacie
- deirathe   Własny zaawansowany system templatów   28.06.2007, 20:16:43
- - sticker   Myśle że chyba sie mylisz że każdy ma ochote napis...   28.06.2007, 20:21:52
- - deirathe   No i właśnie wracając do klocków to nie zawsze każ...   28.06.2007, 20:28:30
- - sticker   tak jak pisze XSL wspierany przez w3c super system...   28.06.2007, 20:32:26
- - deirathe   A korzystasz z foo? czy jakiś inny bo ja na xsl to...   28.06.2007, 20:36:06
- - sticker   nie korzystam z niczego co jest z poza biblioteki ...   28.06.2007, 20:43:03
- - deirathe   hmmm... nie chciałem zaśmiecać tego posta, ale z t...   28.06.2007, 20:45:38
- - sticker   xsl to język do formatowania dokumentów zgodnych z...   28.06.2007, 20:47:55
|- - PiratNowegoPokolenia   Cytat(sticker @ 28.06.2007, 21:47:55 ...   28.06.2007, 21:09:42
- - deirathe   W xsl chodzi o to że za każdym razem musisz sam tw...   28.06.2007, 21:15:47
- - cicik   Najlepszą rzeczą do budowania szablonów w skryptac...   28.06.2007, 21:38:36
- - PiratNowegoPokolenia   właściwie ... to też tak uważam... przynajmniej na...   28.06.2007, 22:06:29
|- - cicik   Cytat(PiratNowegoPokolenia @ 28.06.2007, 23...   28.06.2007, 23:10:23
- - deirathe   Wszyscy wiemy że system templaków szablonów m...   29.06.2007, 06:50:00
- - Strzałek   Od czego zacząć? Najlepiej nie zaczynać Chyba że ...   29.06.2007, 11:26:52
|- - cicik   Cytat(Strzałek @ 29.06.2007, 12:26:52...   29.06.2007, 12:12:20
- - deirathe   Cytat(Strzałek @ 29.06.2007, 12:26...   29.06.2007, 13:22:54
- - Strzałek   Hmm. Ktoś tutaj posiada testy porównujące prędkośc...   29.06.2007, 13:27:34
- - deirathe   tego templaka robie akurat dla siebie, a co do jeg...   29.06.2007, 13:44:04
- - Strzałek   E tam. Jak to nie ma jak jest Smarty Manual :: {fo...   29.06.2007, 14:52:11
- - deirathe   No i sorry za te foreach z pamieci pisalem nawet n...   6.07.2007, 18:38:51
- - sticker   Cytat(cicik @ 28.06.2007, 20:38:36 ) ...   6.07.2007, 21:42:51
|- - cicik   Cytat(sticker @ 6.07.2007, 22:42:51 )...   7.07.2007, 09:13:28
- - deirathe   ok, a jak z php przekazujesz wartosci na przyklad ...   6.07.2007, 22:39:54
- - deirathe   No to teraz popatrz na ten Twój kod i np na phptal...   7.07.2007, 11:17:15
- - domis86   ja glosujue za cicikiem bo lubie proste i nieskom...   7.07.2007, 12:16:11
- - abc667   cicik, nie uważasz, że jest to strasznie nieczytel...   7.07.2007, 12:56:58
- - domis86   Jak dla mnie to php jest czytelne. Tylko proponowa...   7.07.2007, 13:03:23
- - deirathe   Ja też uważam że przykład przedstawiony przez ciri...   7.07.2007, 13:58:03
- - sticker   w szablonach jakież to ograniczenia są? Co do budo...   7.07.2007, 19:49:44
|- - kosmowariat   Cytat(sticker @ 7.07.2007, 20:49:44 )...   18.07.2007, 11:06:35
- - deirathe   nie pamiętam już ale miałem jeden p...   7.07.2007, 20:20:39
- - sticker   tablice przekazaujesz za pomocą dokumentu xml ktor...   9.07.2007, 15:11:11
- - deirathe   To dużo zabawy z tym jest :/   10.07.2007, 06:22:21
|- - PiratNowegoPokolenia   Cytat(deirathe @ 10.07.2007, 07:22:21...   16.07.2007, 11:23:05
- - Moli   Jak ktoś wspomniał, szablony są po to, aby grafik ...   10.07.2007, 09:00:18
- - WebCM   Również zastanawiam się nad użyciem...   18.07.2007, 21:19:38
- - deirathe   Ja się teraz zająłem phptal ale napotkałem kilka t...   18.07.2007, 21:36:58
|- - kosmowariat   Cytat(deirathe @ 18.07.2007, 22:36:58...   18.07.2007, 22:10:45
- - deirathe   Zwracam honor. Polskie znaki są ale tylko w u...   18.07.2007, 22:16:28
- - Joachim Peters   Napisałem kiedyś system szablonów, operujący na sk...   19.07.2007, 07:57:04
- - deirathe   Ten system to nic specjalnego najprostsze podmieni...   22.07.2007, 10:59:45
- - Teamon   Pozwolę sobie dorzucić trzy grosze. Obecnie w apl...   22.07.2007, 22:41:49
- - kosmowariat   całkiem nieźle to wygląda w symfony (wniosek po pr...   22.07.2007, 23:12:14
- - deirathe   Smarty jest ble :/ zobaczcie sobie na phptal, jest...   23.07.2007, 07:08:12
- - Joachim Peters   Zastanawiam się czy nie lepszym rozwiązaniem zamia...   3.08.2007, 14:58:40
- - drbane   Witam. Wszystko zalezy kto ile ma czasu i zasobow....   3.08.2007, 16:13:41


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 11:18