0

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();

しかし、これは2つのヘッダーを生成するので、誰かが私が間違っていることを説明できますか? 基本的にPHP DOMでmetaタグの属性を変更しようとしているのですが、ヘッダーを複製しないと保存できません。

4

1 に答える 1

0

これは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();
于 2014-03-02T21:48:41.033 に答える