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();
Другие вопросы по тегам