saveHTML() не работает должным образом
У меня есть эта строка кода в моем index.php:
<?php include ("header.php"); ?>
</body>
</html>
Мой header.php:
<!DOCTYPE html>
<html lang="en">
<head>
<?php include("php/dynamic_header.php"); ?>
<meta charset="utf-8">
<meta name="description" content="Write a description" />
<meta name="keywords" content="Your keywords here" />
<title>Random Title</title>
</head>
<body>
<header>This is my header</header>
И мой dynamic_header.php:
$dom = new domDocument;
@$dom->loadHTMLFile("header.php");
$meta = $dom->getElementsByTagName('meta')->item(1);
$meta->setAttribute('content','new description');
$dom->saveHTML();
Тем не менее, когда я использую saveHTML(), ничего не происходит. Я пытался с помощью:
echo $dom->saveHTML();
Но это приводит к двум заголовкам, так может кто-нибудь объяснить мне, что я делаю не так? По сути, я пытаюсь изменить атрибут в своем метатеге с помощью PHP DOM, но не могу сохранить его, не дублируя заголовок.
1 ответ
Это должно работать так же хорошо с saveHTMLFile()
вот почему я полагал, что что-то не так с вашими правами доступа к файлам или не позволяет вам сохранять данные обратно. В любом случае, я думаю, что вы делаете это неправильно, вы должны использовать библиотеку шаблонов вместо изменения данных с помощью DOMDocument.
Например, с помощью Smarty вы можете создать шаблон заголовка следующим образом:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="{$description|default:"Write a description"}" />
<meta name="keywords" content="Your keywords here" />
<title>{$title|default:"Default Page Title"}</title>
</head>
<body>
Вот соответствующий тестовый код, чтобы показать, что он не будет создавать дубликаты с DOMDocument:
<?php
$str = <<<DATA
<!DOCTYPE html>
<html lang="en">
<head>
<?php include("php/dynamic_header.php"); ?>
<meta charset="utf-8">
<meta name="description" content="Write a description" />
<meta name="keywords" content="Your keywords here" />
<title>Random Title</title>
</head>
<body>
<header>This is my header</header>
DATA;
$dom = new domDocument;
@$dom->loadHTML($str);
$dom->formatOutput = true;
$dom->preserveWhitespace = false;
$meta = $dom->getElementsByTagName('meta')->item(1);
$meta->setAttribute('content','new description');
echo $dom->saveHTML();