Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Szablon w pętli
Forum PHP.pl > Forum > PHP
dyktek
Witam, mam kodzik który parasuje szablony no i natrafiłem na pierwszy problem wyświetlanie szablonu w pętli chodzi o to że chce wyświetlić pole multiple które będzie wypełniane wynikiem z bazy...

no i kod pola multiple wygląda tak:

  1. <div class="naglowek"><b>Wybierz film, który chcesz edytować</b></div>
  2. <br /><div align="center">
  3. <form action="filmy.php?akcja=edit_movie2" name="mod" method="post" onDblClick="document.mod.submit();">
  4. <select class="mult_mod" name="grupa" multiple>
  5. <option value="{IDFILMU}" style="font-family:Verdana; font-size:11px; cursor: auto;">{TYTUL}</option>
  6. </select></form></div>


no i gdy wrzuce to w while to wiadomo tyle razy ile wykona sie pętla tyle razy wywoła ten plik a tego nie chce powielać ma jedynie tą część
  1. <option value="{IDFILMU}" style="font-family:Verdana; font-size:11px; cursor: auto;">{TYTUL}</option>


więc wpadłem na niezbyt szczęśliwe rozwiązanie a mianowicie podzieliłem to na trzy pliki

gora.tpl

  1. <div class="naglowek"><b>Wybierz film, który chcesz edytować</b></div>
  2. <br /><div align="center">
  3. <form action="filmy.php?akcja=edit_movie2" name="mod" method="post" onDblClick="document.mod.submit();">
  4. <select class="mult_mod" name="grupa" multiple>


sroder.tpl
  1. <option value="{IDFILMU}" style="font-family:Verdana; font-size:11px; cursor: auto;">{TYTUL}</option>


dol.tpl
  1. </select></form></div>


proszę używać poprawnego bbcode.
HTML do kodu html.
poprawiam
revyag



no i kod wyświetlający

  1. <?php
  2. $templates->load('gora');
  3. $templates->blocks[] = array ('' => '');
  4. $templates->parse();
  5.  $templates->show_result();
  6.  
  7.  
  8.  
  9.  
  10. $query = mysql_query("SELECT id_filmu, tytul FROM mod_filmy ORDER by tytul") or die (mysql_error());
  11. while($row = mysql_fetch_array($query)){
  12. $templates->load('srodek');
  13.  $templates->blocks[] = array ('IDFILMU' => $row['id_filmu'], 'TYTUL' => $row['tytul']); // ustalamy bloki do zamiany
  14.  $templates->parse();
  15.  $templates->show_result();
  16.  
  17.  }
  18.  
  19.  
  20. $templates->load('dol');
  21. $templates->blocks[] = array ('' => '');
  22. $templates->parse();
  23.  $templates->show_result();
  24. ?>



ale niestety jest lipa i zwraca mi taki kod

  1. <form action="filmy.php?akcja=edit_movie2" name="mod" method="post" ondblclick="document.mod.submit();">
  2. <select class="mult_mod" name="grupa" multiple="multiple">
  3.  
  4.  
  5. </select><select class="mult_mod" name="grupa" multiple="multiple">
  6.  
  7.  
  8. </select><select class="mult_mod" name="grupa" multiple="multiple"><option value="1" style="font-family: Verdana; font-size: 11px; cursor: auto;">Epoka Lodowcowa</option>
  9.  
  10.  
  11.  
  12. </select><select class="mult_mod" name="grupa" multiple="multiple">
  13.  
  14.  
  15. </select><select class="mult_mod" name="grupa" multiple="multiple"><option value="1" style="font-family: Verdana; font-size: 11px; cursor: auto;">Epoka Lodowcowa</option>
  16.  
  17.  
  18.  
  19. </select><select class="mult_mod" name="grupa" multiple="multiple"><option value="1" style="font-family: Verdana; font-size: 11px; cursor: auto;">Epoka Lodowcowa</option>
  20. <option value="2" style="font-family: Verdana; font-size: 11px; cursor: auto;">JAkis film</option>
  21.  
  22.  
  23.  
  24. </select><select class="mult_mod" name="grupa" multiple="multiple">
  25.  
  26. </select><select class="mult_mod" name="grupa" multiple="multiple"><option value="1" style="font-family: Verdana; font-size: 11px; cursor: auto;">Epoka Lodowcowa</option>
  27.  
  28.  
  29.  
  30. </select><select class="mult_mod" name="grupa" multiple="multiple"><option value="1" style="font-family: Verdana; font-size: 11px; cursor: auto;">Epoka Lodowcowa</option>
  31. <option value="2" style="font-family: Verdana; font-size: 11px; cursor: auto;">JAkis film</option>
  32.  
  33.  
  34.  
  35. </select><select class="mult_mod" name="grupa" multiple="multiple"><option value="1" style="font-family: Verdana; font-size: 11px; cursor: auto;">Epoka Lodowcowa</option>
  36. <option value="2" style="font-family: Verdana; font-size: 11px; cursor: auto;">JAkis film</option>
  37.  
  38. </select></form></div>


czyli syf totalny ohmy.gif

ma ktoś z was jakiś pomysł jak rozwiązać ten probelm
nickers
zrob sobie znaczniki

  1. <!-- tutaj zaczyna sie plik gora.tpl -->
  2. .. tresc pliki
  3. <!-- koniec gora.tpl -->


i tak w kazdym pliku, bo wyglada, jakbys mial pomieszane zawartosci plikow gota.tpl, sroderk.tpl, dol.tpl, albo masz skopany system template'ow (questionmark.gif jak to sie pisze smile.gif )

Moze przez przypadek dokleiles cos do srodek.tpl?

Jesli pliki sa ok, to moze system miesza to co wczytuje z tym co juz mial wczesniej??
dyktek
no testowałem to i coś chyba jest z tą klasą która parasuje szablon bo niektóre plik ładuje kilka razy choć jest poza pętlą while zapodam jeszcze moze nizej kod klasy której uzywam.

  1. <?php
  2.  class Templates
  3.  {
  4.  
  5. var $unparsed = array ();
  6.  
  7. var $parsed = array ();
  8.  
  9. var $blocks = array();
  10.  
  11. var $last_loaded;
  12.  
  13. function load($plik)
  14. {
  15.  if($plik == $last_loaded)
  16.  {
  17. $this->unparsed[] = end($this->unparsed);
  18.  }
  19.  elseif(file_exists(F_TPL.$plik.'.tpl'))
  20.  {
  21. $file = @fopen(F_TPL.$plik.'.tpl',r);
  22. flock($file, 2);
  23. $this -> unparsed[] = fread($file,filesize(F_TPL.$plik.'.tpl'));
  24. flock($file, 3);
  25. $this->last_loaded = $plik;
  26.  }
  27.  else
  28. echo 'Plik ' .$plik. ' nie istnieje.';
  29. } #end function load()
  30.  
  31. function parse()
  32. {
  33.  $i=0;
  34.  foreach ($this->unparsed as $template)
  35.  {
  36. $found = array();
  37. if(preg_match_all("#\{(.+?)\}#is", $template, $found))
  38. {
  39.  foreach($found[1] as $block)
  40.  {
  41. $block_name = '{'.$block.'}';
  42. $block_values = $this -> blocks[$i][$block];
  43. $template = str_replace($block_name, $block_values, $template);
  44.  }
  45. }
  46. $this -> parsed[] = $template;
  47. $i++;
  48.  }
  49. } #end function parse()
  50.  
  51. function show_result($which="all",$to=0)
  52. {
  53.  if($which >= 0 && $to >= 0 && $to <= count($this->parsed) && $which != 'all')
  54.  {
  55. if($which < $to)
  56. {
  57.  while($which <= $to)
  58.  {
  59. echo $this->parsed[$which];
  60. $which++;
  61.  }
  62. }
  63. else
  64. {
  65.  while($which >= $to)
  66.  {
  67. echo $this->parsed[$which];
  68. $which--;
  69.  }
  70. }
  71.  }
  72.  elseif($which != 'all')
  73.  {
  74. echo $this->parsed[2];
  75.  }
  76.  else
  77.  {
  78. foreach($this->parsed as $parsed)
  79. {
  80.  echo $parsed;
  81. }
  82.  }
  83. } #end function show_result()
  84.  } #end class Templates
  85.  define('F_TPL','tpls/');
  86. ?>
nickers
Sorki, ze tak pozno smile.gif

sprawdzilem to i klasa jest ok. zle jej uzywasz.

Ladujesz plik i ustawiasz wartosci i ladujesz kolejny plik.
Dopiero gdy chcesz wyswietlic zawartosc to uzywasz parse() i show_result().

Tak poza tym to zainteresuj sie OPT lub SMARTY.
dyktek
hehe już od weekendu zacząłem ze smarty i poszło mi gładziej... cool.gif
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.