Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pętla w parserze szablonów
Forum PHP.pl > Forum > PHP
akurczyk
Napisałem parsera szablonów:
  1. <?php
  2. $template = file_get_contents("template/index.html");
  3. $template = str_replace("{title}", "Tytul", $template);
  4. for($i=1; $i<10; $i++) {
  5. $template = str_replace("{news_title}", "Tytul $i newsa", $template);
  6. $template = str_replace("{news_content}", "Tresc $i newsa", $template);
  7. }
  8. echo $template;
  9. ?>


Szablon:
  1. <title>{title}</title>
  2. </head>
  3. {news}
  4. {news_title}<br>
  5. {news_content}<br>
  6. {/news}
  7. </body>
  8. </html>


Jak zrobić żeby fragment pomiędzy {news} i {/news} powtarzany $i razy? questionmark.gif
oscar17
A mówisz że jest warto pisać własny parser, może podpatrz jak to jest zrobione w innych np. w SMARTY.
Tak na szybkiego to może taki kod, ale on z pewnością nie jest optymalny, więc fajnie jak się ktoś jeszcze wypowie i doradzi jak to można optymalnie napisać...
  1. <?php
  2. $template = file_get_contents("template/index.html");
  3. $template = str_replace("{title}", "Tytul", $template);
  4.  
  5. ereg("{news}(.*){/news}", $template, $regs);
  6.  
  7. for($i=1; $i<=10; $i++) 
  8. {
  9. $news_arr[$i] = str_replace("{news_title}", "Tytul $i newsa", $regs[1]);
  10. $news_arr[$i] = str_replace("{news_content}", "Tresc $i newsa", $news_arr[$i]);
  11. }
  12.  
  13. $news_section = join("<br>",$news_arr);
  14.  
  15. $template = ereg_replace("({news}.*{/news})", $news_section, $template);
  16.  
  17. echo $template;
  18. ?>
akurczyk
Ok a jak by to wyglądało w przypadku pętli while (pobieranie wyników z db)?
Kod
<?php
while($wiersz = mysql_fetch_array($wykonaj)) {
}
?>
oscar17
No to chyba wystarczy zamiast for dać while i w miejscu "Tytul $i newsa" podajesz tytuł newsa z bazy np. $wiersz['tytul'] i podobnie z treścią...
Niestety nie mam teraz możliwość przetestowanie kodu żadnego, ale to powinno wystarczyć...
akurczyk
tyle to ja wiem ale chodzi mi o array zmiennej jak dowiedzieć się jaki ma numer aktualne powtórzenie pętli
oscar17
nie rozumiem do końca o co chodzi, o counter?
np.
  1. <?php
  2. $count=0
  3. while($wiersz = mysql_fetch_array($wykonaj)) 
  4. {
  5. $count++;
  6. echo 'Wiersz nr: '.$count;
  7. }
  8. ?>
morphi99
"$count" to jest zwykły licznik, jeżeli skrypt się wykonuje to licznik się zmienia (po każdym wykonaniu o 1).
oscar17
Cytat(akurczyk @ 20.08.2008, 09:47:17 ) *
jak dowiedzieć się jaki ma numer aktualne powtórzenie pętli

No to $count właśnie pokaże który raz wykonuje się while, chyba o to chodzi?
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.