2013-05-09 82 views
0

我想添加使用條件語句到這個基本引擎的能力,我試圖發展,我不明白爲什麼它不會工作。誰能幫忙?它並沒有取代文字。添加條件語句引擎

這裏是template.php的條件語句

<?php 

class Template { 
    private $vars = array(); 

    public function assign($key, $value) { 
     $this->vars[$key] = $value; 
    } 

    public function render($file_name) { 
     $path = $file_name . '.html'; 

     if (file_exists($path)) { 

      $content = file_get_contents($path); 

      foreach ($this->vars as $key => $value) { 
       $content = preg_replace('/\{' . $key . '\}/', $value, $content); 
      } 

      $content = preg_replace('/\{if (.*)\}/', '<?php if ($1): ?>', $content); 
      $content = preg_replace('/\{elseif (.*)\}/', '<?php elseif ($1): ?>', $content); 
      $content = preg_replace('/\{else\}/', '<?php else: ?>', $content); 
      $content = preg_replace('/\{\/if\}/', '<?php endif; ?>', $content); 

      eval(' ?>' . $content . '<?php '); 

     } else { 
      exit('<h4>Engine error...</h4>'); 
     } 
    } 
} 

?> 

,這裏是在HTML實施

<div class="container"> 
      <div id="content"> 
       <h3>{pagetitle}</h3> 
       <hr /> 
       <span>My name is {username} and I am {age} years old</span> 

       {if ({age}==21)} 
        21 
       {elseif ({age}==22)} 
        22 
       {else} 
        none 
       {/if} 

      </div> 
</div> 

它的字面打印出的條件塊上面你看到它內嵌

+0

這是爲什麼這麼難用一些存在的模板引擎或只是使用PHP? – 2013-05-09 19:26:56

+0

@George Cummins它真的打印出了{{if}'...到'{/ if}' – zachstarnes 2013-05-09 19:27:08

+0

@I我不拖延我只是想試試讓所有人都這麼做 – zachstarnes 2013-05-09 19:28:02

回答

1

我想你會需要使你所有的正則表達式模式都是不真實的。

做這樣的事情:

/\{if (.*)\}/ 

將取代{if一審和}您更換的最後一個實例之間的一切。在這樣的模式使用U標誌進行匹配ungreedy:

/\{if (.*)\}/U 
+0

已經想到了。但是在解析之後,在$ content中不會有至少一個'<?php if(...):?>' – Lukas 2013-05-09 19:37:04

+0

@Lukas這就是我想的,由於某種原因,它不會工作。 – zachstarnes 2013-05-09 19:38:07

+0

@Mike勃蘭特工作,但我不得不把結果放在一個標籤,它出現 – zachstarnes 2013-05-09 19:38:41