我有关于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"
。
感谢这个答案用它来代替STRAT!我会考虑这一点。我并不认为它本身就是一个模板引擎,而只是一个将某些值放入HTML模板中某些标记的函数。这是我创建时的想法,它的工作原理如下:) 但我很欣赏批评!我在这里学习:) – 2011-12-23 08:15:03