1

私の現在のプロジェクトは、index.php を介してすべてをルーティングします。次に、それが何であるか$_SERVER['REQUEST_URI']を確認し、ホワイトリストと照合して、ロジックを実行して関連する html テンプレートを含めます。このような:

<?php

include("header.html");

$requested_page = $_SERVER['REQUEST_URI'];

if ($requested_page in $whitelist){
    $page_title = $requested_page;
    include ($requested_page . "_controller.php");
    include ($requested_page . "_template.html");
}

include ("footer.html")

?>

$page_title私の問題は、このようにヘッダーテンプレートで使用したいということです...

<title><?php echo $page_title?></title>

ただし、ヘッダーが含まれている場合は $page_title が設定されていないため、明らかに機能しません。誰でもこれを回避する方法を提案できますか? 「出力バッファリング」が役立つでしょうか?もしそうなら、どのように?このように php を使用してページを生成する方法に重大な問題がある場合は、その旨をお知らせください。ありがとう

編集: 追加する必要があります。条件付きロジックは、実際のプロジェクトではかなり複雑であり、ここでは大幅に簡略化しました。ヘッダーとフッターのインクルードを繰り返し続ける必要がないため、含まれていません。可能であれば、それらをすべてのロジックから遠ざけたいと思います。

4

5 に答える 5

3

これを実現するためにコードを並べ替えることができます。

<?php 
$requested_page = $_SERVER['REQUEST_URI'];

if ($requested_page in $whitelist){
    $page_title = $requested_page;
    include("header.html");
    include ($requested_page . "_controller.php");
    include ($requested_page . "_template.html");
}else{
    //Make sure we include header if page not in white list
    include("header.html");
}

include ("footer.html")
?>

編集:実際に考えてみると、おそらくロジックとインクルードを切り離すことができます:

<?php 
$requested_page = $_SERVER['REQUEST_URI'];
$includes = array();
$includes[] = 'header.html';
if ($requested_page in $whitelist){
    $page_title = $requested_page;
    $includes[] = $requested_page . "_controller.php";
    $includes[] = $requested_page . "_template.html";
}

$includes[] = "footer.html";
foreach($includes as $include){
    include($include);
}
?>
于 2013-01-31T22:29:36.720 に答える
1

ビューをロードするロード MVC ライブラリ用にこれを書きましたが、これは便利になると思います。

$target = "myfile.php";

$data = array(
  'page_title' => 'page title'
);

ob_start();
if(count($data) > 0) extract($data);
include_once($target);
$content = ob_get_clean();

echo $content;

また$data、関数を使用してキーを変数として使用できextract()ます。

于 2013-01-31T22:38:13.163 に答える
0

どうですか..?

<?php 
$page_title = $requested_page = $_SERVER['REQUEST_URI'];
if (!in_array($requested_page, $whitelist)) {
    header('Location: http://example.com/your404');
    exit(0);
}

include 'header.html';
include "$requested_page_controller.php";
include "$requested_page_template.html";
include 'footer.html';
于 2013-02-01T01:19:10.583 に答える
0

簡単

<?php 
$requested_page = $_SERVER['REQUEST_URI'];

$page_title = "";

if ($requested_page in $whitelist) $page_title = $requested_page;

include("header.html");

if(!empty($page_title)) {
    include ($requested_page . "_controller.php");
    include ($requested_page . "_template.html");
}

include ("footer.html")
?>
于 2013-01-31T22:43:16.567 に答える
-1

または、ページ タイトルを使用して、index.phpページにリダイレクトしてみてください。$_POST$_GET

これらが設定されている場合、ページの最初から読むことができます。

<?php

if (isset($_GET['pagetitle'])){
  echo "<html><head><title>".$_GET['pagetitle']."</title></head>";
}

include("header.html");

$requested_page = $_SERVER['REQUEST_URI'];

if ($requested_page in $whitelist){
    $page_title = $requested_page;
    include ($requested_page . "_controller.php");
    include ($requested_page . "_template.html");
    header( 'Location: http://www.yoursite.com/index.php?pagetitle='.
           urlencode('This is the page title'),'"' ) 
}

include ("footer.html")

?>
于 2013-01-31T22:23:39.093 に答える