Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_replace nie zamienia wszystkich
Forum PHP.pl > Forum > PHP
karis
cześc

napisałem sobie taką klasę do obsługi szablonów
  1. <?php
  2. class Themes
  3. {
  4.     private $data;
  5.     private $file;
  6.     private $key;
  7.     private $value;
  8.    
  9.     public function add($pattern, $command)
  10.     {
  11.        
  12.         /*
  13.          $tablica[$pattern] = $command;
  14.         
  15.          $this->data[$pattern] .= $tablica[$pattern];
  16.          */
  17.        
  18.         $key[] = '%{'.$pattern.'}%';
  19.         $value[] = $command;
  20.         $this->key = $key;
  21.         $this->value=$value;
  22.        
  23.        
  24.     }
  25.    
  26.     public function load($file)
  27.     {
  28.         $op = file_get_contents($file);
  29.         $this->file = $op;
  30.         return true;
  31.     }
  32.    
  33.     public function debug()
  34.     {
  35.        
  36.     }
  37.    
  38.     public function show()
  39.     {
  40.        
  41.             //echo 'Klucz: '.$key.',  Wartosc: '.$value.'<br />';
  42.            
  43.             //
  44.            
  45.            //$content = preg_replace('%{'.$key.'}%', $value, $this->file);
  46.            //$content .= str_replace('{'.$key.'}', ''.$value.'', $this->file);
  47.            
  48.            echo preg_replace($this->key, $this->value, $this->file);
  49.    
  50.            return true;
  51.     }
  52.    
  53. }
  54.  
  55. $szablon = new Themes();
  56. $szablon->add('imie', 'Piotr');
  57. $szablon->add('kupa', 'z dupy wychodzi');
  58. $szablon->add('d', 'asdasdasd');
  59. $szablon->load('pomoce/123.php');
  60. $szablon->show();
  61. $szablon->debug();
  62.  
  63.  
  64.  
  65.  
  66. ?>


no i teraz jak wstawie w pliku pomoce.123.php

Kod

     Moje imie to {imie}
     Kupsko: {kupa}
     Reszta: {d}


to zamienia tylko jeden element.

jak zrobic zeby zamieniało wszystko?
erix
  1. po co do takiej prostej rzeczy preg_replace" title="Zobacz w manualu PHP" target="_manual, skoro wystarczy w zupełności str_replace" title="Zobacz w manualu PHP" target="_manual?
  2. Twój system jest dość pamięciożerny
karis
próbowałem z str_replace ale to samo. tylko jeden element zamieniało
tmka
wydaje mi sie ze metoda add powinna wyglądać raczej tak:
  1. <?php
  2. public function add($pattern, $command)
  3.    {
  4.      
  5.        /*
  6.         $tablica[$pattern] = $command;
  7.       
  8.         $this->data[$pattern] .= $tablica[$pattern];
  9.         */
  10.      
  11.        $key = '%{'.$pattern.'}%';
  12.        $value = $command;
  13.        $this->key[] = $key;
  14.        $this->value[]=$value;
  15.      
  16.      
  17.    }
  18. ?>
Fifi209
Cytat(karis @ 16.07.2009, 15:51:17 ) *
próbowałem z str_replace ale to samo. tylko jeden element zamieniało


Wygrzebałem gdzieś:

  1. <?php
  2. class view_template {
  3.    
  4.        private $vars;
  5.        private $values;
  6.        private $content;
  7.        
  8.        public function __toString() {
  9.            return $this->parse();
  10.        }
  11.        
  12.        public function add($var, $value) {
  13.            $this->vars[] = $var;
  14.            $this->values[] = $value;
  15.            return true;
  16.        }
  17.        
  18.        public function load($text) {
  19.            $this->content = $text;
  20.        }
  21.    
  22.        public function parse() {
  23.            if ((is_array($this->vars)) && (is_array($this->values))) {
  24.                return str_replace($this->vars, $this->values, $this->content);
  25.            }else{
  26.                return 'Error';
  27.            }
  28.        }
  29.        
  30.    }
  31. ?>


użycie:
  1. <?php
  2. $view = new view_template();
  3. $view->load('tekst ze zmiennymi do {zmienna} wczytania');
  4. $view->add('{zmienna}', 'wartosc'); // za {zmienna} zostanie podstawiona wartosc
  5.  
  6. echo $view->parse();
  7.  
  8. // ew. echo $view;
  9. ?>
karis
dzięki, obydwa działają 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.