Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] podstawienie php za html
Forum PHP.pl > Forum > Przedszkole
Lee
Mam taki kod
  1. <?php
  2. $szablon = file_get_contents("./theme/Classic/news.tpl");
  3. $szablon = preg_replace('/{(.*?)}/si', "$$1", $szablon);
  4. echo $szablon;
  5. ?>

który podstawia mi zamiast np {title} tekst $title (w tym echo $szablon pokazuje mi $title jako tekst a nie zawartosć zmiennej $title)

no i jak włąsnie zrobić, żeby przetowrzyło mi {title} na $title, ale zamiast tego $title wyświetliło mi jej zawartosć (np Moja Strona)

pozdrawiam winksmiley.jpg
Athlan
może zrób tak:

  1. <?php
  2. function parser($parse_file, $parse_array = array())
  3. {
  4. if(is_file($parse_file))
  5. {
  6. $parse_size = filesize($parse_file);
  7.  
  8. if($parse_size < 1)
  9. {
  10. $parse_size = 1;
  11. }
  12.  
  13. $parse_handler = fopen($parse_file, "r");
  14. $parse_value = fread($parse_handler, $parse_size);
  15.  
  16. foreach($parse_array as $pre_code => $pre_key)
  17. {
  18. $parse_value = str_replace('{'.$pre_code.'}', $pre_key, $parse_value);
  19. }
  20.  
  21. fclose($parse_handler);
  22.  
  23. $result = $parse_value;
  24. }
  25. else
  26. {
  27. $result = "I can't find template file '$parse_file'!";
  28. }
  29.  
  30. return $result;
  31. }
  32. ?>


uzycie:

  1. <?php
  2. // tutaj nasza funkcja parsera
  3.  
  4. $zmienna1 = 'a';
  5. $zmienna2 = 'b';
  6. $zmienna3 = 'c';
  7.  
  8. $preparse = array(
  9. 'ZMIENNA1' => $zmienna1,
  10. 'ZMIENNA2' => $zmienna2,
  11. 'ZMIENNA3' => $zmienna3
  12. );
  13. echo parser('template.tpl', $preparse);
  14. ?>


templat:

  1. {ZMIENNA1} hehe {ZMIENNA2} no i ostatnie: {ZMIENNA3}
Lee
hmm no niby ok jest wszystko, ale ja to bardziej obiektowo robie winksmiley.jpg ale dobra chyba poradze sobie z przeróbką pod klase
Athlan
Ta? kod z posta #1 chyba nie jest obiektowo...

mój parser (prehistoria) ma za zadanie pokazać Ci że masz wsadzić dane do tablicy i wywalić je w parserze w foreach() w odpowiedni sposób

to na tyle smile.gif

pozdrawiam Cię smile.gif
Lee
no tak ale mój kod łatwo obiektowo przerobić winksmiley.jpg chociarz ten już też przerobiłęm (funkcje) - nie obrazisz się chyba jak go wykorzystam smile.gif ?

przerobiony kod jak by ktoś chciał (odrazu jako klasa winksmiley.jpg)
  1. <?php
  2.  
  3. final class template{
  4. public $parse_size;
  5. public $parse_handler;
  6. public $parse_value;
  7. public $pre_key;
  8. public $pre_code;
  9. public $converted;
  10.  
  11. public function parser($parse_file, $parse_array = array())
  12. {
  13. if(is_file($parse_file))
  14. {
  15. $this -> parse_size = filesize($parse_file);
  16.  
  17. if($this -> parse_size < 1)
  18. {
  19. $this -> parse_size = 1;
  20. }
  21.  
  22. $this -> parse_handler = fopen($parse_file, "r");
  23. $this -> parse_value = fread($this -> parse_handler, $this -> parse_size);
  24.  
  25. foreach($parse_array as $this -> pre_code => $this -> pre_key)
  26. {
  27. $this -> parse_value = str_replace('{'.$this -> pre_code.'}', $this -> pre_key, $this -> parse_value);
  28. }
  29.  
  30. fclose($this -> parse_handler);
  31.  
  32. $this -> converted = $this -> parse_value;
  33. }
  34. else
  35. {
  36. $this -> converted = 'Nie mogę odnaleźć pliku '.$this -> parse_file.'!';
  37. }
  38.  
  39. return $this -> converted;
  40. }
  41. }
  42.  
  43. $template = new template;
  44.  
  45. ?>
Athlan
omg, przecież to bedzie dłuzej chodzić... pomyśl czasem czy pojedynczychfunkcji po prostu nie mozęsz zostawić...

@Lee: po to Ci ten kod dałem żebyś sobie go wziął... btw opis całości jak coś: http://www.vgroup.pl/tutorials/4/

edit: i daj sobie tam konstuktor jeszcze... cache dopisz smile.gif

pozdrawiam smile.gif
Lee
narazie robie system newsów obiektowo + templaty więc w cache się nie bawie jeszcze, ale konstruktor...

UPDATE

Jak zrobić, żeby czytało kod z pomiędzy znaczników
<!-- START news --> i <!-- END news --> ? ponieważ chcę w jednym pliku zrobić wyświetlanie newsów, dalszej części ich i dodawania komentów i to będzie wyglądać tak (news.tpl)
Kod php
  1. <?php
  2. <!-- START news -->
  3. // HTML z newsem
  4. <!-- END news ->>
  5.  
  6. <!-- START read_more -->
  7. // HTML z dalszą częścią newsa
  8. <!-- END read_more -->
  9.  
  10. // itp.
  11. ?>


da się tak zrobić ? :|

Pozdrawiam rolleyes.gif
Athlan
nie wiem... może zastosuj tutaj preg_replace_callback" title="Zobacz w manualu php" target="_manual hmm ?

odpowiednią część kodu wlepić w tą funckję i przeparsować, nie wiem czy to dobry pomysł smile.gif

pozdrawiam smile.gif
Lee
wymyśliłem, żeby użyć wyrażeń regularnych (słabo je znam coś ....) i zorbić tak, że mam kod
<!-- START news --> i <!-- END news --> i wyrażeniami regularnymi zrobić tak żeby przerobiło
<!-- START news --> na if ($_GET['mod'] == 'news') {
a <!-- END news --> na }
tylko nie wiem czy da rade takie coś zrobić to 1, dwa to jeżeli da rade to nie wiem jak to zrobić rolleyes.gif

btw. macie jakis kurs po POLSKU dotyczący wyrażen regularnych bo czuje że bez nich dużo nie rusze dalej... =/
Athlan
jeżeli masz ulepszyć mój parser to proszę:

http://php5.pl/php/wyrazenia_regularne

pozdro smile.gif
Apo
to ja polecam funkcje str_replace.
Athlan
Cytat
to ja polecam funkcje str_replace.


omg smile.gif

str_replace tutaj nic nie załatwi... trzeba przeparsowac środek kodu pomiędzy jakimiś elementami a nie część stałą np <garnek> na <rondel>... str_replace nie poradzi sobie z przeparsowaniem:

[cos]ELEMENT[/cos]

pozdrawiam Apo smile.gif
Lee
jak by str_replace coś pomogło to bym nie pisał tego tematu nawet bo bym sam to zrobił sleep.gif

ma ktoś jakiś pomysł na rozwiązanie mojego (chyba) nietypowego, bo zaraz wyjde z siebie i stanę obok sad.gif
Apo
np:
  1. <?php $content = str_replace('<!-- START news -->', '<?php if ($_GET['mod'] == 'news') { ?>', $content); ?>


itd
Athlan
pregi sa szybsze

btw: masz tutaj zastosownie tego, co chcesz osiągnąć:
http://beatsfactory.pl/qbs/justit.html

pozdrawiam 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.