Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [pcre] preg_replace() - czesc pattern'u w tablicy.
Forum PHP.pl > Forum > PHP
starach
Witam.
Nie dawno pisałem na forum o błędzie pakietu smarty.
Postanowiłem zrobić swój własny system szablonów.
Chcę wyeliminować problem który pojawiał się w smaratach ( przynajmniej na etapie produkcyjnym )
i wykasować z szablonu wzorów których nie ma w tablicy z przypisanymi danymi.
O co chodzi ?
O to że chcę wywalić wybrane tagi {$wybrany_tag}
mam nazwy tych tagów w tablicy i chcę za pomocą preg_replace() usunąć je z szablonu wczytanego do zmiennej.
  1. <?php
  2. preg_match_all('/{$([^}]+)}/e', $this->tmpl, $array);
  3. ?>
Powyższym zapytaniem pobieram wszystkie tagi szablonowe do zmiennej $array,
potem za pomocą isset() sprawdzam czy w tablicy istnieje rekord o danym indeksie
  1. <?php
  2. if(isset($this->data[$array[1][$i]]))
  3. {
  4. echo 'Zmienna istnieje: '.$array[1][$i].'<br>';
  5. } else {
  6. echo 'Zmienna <u>nie</u> istnieje: '.$array[1][$i].'<br>';
  7. array_push($expel_arr, $array[1][$i]);
  8. }
  9. ?>
Jeśli nie istnieje wrzucam nazwy tagów do tablicy $expel_arr,
Teraz chcę za pomocą wpisów w expel_arr usunąć z szablonu tagi które nie mają przypisanej zmiennej i próba ich zamiany zakończyła by się błędem. Niestety w wyrażeniach regularnych jest bardzoo cienki.
Prosiłbym o ułożenie odpowiedniego $patternu który usuwałby z szablonu odpowiednie tagi, bo poniższy niestety mi nie działa.
  1. <?php
  2. preg_replace("/{$($expel_arr)}/e", '', $this->tmpl);
  3. ?>
bendi
Moze tak:
  1. <?php
  2. preg_replace("/{(".join('|',$expel_arr)."}/", '', $this->tmpl);
  3. ?>
starach
preg_replace("/\{(".join('|',$expel_arr)."\}/", '', $this->tmpl);
Exception 2: E_WARNING
File: D:\WWW\includes\class\class_template.php Line: 41
Error: preg_replace() [function.preg-replace]: Compilation failed: missing ) at offset 18
Coś nie tak :|
Sedziwoj
A co jak wywalany tak jest wewnątrz {* *} ?
Kicok
  1. <?php
  2. $this->tmpl = preg_replace('/{$(' . join('|', $expel_arr) . ')}/', '', $this->tmpl);
  3. ?>


Zakładając, że $expel_arr to tablica tagów do usunięcia
starach
  1. <?php
  2. $pattern = "/{$(".join('|',$expel_arr).")}/";
  3. echo '<b>'.$pattern.'</b><br>';
  4. $this->tmpl = preg_replace($pattern, '', $this->tmpl);
  5. ?>

Działa.
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.