1

PHPを使用して、すべてのページに同じヘッダーとフッターを付け、内容が異なるだけにしたいと思います。これを行うための最良のアプローチは何ですか?

私はこれら 2 つの人気のあるものを知っていますが、どちらを選択すればよいか (または他のいくつかを選択するべきか) はわかりません。

1. すべてのページにヘッダーとフッターを含める

contact.phpabout.phpなどのすべてのページに、ページの上部にヘッダーを、下部にフッターを含める必要があります。コンテンツは、あまりにもの間に行きます。たとえば、contact.phpは次のようになります。

<?php include("header.php"); ?>
Lorem ipsum dolor sit amet...
<?php include("footer.php"); ?>

リクエストをしたいときは、タイプするだけですexample.com/contact.php

2. index.php?page=xyz

contact.phpabout.phpなどのページでは、実際のコンテンツのみを保存します。次に、含めるコンテンツを指定するパラメータ (ページなど) を含むindex.phpがあります。たとえば、contact.phpファイルは次のようになります。

Lorem ipsum dolor sit amet...

そして、次のようなindex.phpファイル (これは簡略化されたバージョンです):

<html>
    <head>
        <title>Lorem ipsum</title>
    </head>
    <body>
        <?php include(some_parser_function($_GET["page"].".php")); ?>
    </body>
</html>

リクエストを行うと、 index.phpindex.php?page=contactが表示され、開始タグと終了タグの間にcontact.phpのコンテンツが表示されます。body

最初のアプローチは、インクルード関数をすべてのページに書き込む必要があるため、少し実用的ではないように思えます。example.com/contact.php2 番目のアプローチでは、または単にのような素敵な URLexample.com/contactが必要な場合は、apache mod_rewriting を実行する必要があります...

これらの(および他の)アプローチのどれがより優れている/より人気があり、その理由は何ですか?

ありがとう。

4

3 に答える 3

2

可能であれば、動的インクルードは避けます。外部ソースからの変数、つまりあなたの場合はGETパラメーターをサニタイズしない限り、セキュリティホールが開きます。Model-View-Controller フレームワークのようなアプローチを取ることができます。基本的に、テンプレートからの出力をレイアウトに配置するコードがあります。

于 2012-07-24T17:19:02.427 に答える
1

オプション2は、テンプレート作成にはるかに適しています。Rewriteを使用して、URLの最後に?page=pagenameを付けずにこれを表示することもできます。また、サイトにあるページの数によっては、すべてのファイルに2つのインクルードを実行する必要があるのはちょっと面倒です。

ただし、私があなたである場合は、ob_start()ob_get_contents()およびob_flush()の使用を検討します。次に、htmlの出力を開始する前に、インクルードされたファイルのすべてのコードを実際に実行できます。

次に例を示します。

ob_start();
include("{$page_name}.php");
$page_contents = ob_get_contents();
ob_end_clean();

ob_start();
include("templates/standard.php");
$full_html = ob_get_contents();
ob_end_clean();

echo $full_html;

このようにして、いつでも使用できる複数のテンプレートを簡単に作成できます。テンプレートファイルは次のようになります。

<html>
    <head>
        <title>Lorem ipsum</title>
    </head>
    <body>
        <?php echo $page_contents; ?>
    </body>
</html>
于 2012-07-24T17:16:54.037 に答える
0

一般に、2 のアプローチの大きな利点は検証/挿入です。最初のアプローチを取る場合は、すべての検証/挿入を何度も行う必要があります。何かを変更/追加/削除する必要がある場合は、すべてのページを変更する必要があります。それはかなり迷惑です。私は通常、2 番目のアプローチを好みます。なぜなら、すべてを一元化して、同じ指示を何度も繰り返さないようにすることができるからです。

しかし、それはあなたのウェブサイトにも大きく依存します.

例を挙げましょう。私はかつて、2 つの主要部門を持つサイトを作成しました。

この場合、2 番目のアプローチの 2 つの異なるページを作成しました。

(検証について話しているときは、すべての SESSION 変数の検証、ユーザーがログに記録されているか、ユーザーが ADM であるかなどの検証などを意味します)

于 2012-07-24T17:16:27.987 に答える