Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: klase templatek - funkcja loop'owania
Forum PHP.pl > Forum > PHP
deniol13
Witam.
Jako że uczę się OOP i PHP (nie daje tego do działu Programowanie Obiektowe bo ten problem da sięrozwiązać jako czysty kod PHP) postanowiłem zrobić klasę templatek, taką prostą.
Wszystko ok śmiga, doszedłem do momentu w którym mogę wykonać pętle.
Tzn. mam w pliku .tpl

  1. <!-- LOOP asd -->
  2. {NUM}a
  3. <!-- /LOOP asd -->


I plik template.php i część jego kodu odpowiedzialna za looping
  1. function get_loop( $loop_id, $tpl )
  2. {
  3. $x = str_replace( "\n", "", $this->tpldata[$tpl] );
  4. preg_match( '|<!-- LOOP '. $loop_id .' -->(.*)<!-- /LOOP '. $loop_id .' -->|', $x, $loop );
  5. return $loop[0];
  6. }
  7.  
  8. function loop( $loop, $tpl, $vars)
  9. {
  10. $loop = $this->get_loop( $loop, $tpl );
  11. $varsa = array();
  12. foreach( $vars AS $var => $content )
  13. {
  14. $this->loopData[$loop] = str_replace( '{'. $var .'}', $content, $loop );
  15. }
  16. echo $this->loopData[$loop];
  17.  
  18. }


plik index.php który loopuje
  1. for( $i = 0; $i<5; $i++ )
  2. {
  3. $template->loop( 'asd', 'index_body', array(
  4. 'NUM' => 'a'.$i,
  5. ) );
  6. }


wszystko jest ok, mam 0a 1a 2a 3a. ale jak dodam kolejną ''zmienną'' do array $vars
$template->loop( 'asd', 'index_body', array(
'NUM' => 'a'.$i,
'ZEN' => 'test'.$i
) );

to sie wszystko sypie i dostaje ''nie przekompilowany'' kod z pliku .tpl
Zyx
1. Obowiązkowa lektura dla wszystkich pragnących napisać własny system szablonów:

http://pl.wikibooks.org/wiki/PHP/Prosty_ed...2asny_system.3F

2. A dziwisz się, skoro nadpisujesz sobie wyniki poprzednich iteracji pętli? Popatrz sobie, skąd bierzesz treść, dokąd ją zapisujesz:

  1. $this->loopData[$loop] = str_replace( '{'. $var .'}', $content, $loop );


W ogóle to racz zauważyć, że do str_replace możesz podać tablicę zmiennych do zamiany...
deniol13
Cytat(Zyx @ 6.06.2010, 11:37:57 ) *
1. Obowiązkowa lektura dla wszystkich pragnących napisać własny system szablonów:

http://pl.wikibooks.org/wiki/PHP/Prosty_ed...2asny_system.3F

2. A dziwisz się, skoro nadpisujesz sobie wyniki poprzednich iteracji pętli? Popatrz sobie, skąd bierzesz treść, dokąd ją zapisujesz:

  1. $this->loopData[$loop] = str_replace( '{'. $var .'}', $content, $loop );


W ogóle to racz zauważyć, że do str_replace możesz podać tablicę zmiennych do zamiany...



dzięki Ci wielkie. glownie za to ze nie dales mi ''gotowca pod ryj''
  1. function loop( $loop, $tpl, $vars)
  2. {
  3. $loopy = $this->get_loop( $loop, $tpl );
  4. $varsy = array();
  5. $varsa = array();
  6. $i = 0;
  7. foreach( $vars AS $var => $content )
  8. {
  9. $varsy[$i] = $content;
  10. $varsa[$i] = $var;
  11. $i++;
  12. }
  13. $this->loopData[$loop] = str_replace( $varsa, $varsy, $loopy );
  14. /*
  15. * if( !$this->loopData[$loop] )
  16. $this->loopData[$loop] = str_replace( '{'. $var .'}', $content, $loopy );
  17. else
  18. $this->loopData[$loop] = str_replace( '{'. $var .'}', $content, $this->loopData[$loop] );
  19. */
  20. echo $this->loopData[$loop];
  21.  
  22. }


tak to zrobilem i dziala smile.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.