我有一个数据数组
$data = array(title=>'some title', date=>1350498600, story=>'Some story');
我有一个模板
$template = "#title#, <br>#date(d)#<br> #date(m)#<br>#date(Y)#<br> #story#";
我想要的只是将数据放入模板中,我知道可以通过str_replace完成,但我的问题是日期格式。日期格式来自模板而不是来自数据,在数据日期中存储为php日期。 昨天我试着提出同样的问题,但我认为我的问题不明确。 有人请帮助我。
答案 0 :(得分:1)
我认为它无法轻松使用str_replace所以我将使用preg_replace
$data = array('title'=>'some title', 'date'=>1350498600, 'story'=>'Some story');
$template = "#title#, <br>#date(d)#<br> #date(m)#<br>#date(Y)#<br> #story#";
$result = preg_replace_callback('/#(\w+)(?:\\((.*?)\\))?#/', function ($match) use($data) {
$value = isset($data[$match[1]]) ? $data[$match[1]] : null;
if (!$value) {
// undefined variable in template throw exception or something ...
}
if (! empty($match[2]) && $match[1] == "date") {
$value = date($match[2], $value);
}
return $value;
}, $template);
您可以使用此代码段执行date(m)
之类的操作,而不是使用date(Y)
或
date(d-m-Y)
这样做的缺点是您可以使用此机制仅格式化date
变量。但是通过一些调整,您可以扩展此功能。
注意:如果您使用的是低于5.3的PHP版本,则无法使用闭包,但您可以执行以下操作:
function replace_callback_variables($match) {
global $data; // this is ugly
// same code as above:
$value = isset($data[$match[1]]) ? $data[$match[1]] : null;
if (!$value) {
// undefined variable in template throw exception or something ...
}
if (! empty($match[2]) && $match[1] == "date") {
$value = date($match[2], $value);
}
return $value;
}
$data = array('title'=>'some title', 'date'=>1350498600, 'story'=>'Some story');
$template = "#title#, <br>#date(d)#<br> #date(m)#<br>#date(Y)#<br> #story#";
// pass the function name as string to preg_replace_callback
$result = preg_replace_callback('/#(\w+)(?:\\((.*?)\\))?#/', 'replace_callback_variables', $template);
您可以在PHP here
中找到有关回调的更多信息答案 1 :(得分:0)
我建议使用这样的模板引擎: https://github.com/cybershade/CSCMS/blob/master/core/classes/class.template.php
然后你的模板就像这样: https://github.com/cybershade/CSCMS/blob/master/themes/cybershade/site_header.tpl 和 https://github.com/cybershade/CSCMS/blob/master/modules/forum/views/viewIndex/default.tpl
答案 2 :(得分:0)
下载此文件:http://www.imleeds.com/template.class.txt
将扩展名重命名为.PHP,来自.TXT
这是我多年前创建的,我总是将我的HTML与PHP保持一致。所以请看下面的例子。
<?php
include("template.class.php");
//Initialise the template class.
$tmpl = new template;
$name = "Richard";
$person = array("Name" => "Richard", "Domain" => "imleeds.com");
/*
On index.html, you can now use: %var.name|Default if not found% and also, extend further, %var.person.Name|Default%
*/
//Output the HTML.
echo $tmpl->run(file_get_contents("html/index.html"));
?>