2011-12-21 59 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##")内放置更多标记并替换它们即可。

如果您想为不同的目的替换不同的标记,只需用空字符串替换那些您不想要的值。