Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_replace z array
Forum PHP.pl > Forum > Przedszkole
buliq
Witajcie.

Potrzebuję pomocy odnośnie preg_replace i array. Tworzę małą klasę do szablonów tpl i mam taki oto kod
Kod
$fp = fopen($this -> tpl_dir."/".$file, "r");
$dane = fread($fp, filesize($this -> tpl_dir."/".$file));
fclose($fp);  

$dane = preg_replace("/{(.*?)}/", "<?php echo '".$this -> varibles['\\1']."'; ?>", $dane);


$file2 = md5(time()).".".$file;
$this -> cached_file = $file2.".php";
$fp = fopen($this -> tpl_dir."/cache/".$this -> cached_file, "w");
fputs($fp, $dane);  
fclose($fp);


Jest to fragment funkcji która podmieniała by zmienne w pliku tpl na ich wartość zdefiniowaną w pliku index.php
Kod
$tpl -> varible(array("lol" => 'Jesteś noobem',
                             "noob" => 'Jesteś lolem'));


w pliku index.tpl mam wpisane
Kod
{$lol}
{$noob]


problem w tym że nie wyświetla się nic. :/

Pomóżcie
ziqzaq
Po pierwsze "{" to znak który trzeba escapeować przez "\" (tak jak np. "." lub "]").
Przykład:
  1. <?php
  2. $template = 'Mamy tu zmienną: {$zmienna}<br/>Przykład: {$przyklad}';
  3. $variables = array(
  4.    'zmienna' => '1',
  5.    'przyklad' => '1'
  6. );
  7. $pattern = array();
  8. $replace = array();
  9. foreach ($variables as $v => $k)
  10. {
  11.    $pattern[] = '/{$('.$v.')}/';
  12.    $replace[] = 'zmienna=1, wartość='.$k;
  13. }
  14.  
  15. $output = preg_replace($pattern, $replace, $template);
  16. print_r($output);
  17. ?>

Zauważ że zgodnie z manualem preg_replace "Example #3 Replacing several values" jako argumenty przekazujemy dwie tablice.
A taki kod (z Twojego preg_replace):
  1. <?php
  2. $this -> varibles['1']
  3. ?>

daje w php ostrzeżenie o nieistniejącym indeksie ("\\1" nie zamienia sie na nazwę zmiennej/indeks).

Mogę się mylić, ale chyba źle do tego podszedłeś.

Edit: Acha i zapomniałbym. Przykład zastosowania "{". Regex "/[a]{5,8}/" odpowiada od 5 do 8 literek "a".
buliq
no i wszystko prawie piknie

Warning: Invalid argument supplied for foreach() in ..fb2115tbdg1b1d5h\fb1df1b5fdbv\tpl.class.php on line 28

linia 27 i 28
Kod
$vars = $this -> variables;
foreach ($vars as $v => $k)


i co tu jest nie tak?
ziqzaq
Najwyraźniej $this -> variables; nie jest tablicą.
Zrób sobie var_dump($vars) i zobacz.
buliq
nie wiem czemu ale jakoś samo się naprawiło smile.gif

Dzięki za pomoc.
Można zamknąć
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.