Я строю свою собственную систему CMS и хочу динамически создавать новые страницы из шаблона. Как в WordPress, когда вы добавляете новую страницу.
Это шаблон:
<?php require_once('backend-nav.php');?>
<div id="main">
<div id="main-content" class="xlarge">
<article id="article-wrapper">
// My content needs to go here!
</article>
<?php require_once('backend-sidebar.php')?>
</div>
</div><!-- End main content container -->
<?php require_once('backend-footer.php')?>
<?php } else {
echo '<div class="container">You have to be logged in to view this page:.
'<ahref="login.php">Login</a>'.'</div>';
}
?>
Я создал форму для отправки содержимого, которое я хочу, на страницу, а затем с помощью следующего кода откройте php-файл templatet и сохраните его как новый файл на сервере с содержимым страницы.
$doc = new DOMDocument();
$doc->loadHTMLFile("new_page.php");
$article = $doc->getElementById('article-wrapper');
$p = $doc->createElement('p');
$addP = $article->appendChild($p);
$content = $doc->createTextNode($page_content);
$addP->appendChild($content);
// the url for the page is also submitted to the form and later added to the menu, which works.
$doc->saveHTMLFile($page_url.'.php');
Так как нет функции loadPHP, я бы хотел воспользоваться этой. Это также сработало для меня при добавлении ссылки в мое главное меню, которое также является файлом PHP.
Теперь контент добавляется в файл и сохраняется соответствующим образом, но по какой-то причине он испортит код в некоторых местах, подобных этому, некоторые знаки заменяются, как? и> и т.д .:
require_once('backend-header.php');
?>
<?php if (isset($_COOKIE['username'])) { ?>
<?php require_once('backend-nav.php');?>
<html>
<body>
<div id="main">
<div id="main-content" class="xlarge">
<article id="article-wrapper">
<p>test content added in p tags</p></article>
<?php require_once('backend-sidebar.php')?> </div><!-- End main content container -->
</div>
<?php require_once('backend-footer.php')?><?php } else {
echo '<div class="container">You have to be logged in to view this page: ' .
'<a href="login.php">Login</a>'.'';
}?></body></html>
конечный тег PHP перед заменой конечного тега html
Я также попробовал fread / write, чтобы изменить файл, но я, вероятно, неправильно использую вещи.
Есть ли способ добавить код в php-файл с помощью php или другой способ получить то, что я пытаюсь сделать?
Спасибо!
DOMDocument используется только для чтения XML и HTML, они имеют структуру. Когда вы вставляете PHP-код в HTML-файл, он больше не является HTML-кодом. Давайте посмотрим на пример ниже.
HTML-код:
<a>text</a>
Есть узел с именем «а», имеющий контент. DOMDocument может это хорошо понять.
Но
<a><?php if (false) : ?>true</a><? else: ?>false</a><?php endif ?>
DOMDocument не может понять php, и он будет читать первым < / а> как ближе < а>. Что касается второго, читатель может попытаться прочитать, исправив его, или просто проигнорировать его или добавить что-то, чтобы сделать его структурированным. Таким образом, вы не можете использовать DOMDocument в этом случае. Вы можете попробовать использовать file_get_contents и заменить содержимое, а затем использовать file_put_contents, чтобы записать его обратно.
Других решений пока нет …