我正在研究模板引擎,但需要一些帮助。它适用于oop中的自定义CMF / CMS。
目前正在抓取每个文档中的信息(它由mysql提供支持,但我正在缓存文档),然后用我的fte类处理它们:
<?php
/* FTE Class */
class fte {
public $id;
public $output;
public function __construct($id, $data) {
$this->id = $id;
$this->output = $data;
}
public function process() {
ob_start();
include(CORE_PATH . 'assets/cache/documents/cache.' . $this->id . '.php');
/* Settings */
if(isset($cache['settings'])) {
foreach($cache['settings'] as $key => $value) {
$scan = "[@$key]";
$replace = $value;
$this->output = str_replace($scan, $replace, $this->output);
}
}
/* System Snippet */
if(isset($cache['system'])) {
foreach($cache['system'] as $key => $value) {
$scan = "[@$value]";
$replace = $cache['document'][$value];
$this->output = str_replace($scan, $replace, $this->output);
}
}
/* Custom Snippet */
if(isset($cache['custom'])) {
foreach($cache['custom'] as $key => $value) {
$scan = "{{@$key})";
$replace = $value;
$this->output = str_replace($scan, $replace, $this->output);
}
}
/* Snippet */
if(isset($cache['snippet'])) {
foreach($cache['snippet'] as $key => $value) {
$scan = "{@$key}";
$replace = $value;
$this->output = str_replace($scan, $replace, $this->output);
}
}
/* Return */
return $this->output;
ob_end_flush();
}
}
?>
如您所见,有3种类型的标签,
[@] - System Snippets
{{@}} - Custom Snippets
{@} - Snippets
我的代码可以工作,但只适用于第一级,我的意思是它不会扫描片段中的系统片段,但它会扫描系统片段内的片段。 所以代码是按照系统片段的顺序扫描 - &gt;自定义代码段 - &gt;片段。
关于我如何使我的代码扫描多个级别的任何想法,或者我认为它被称为递归,但最多只说4个级别,因此用户不会使用片段,片段内部,片段内部等等来重载它?
另外你可以看到我“可以”重新扫描片段,但这不是我想要实现的,感觉就像糟糕的编程让我重复代码来解决这个问题。