Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pętla w parserze?
Forum PHP.pl > Forum > PHP
akurczyk
index.php:
  1. <?php
  2. mysql_connect("localhost", "root", "vertrigo");
  3. class template {
  4. var $source;
  5. var $values=array();
  6. function load($file) {
  7. return($this->source=file_get_contents($file));
  8. }
  9. function init($key, $value) {
  10. $this->values[$key]=$value;
  11. }
  12. function run() {
  13. echo preg_replace('/{(.+?)}/e', '$this->values['{1}']', $this->source);
  14. }
  15. }
  16. $template=new template;
  17. $template->load("template.html");
  18. $template->init("{TITLE}", "Tytuł strony");
  19. $query = mysql_query("SELECT * FROM users ORDER BY id");
  20. $template->init("{FOR}", while($result=mysql_fetch_array($query)) {);
  21. $template->init("{LOGIN}", $result['login']);
  22. $template->init("{/FOR}", });
  23. $template->run();
  24. ?>

template.html:
  1. <title>{TITLE}</title>
  2. </head>
  3. <ul>
  4. {FOR}<li>{LOGIN}</li>{/FOR}
  5. </ul>
  6. </body>
  7. </html>

Teraz php wywala mi błędy, a jak "wyjme" pętle z {FOR}, {/FOR] to wyświetla się tylko jeden wynik jak zrobić żeby można było wyświetlić kilka razy treść między {FOR} a {/FOR} z podstawieniem innych wyników z db za każdym razem.
Dodam jeszcze że chce zmieścić się w jednym pliku i niechce tworzyć osobnego pliku do kilkukrotnego przetwarzania.
Proszę o pomoc!
ucho
Wiem że to niezbyt konstruktywne, ale skoro nie potrafisz, to po co się meczysz z systemem szablonów zamiast po prostu zastosować np. Smarty?

W bardzo pseudo kodzie powinno to być coś takiego:
  1. <?php
  2. $matches = preg_find( {FOR=({$TABLICA})(.*?){/FOR} ,$template->source) {
  3.  foreach tmatches as $block {
  4. $array = template->resolve($block[1])
  5. template->init('array', $array)
  6. $string = $template->resolve($block[2])
  7. $template->source = str_replace($block[0], $string, $template->source)
  8.  }
  9. }
  10. ?>

Gdzie resolve to samo co robi run na stringu przekazanym jak o argument
akurczyk
no dobra a gdzie to wstawić mógłbyś ten kod wstawić do mojego kodu był bym wdzięczny.
wcześniej używałem smartów a teraz po prostu próbuje zrobić coś takiego samemu.
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.