Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pętla w parserze szablonów
akurczyk
post 18.08.2008, 19:18:40
Post #1





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

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


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

Ten post edytował akurczyk 18.08.2008, 19:19:37


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
oscar17
post 18.08.2008, 21:52:14
Post #2





Grupa: Zarejestrowani
Postów: 102
Pomógł: 22
Dołączył: 3.03.2008

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


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. ?>
Go to the top of the page
+Quote Post
akurczyk
post 19.08.2008, 10:01:10
Post #3





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

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


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)) {
}
?>


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
oscar17
post 19.08.2008, 10:08:44
Post #4





Grupa: Zarejestrowani
Postów: 102
Pomógł: 22
Dołączył: 3.03.2008

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


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ć...
Go to the top of the page
+Quote Post
akurczyk
post 20.08.2008, 08:47:17
Post #5





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

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


tyle to ja wiem ale chodzi mi o array zmiennej jak dowiedzieć się jaki ma numer aktualne powtórzenie pętli


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
oscar17
post 20.08.2008, 08:58:10
Post #6





Grupa: Zarejestrowani
Postów: 102
Pomógł: 22
Dołączył: 3.03.2008

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


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. ?>
Go to the top of the page
+Quote Post
morphi99
post 20.08.2008, 11:42:32
Post #7





Grupa: Zarejestrowani
Postów: 12
Pomógł: 2
Dołączył: 16.02.2008

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


"$count" to jest zwykły licznik, jeżeli skrypt się wykonuje to licznik się zmienia (po każdym wykonaniu o 1).
Go to the top of the page
+Quote Post
oscar17
post 20.08.2008, 12:01:50
Post #8





Grupa: Zarejestrowani
Postów: 102
Pomógł: 22
Dołączył: 3.03.2008

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


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?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 02:22