Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]eval do szablonów - czy dobry pomysł?
Evinek
post
Post #1





Grupa: Zarejestrowani
Postów: 280
Pomógł: 46
Dołączył: 23.03.2010

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


Przeglądałem różne skrypty for w poszukiwaniu dobrych rozwiązań. Padło na eval() z MyBB.
Zrobiłem taki kod:

#template.php (proszę nie krytykować, że to nie nadaje się na OOP ponieważ później tą klasę będę rozwijał)
  1. <?php
  2. class template{
  3. function parse($file){
  4. return file_get_contents('./html/'.$file.'.php');
  5. }
  6. }
  7. ?>

#index.php
  1. <?php
  2. include('./template.php');
  3. $template = new template;
  4. eval("\$test = \"".$template->parse('index')."\";");
  5. echo $test;
  6. ?>


Czy takie rozwiązanie jest pod względem optymalności i bezpieczeństwa dobre?
Jeśli są jakieś zagrożenia to jakie?

Jak testowałem 51 szablonów w jednym skrypcie, szablony:
  1. Test: {$ttt}<br />
  2. <ul>
  3. {$linki}
  4. </ul>
Użyte jeden raz
  1. <li>$links</li>
Użyte 50 razy

, to czas na localhost (z pendrive) dawał: około 0.05s.
a na ugu: 0.0009s.

Przy większych plikach pewnie czas się zwiększy dlatego pytam was w tej sprawie.
Pewnie będę musiał też cachować te szablony, tylko pytanie jak?
Np. szablon header będzie posiadał zmienną {$login} więc tak czy siak będzie musiało przejść przez eval. Macie na to rady?


Z góry dziękuje i pozdrawiam, Paweł.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Evinek
post
Post #2





Grupa: Zarejestrowani
Postów: 280
Pomógł: 46
Dołączył: 23.03.2010

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


No to już nie wiem jak to zrobić.
Chce robić coś takiego:
  1. <?php
  2. <?php
  3. $template = new template;
  4.  
  5. $template->load('link'); //ładowanie pliku do template
  6. $links = '';
  7. for($i = 0; $i < 10; $i++){
  8. $link['link'] = 'http://google.pl';
  9. $link['title'] = 'Poszukaj w google '.$i;
  10. $links .= $template->parse('link'); //Parsowanie szablonu który wcześniej został załadowany - dodatkowo przypisanie go do zmiennej
  11. /*
  12. #link <--szablon
  13. <li><a href="$link['link']">$link['title']</a></li>
  14. //Czyli stworzy po prostu link z szablonu
  15. */
  16. }
  17. $template->load('menu'); //ładowanie menu
  18. $menu = $template->parse('menu'); //parsowanie
  19. /*
  20. #menu <--szablon
  21. <ul>
  22. $links
  23. </ul>
  24. //Doda do menu linki
  25. */
  26.  
  27. $template->display('index');
  28. /*
  29. #index <--szablon
  30. Bla bla bla
  31. $menu
  32. Bla bla bla
  33. //Wyświetli stronę z dołączonym menu
  34. */
  35. ?>


Zależy mi na tym aby wszystkie zmienne mógłbym używać w szablonie. Czyli replace odpada bo jak będzie tablica to za dużo zabawy.
Wolałbym swój kod który mógłbym łatwo edytować. Chce własne klasy tylko do swoich projektów. Jeśli coś będę robił komercyjnego to nie będę się bawił w tworzenie własnego kodu tylko będę brał gotowce.
Ważne jest abym mógł właśnie z szablonu tworzyć takie linki po czym dodawać je do szablonu innego (połączyć to) po czym w końcu ten cały szablon dać do głównego szablonu (przykład powyżej). Chce ominąć rzeczy w stylu:
$links .= '<a href="...">...</a>';
ponieważ chce maksymalnie oddzielić HTML od PHP.

Co mi możecie polecić? Szukam na ten temat już z ponad dwa miesiące. Wiele stron przeszukałem i nadal nic.

Ten post edytował Evinek 24.06.2012, 16:54:48
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.10.2025 - 02:48