Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pętla w parserze?
akurczyk
post
Post #1





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


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!

Ten post edytował akurczyk 16.07.2008, 11:45:05
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ucho
post
Post #2





Grupa: Zarejestrowani
Postów: 300
Pomógł: 32
Dołączył: 31.07.2006

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


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

Ten post edytował ucho 16.07.2008, 12:13:51
Go to the top of the page
+Quote Post

Posty w temacie
- akurczyk   Pętla w parserze?   16.07.2008, 11:26:53
- - ucho   Wiem że to niezbyt konstruktywne, ale skoro n...   16.07.2008, 12:12:40
- - akurczyk   no dobra a gdzie to wstawić mógłby...   16.07.2008, 12:19:08


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: 12.10.2025 - 16:32