Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/OOP] Prosta klasa szablonów - co do poprawy?
Forum PHP.pl > Forum > PHP > Object-oriented programming
l0ud
Witam smile.gif Od jakiegoś czasu opracowuję sobie prostą klasę templatów, która wykorzystuję na swoich stronach. Na smarty jest dla mnie jeszcze za wcześnie, zresztą nie lubię takich wielkich 'krów' w małych projektach tongue.gif . Niestety w programowaniu obiektowym nie mam jeszcze żadnego doświadczenia, więc zapewne ta klasa wiele wspólngo z OOP nie ma... Tak więc proszę o ogólną koncepcję - jak to powinno być zbudowane właściwie, oraz ewentualne uwagi co poprawić/dorobić w klasie, bo aktualnie nie ma ona prawie żadnych możliwości... winksmiley.jpg

Kod nie mieścił się w poście:
http://77.88.178.156/priv/

Jakby ktoś chciał wypróbować, przykład zastosowania:
  1. <?php
  2. include('templates_class.php');
  3. $tpl = new templates('templates/','.tpl',1,2,0);
  4.  
  5. $data = array(array('Pierwszy element', 'drugie pole', 'cos innego'), array('Drugi element', 'cos innego', 'cos innego'));
  6.  
  7. $tpl->setvar('title','Spis elementów z tablicy');
  8.  
  9. for ($i=0; $i<count($data); $i++) {
  10. $tpl->setvar('data',$data[$i]);
  11. $tpl->to_buffer('rows','test','row');
  12. }
  13.  
  14. $tpl->display('test','index');
  15.  
  16. ?>


templates/test.tpl
  1. <!-- BEGIN index -->
  2. {#INC:#this/header}
  3. {#BUF:rows}
  4. <!-- END index -->
  5.  
  6. <!-- BEGIN header -->
  7. <h1>{#VAR:title}</h1>
  8. <!-- END header -->
  9.  
  10. <!-- BEGIN row -->
  11. <tr>
  12. <td>{#ARR:data.0}</td>
  13. <td>{#ARR:data.1}</td>
  14. <td>{#ARR:data.2}</td>
  15. </tr>
  16. <!-- END row -->


...wbrew pozorom tutaj nie ma żadnego cache, ta tablica tak nazwana jest tylko po to, żeby nie wczytywać jednego pliku 10 razy do takiego samego bloku smile.gif Brak instrukcji warunkowych i pętli bo... nie wiem jak to ma wyglądać? Przecież w końcu po to są szablony, żeby nie umieszczać logiki pomiędzy styl?

Tak więc proszę o uwagi i pozdrawiam

Dodałem link do kodu ze swojego serwera, bo ten wyżej jak widzę padł albo usunął kod...
http://77.88.178.156/priv/

btw, nie oczekuję nie wiem jakiej odpowiedzi, chociaż wskazówkę jak to zrobić poprawnie w OOP smile.gif
carbolymer
1. Przydało by się trochę komentarzy.
2. Bardziej skapsułkować kod, pojedyńcza operacja dla pojedyńczej metody pojedyńczej klasy. (w granicach rozsądku ofc)

Dokładniej jak to zrobić to ci nie powiem, to jest tylko i wyłącznie twoja decyzja, to ma być wygodne i funkcjonalne dla ciebie. Jeżeli ta postać ci wystarcza to pozostań przy niej.

Co do ładowania templatki, to lepiej by to było zrobić w odddzielnej metodzie niż w konstruktorze.
l0ud
Dzięki za odpowiedź smile.gif

Cytat
Co do ładowania templatki, to lepiej by to było zrobić w odddzielnej metodzie niż w konstruktorze.


Hm... Zauważ że sam plik tpl jest ładowany przy metodzie display i gencode. W konstruktorze przekazuję tylko nazwę folderu i rozszerzenie dla wszystkich templatów, co raczej nie powinno się zmienić podczas działania skryptu. Jeżeli jednak jest to zrobić oddzielną metodą to napisz (bo teraz nie wiem czy nie doczytałeś, czy masz inne zdanie).

Co do komentarzy masz zupełną rację, wystawiam kod do oceny a nawet nie przygotowałem go, by inni zrozumieli. Ok, w najbliższym czasie to poprawię.

Pozdrawiam

Komentarze dodane winksmiley.jpg Mam nadzieję, że to bardziej skłoni co niektórych do odpowiedzi smile.gif

Pozdrawiam
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.