Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: template
Forum PHP.pl > Forum > Gotowe rozwiązania
Dex1987
witam mam skrypt ktory pobiera kod HTML z pliku. i Teraz np jakbym chcial zrobic ksiege gosci to musze zrobic 3 pliki z kodem gora srodek i dol. i teraz czy dalo by sie zrobic ta ksiege tylko na tym jednym pliku html? ja myslalem zrobic to tak aby skrypt otwieral pliczek html i wyswietlal go na stronie a gdy znajdzie kawalek kodu <table id=cos...> to zerby go powtarzal x razy. Czy dalo by sie to jakos zrobic? I jak?

Z gory dzieki, narazie.
tiraeth
Dało by się. Pobierasz wzór wpisu z tego pliku html poprzez preg_match a następnie wyświetlasz go pętlą (while lub foreach) Poczytaj o SMARTY oraz zajrzyj na forum Systemy szablonów a tam jest pełno informacji na ten temat
Dex1987
nie chce wykorzystywac do tego smarty. a jak juz przy tym jestesmy to jak zrobic cos co jak napotka w tekscie slowo id (i tu sie pojawia problem bo jak ktos da wpis id=cos to bedzie powtarzal jeszcze to ale to szczegol) to zeby zapetlalo x razy dana tabele czy co tam bylo by w kodzie. moze jakas funkcja?
tiraeth
szablon.txt
Kod
JAKIS KOD COS TAM DALEJ I TAK DALEJ I TAK DALEJ<br /><br />Wpisy<br /><br />
<!-- PETLA begin -->
Nick: <b>{L_NICK}</b><br />
Wpis: <b>{L_WPIS}</b><br /><br />---------------<br /><br />
<!-- PETLA end -->
JAKIS KOD COS TAM DALEJ I TAK DALEJ I TAK DALEJ


show.php
  1. <?php
  2. /*****************************
  3.    przyjmujemy, ze zmienna $data
  4.    to wpisy w formacie NICK|+|WPIS|+|
  5.    i, ze jest to tablica
  6.  ****************************/
  7. # ZADEKLARUJ $data JAKO TABLICA Z WYNIKAMI
  8.  
  9.  
  10. $fp = fopen('szablon.txt', 'r+'); # otwieramy plik
  11. $fr = fread($fp, filesize('szablon.txt')); # odczytujemy plik
  12. fclose($fp); # zamykamy plik
  13. $fr = str_replace(array(&#092;"r\", \"n\"), '', $fr); # usuwamy znaki konca linii
  14. $zlicz = count($data); # zliczamy ilosc wpisow
  15.  
  16. if(preg_match('/<!-- PETLA begin -->(.*?)<!-- PETLA end -->/', $fr, $zmienna))
  17. {
  18.  $do_petli = $zmienna[0]; # przepisujemy to co pomiedzy znacznikami PETLA
  19.  
  20.  $zamien = $do_petli; # wiemy o co chodzi
  21.  
  22.  for($i=0; $i<$zlicz; $i++)
  23.  {
  24. list($nick, $wpis) = explode('|+|', $data);
  25.  
  26. $klucze = array(
  27.  '{L_NICK}', 
  28.  '{L_WPIS}'
  29.  );
  30. $odpowiedniki = array(
  31.  $nick,
  32.  $wpis
  33.  );
  34.  
  35. # dodajemy kod tak aby wyswietlilo nam duuzo wpisow
  36. $zamien.= str_replace($klucze, $odpowiedniki, $zamien);
  37.  }
  38.  
  39.  # zastapiamy jeden kod wieloma z petli
  40.  $fr = str_replace($do_petli, $zamien, $fr);
  41.  echo $fr; # no i wyswietlamy wszystko
  42.  
  43. }
  44. ?>

Nie wiem czy zadziała smile.gif Pisane na szybko bez sprawdzania....
Dex1987
hm cos to nie dziala. ja chcialem zrobic to jakos tak

mam taki kod

  1. <?php
  2.  
  3. mysql_connect  (&#092;"localhost\", \"root\", \"xxx\");
  4. mysql_select_db (&#092;"art\");
  5.  
  6. $query = &#092;"SELECT * FROM `users` ORDER BY `user_id`\";
  7. $result = mysql_query ($query);
  8.  
  9. class templates {
  10.  
  11. var $tpl;
  12. var $dane;
  13.  
  14. function templates ($name) {
  15.  
  16.  $this -> tpl = implode(&#092;"\", file($name));
  17. }
  18.  
  19. function add ($name, $value=&#092;"\") {
  20.  
  21.  $this -> dane[$name] = $value;
  22. }
  23.  
  24. function compile () {
  25.  
  26.  return preg_replace ('/{([^}]+)}/e', '$this -> dane[\"1\"]', $this -> tpl);
  27. }
  28. }
  29.  
  30. $tpl = new templates (&#092;"szablon.txt\");
  31.  
  32.  $tpl -> add (&#092;"L_NICK\", \"$u_name\");
  33.  $tpl -> add (&#092;"L_WPIS\", \"$u_pass\");
  34.  
  35. #while ($line = mysql_fetch_array ($result)) {
  36.  
  37.  #$u_name = $line['user_name'];
  38.  #$u_pass = $line['user_pass'];
  39.  
  40.  echo $tpl -> compile ();
  41.  
  42.  
  43. #}
  44.  
  45. ?>


i chodzi mi o to ze jak ten kod napodka w pliku html na np <!-- PETLA begin --> to zacznie wykonywac x razy ten kod a jak napotka <!-- PETLA end --> to skonczy i skonczy parsowac reszte strony i chcialem jeszcze zrobic zeby ta petla byla na zewnatrz ( nie w klasie ) ale na to juz nie mam pomyslu kompletnie :/
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-2024 Invision Power Services, Inc.