Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> php Templates, klasa, PHP5
Strzałek
post 3.03.2006, 12:41:56
Post #1





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


Ostatnio miałem potrzebę napisac małą stronę, więc nie było sensu używać smart'ów.
Napisałem coś takiego:


  1. <?php
  2. /**
  3.  * Prosty system szablonów php
  4.  * @copyright Copyright (c) Strzalek 2005
  5.  * @author Strzalek <strzalek@vp.pl>
  6.  * @version 1.0.0
  7.  * @package Template
  8.  */
  9.  
  10.  class Template {
  11.  
  12. /**
  13.    * Ścieżka szablnów
  14.    * @var string
  15.    */
  16. public $templateDir = './templates/';
  17.  
  18. /**
  19.    * Przechowywuje zmienne wykorzystywane
  20.    * w szablonach
  21.    * @var array
  22.    */
  23. protected $_vars = array();
  24.  
  25. /**
  26.  * Dołączenie wartości
  27.  * @param string $key Nazwa
  28.  * @param mixed $value Wartość
  29.  * @return void
  30.  */
  31.  public function assign($key, $value){
  32.  $this -> _vars[$key] = $value;
  33.  }
  34.  
  35.  /**
  36.  * Dołączenie wartości przez referencje
  37.  * @param string $key Nazwa
  38.  * @param mixed $value Wartość
  39.  * @return void
  40.  */
  41.  public function assignByRef($key, &$value){
  42.  $this -> _vars[$key] =& $value;
  43.  }
  44.  
  45.  
  46.  /**
  47. * Wyświetla plik szablonu
  48. * @see Template::fetch();
  49. * @param string $file Nazwa pliku
  50. * @return void
  51. */
  52.  public function display($file){
  53. echo $this -> fetch($file);
  54.  }
  55.  
  56.  /**
  57. * Zwraca wartość szablonu
  58. * @throws TemplateException
  59. * @param string $file Nazwa pliku
  60. * @return mixed
  61. */  
  62.  public function fetch($file){
  63.  
  64. $filePath = $this -> templateDir.$file;
  65.  
  66. if(file_exists($filePath) and is_readable($filePath)){
  67.  
  68.  ob_start();
  69.  
  70.  extract($this -> _vars, EXTR_SKIP);
  71.  
  72.  include($filePath);
  73.  
  74.  return ob_end_flush();  
  75. }
  76.  
  77. throw new TemplateException('Błąd przy generowaniu szablonu');
  78. return false;
  79.  }
  80.  
  81.  }
  82.  
  83.  
  84.  class TemplateException extends Exception { }
  85.  
  86.  
  87. ?>


Barodz prosta klasa, którą używa się tak:

  1. <?php 
  2.  
  3.  try{
  4.  
  5. $tpl = new Template();
  6.  
  7. $tpl -> assign('title', 'Testowy tytuł biggrin.gif');
  8.  
  9. //to można oczywiście pobrać z bazy ;)
  10. $allNews = array(array('title' => 'newsik D:', 'id' => 1),
  11.  array('title' => 'Hej sialalala', 'id' => 2),
  12.  array('title' => 'Umc, umc, umc', 'id' => 3)
  13. );
  14.  
  15. $tpl -> assign('allNews', $allNews);
  16. $tpl -> display('index.tpl');
  17.  
  18.  }catch(TemplateException $e){
  19. echo $e;
  20.  }
  21.  
  22. ?>


a plik szablonu wygląda tak:

  1. <html>
  2. <body>
  3. <?php echo $title ?><br />
  4.  
  5. <?php foreach($allNews as $news): ?>
  6.  <small><?php echo $news['title'] ?></small><br />
  7. <?php endforeach; ?>
  8. </body>
  9. </html>


To tyle. Ewentualne błędy, albo udogodnienia proszę zgłaszać.
Pozdrawiam.


--------------------
Go to the top of the page
+Quote Post
Lisek54
post 5.11.2006, 15:50:20
Post #2





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 6.12.2004
Skąd: Miastko

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


Zkorzystałem z tej klasy.

Działa wszystko pięknie, lecz na końcu każdego wygenerowanego szablonu znajduje się liczba "1".

Kod
Tutaj moj testowy tutul, news albo cos w tym rodzaju...
1


To samo przy generowaniu news z bazy:

Kod
Giertych wprowadza nowe ... :: 2006-11-03
Moj testowy news

Proces uczniów... :: 2006-11-03
Moj drogi testowy news
1


W kodzie nic nie znalazłem, a tak używam klasy:

  1. <?php
  2. $tpl = new Template();
  3. $tpl -> assign('news', 'lala newsy'); # definicja szablonowej zmiennej
  4. $tpl -> display('news.tpl');
  5. ?>




A oto twój przykład:

Kod
Testowy tytuł :D
newsik D:
Hej sialalala
Umc, umc, umc
1
.

PHP5, MySql, Krasnal 2.7

Pozdro


--------------------
MP3: Ocean, Bracia, DKA, Arash, Energy
Warsztat: Apache2, PHP4, MySql, Linux Mandriva/Microsoft Windows XP
Zajęcia: Administrator serwera UT, prowadzenie kilku stron, pisanie małych skryptów dla rozrywki...
Cytat: "Co by człowiek chciał to zajęte..." - Kolega z ławki
Go to the top of the page
+Quote Post
nospor
post 6.11.2006, 08:39:33
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Działa wszystko pięknie, lecz na końcu każdego wygenerowanego szablonu znajduje się liczba "1".
Wynika to z niezagladania przez autora klasy do manuala.
http://pl.php.net/manual/pl/function.ob-end-flush.php
ob_end_flush zwraca true albo false, a nie to co bylo w buforze. To co bylo w buforze leci od razu na ekran.

a w kodzie mamy:
  1. <?php
  2. public function display($file){
  3. echo $this -> fetch($file);
  4.  }
  5. ?>

a fetch nie zwraca tekstu , tylko zwraca true, a "echo true" = 1 na ekranie smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 15:28