我在一个MySQL数据库中存储HTML布局。这些布局可以在HTML,如下所示内包含标签..PHP标记替换方法
{site.poll="fred,joe,john"}
和
{site.layout.header}
目前我通过执行多个preg_matches识别标签搜索HTML模板,通过数组循环然后执行一个str_replace()函数,具有另一个部分的HTML模板替换还拉从分贝背面..下面的实施例..
if (preg_match_all('/{site\.layout\.(.)*}/', $data, $match) != FALSE)
{
foreach($match[0] as $value)
{
$value = trim($value, '{}');
$tmp_store = explode('.', $value);
$tmp_partial = $this->parse($this->get_layout(end($tmp_store)));
$data = str_replace('{'. $value .'}', $tmp_partial, $data);
}
}
我需要执行一个正则表达式为电子ach标签我需要,然后对该标签的每个实例执行str_replace ..同样需要为每个需要的部分模板做.. 对我来说,这是所有似乎变得沉重..
是否有一个更好的方式来做到这一点?
在此先感谢..
编辑:我不希望使用现有的库,我想这样做的任务和自己在这个过程中学习..
是您使用preg_match_all收集模板中所有标签的唯一原因?通常你的代码会有一个需要进入模板的标签列表。将数组的数组/对象推入模板不是更有效吗?然后str_replace你有什么。如果你担心遗留标签,那么最后再扫一扫以清空它们。 – Bradmage 2012-03-11 16:45:31
mmm ..只要看看你的$ tmp_partial行。看起来你的框架倒退了。您是否通过模板中的标签加载所需的HTML /数据片段?我首先收集所有的数据,然后遍历数组str_replace-ing每个标记,因为逻辑是用模板构建的,不应该有任何杂散标记(我使用基本的IE:array('head'=>' ','body'=>''),所以从一开始就覆盖了一切。 – Bradmage 2012-03-11 16:49:22
非常多,我打算将HTML一起带出数据库,然后通过替换所有标记实例来循环。 – Lee 2012-03-12 08:40:07