В сущности, я пишу систему шаблонов для своей CMS, и я хочу иметь модульную структуру, которая включает в себя людей, вставляющих такие теги, как:
<module name="news" />
или <include name="anotherTemplateFile" />
, которые я затем хочу найти в своем php и заменить на динамический html.
Кто-то здесь указал мне на DOMDocument, но я уже столкнулся с проблемой.
Я пытаюсь найти все <include />
теги в моем шаблоне и заменить их на простой HTML. Вот мой код шаблона:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>CMS</title>
<include name="head" />
</head>
<body>
<include name="header" />
<include name="content" />
<include name="footer" />
</body>
</html>
А вот и мой PHP:
$template = new DOMDocument();
$template->load("template/template.tpl");
foreach( $template->getElementsByTagName("include") as $include ) {
$element = '<input type="text" value="'.print_r($include, true).'" />';
$output = $template->createTextNode($element);
$template->replaceChild($output, $include);
}
echo $template->saveHTML();
Теперь я получаю фатальную ошибку Uncaught exception 'DOMException' with message 'Not Found Error'
.
Я искал это, и похоже, что мои теги <include />
не обязательно являются ПРЯМЫМИ дочерними элементами $template
, они не заменяют их.
Как я могу заменить их независимо от спуска?
Спасибо
Tom
EDIT
В основном у меня была своего рода мозговая волна. Если я делаю что-то подобное для своего PHP, я вижу, что он пытается сделать то, что я хочу:
$template = new DOMDocument();
$template->load("template/template.tpl");
foreach( $template->getElementsByTagName("include") as $include ) {
$element = '<input type="text" value="'.print_r($include, true).'" />';
$output = $template->createTextNode($element);
// this line is different:
$include->parentNode->replaceChild($output, $include);
}
echo $template->saveHTML();
Тем не менее, кажется, что только 1 изменится в <body>
моего HTML ... когда у меня 3.: /