2011-12-21 80 views
-1

我有關於HTML模板的問題..我已創建一個模板函數替換標誌物與從數據庫內容的HTML模板..寫輸入值轉換成HTML模板

/*********************************************************** 
    * TemplateGenerator will match markers in a defined html 
    * template and replace them with corresponding data 
    * i.e. ###MARKER_1### in html template will be replaced 
    * with data in the ###MARKER_1### array key defined 
    * in GetMarkers function. 
    * 
    * @param string | The html template 
    *     The template can contain all the html the 
    *     layout needs - matched markers will be replaced. 
    ************************************************************/ 
    public static function TemplateGenerator($template) { 

     /* Get content from the html template */  
     $data = file_get_contents($template); 

     if(isset(self::$newmarkers)) { 

      /************************************************** 
      * Match each key in $this->markers array 
      * and replace with the correct value 
      ***************************************************/ 
      foreach(self::$newmarkers as $key => $value) { 
        if(preg_match("/". preg_quote($key) ."/", $data, $matches)) { 
         $data = str_replace($key, $value, $data); 
       } else { 
        $data = $data; 
       } 
      } 

      return $data; 

     } else { 
      if(!empty($data)) { 
       echo $data; 
      } else { 
       die("Der er sket en fejl med genereringen af siden"); 
      } 
     } 
    } 

我用這函數在一個PHP通訊應用程序..這工作幾乎完美,但是當我創建的應用程序,我沒有考慮編輯信函的可能性(爲什麼,我不知道)。

我有一個帶有輸入字段的HTML模板(standard.html)來創建一個簡報。

<h1 style="background-image: url(gfx/icons/new.png); background-position: left; background-repeat: no-repeat;">Opret nyhedsbrev - ###THETMP###</h1> 

<form action="index.php?page=create" method="post" enctype="multipart/form-data"> 
    <label for="letter_headline">Overskrift:</label> <input type="text" name="letter_headline" id="letter_headline" value="" /><br /> 
    <label>Modtagere: </label> <select name="recievers[]" multiple="multiple" size="5">###RECS###</select><br /> 
    <label>Billede</label> <input type="file" name="letter_image[0]" id="letter_image" value="" /><br /> 
    <label for="letter_content">Indhold</label> <textarea name="letter_content" id="letter_content" cols="50" rows="15"></textarea><br /> 
    <label for="letter_link">Link</label> <input type="text" name="letter_link" id="letter_link" value="" /><br /> 
    <label for="letter_link_txt">Linktekst</label> <input type="text" name="letter_link_txt" id="letter_link_txt" value="" /><br /> 
    <input type="hidden" name="template_to_use" value="standard.html" /> 
    <input type="submit" value="Opret nyhedsbrev" name="create" /> 
</form> 

當我選擇,我想創建一個標準的通訊中,TemplateGenerator功能將輸出此模板即在標記### RECS ###一recievers列表。

我有有下列的表稱爲newsletter_fields:

field_uid | field_name | field_content

其中field_name將包含輸入字段的名稱,即letter_headline和field_content將在創建該字母時具有寫入輸入字段的內容,即「這是標題」。

我的問題是,如果我可以在editletter函數中使用同一個HTML文件,它將只替換輸入字段中的value="",即letter_headline輸入中的value="This is a headline"

回答

1

你正在從錯誤的一面。

如果你有你的價值總是充滿標記,你可以使用相同的模板來添加和編輯,爲後一種情況填充空字符串的標記。

但是,這樣的模板的整個想法是錯誤的。
模板引擎應該能夠實現基本的編程邏輯,如循環,條件和包含。
否則,模板根本沒有用處,並且最終會在代碼中顯示HTML(就像您已經在### RECS ###標記中一樣)。基於

PHP模板將是方式更方便,我建議這個

+0

感謝這個答案用它來代替STRAT!我會考慮這一點。我並不認爲它本身就是一個模板引擎,而只是一個將某些值放入HTML模板中某些標記的函數。這是我創建時的想法,它的工作原理如下:) 但我很欣賞批評!我在這裏學習:) – 2011-12-23 08:15:03

0

只需在value=""字段(例如value="###ANOTHERMARKER##")內放置更多標記並替換它們即可。

如果您想爲不同的目的替換不同的標記,只需用空字符串替換那些您不想要的值。