Я работаю над движком шаблонов, но мне нужна помощь.Это для кастомной CMF / CMS в oop.
На данный момент я собираю информацию из каждого документа (он работает на 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
Мой код работает, но только для первого уровня, я имею в виду, что он не будет сканироватьСистемные фрагменты в фрагментах, но они будут сканировать фрагменты внутри системных фрагментов.Таким образом, код сканируется в порядке системных фрагментов -> пользовательских фрагментов -> фрагментов.
Любые идеи о том, как заставить мой код сканировать несколько уровней, или я считаю, что он называется рекурсивным, но только до 4уровни, чтобы пользователи не перегружали его фрагментами, внутри фрагментов, внутри фрагментов и т. д.
Также вы можете видеть, что я «мог» повторно сканировать фрагменты, но это не то, чего я хочу достичьМне кажется плохое программирование повторять код, чтобы это исправить.