2

ページを動的に含めるための次のコードがあります。

<div id="content">
    <div id="aside">
        ...
    </div>

    <div id="main">
        <?php
        $page = (isset($_GET['page'])) ? sanitize($_GET['page']) : 'home';
        if (!include 'pages/'.$page.'.php') require 'pages/404.php';
        ?>
    </div>
</div>

ご覧のとおり、に#asideは静的コンテンツがあります。選択したページに応じて
、特定のコンテンツを含めたい。#asideたとえば、ユーザーが「ホーム」と「バージョン情報」に移動した場合、「デフォルト」は脇に置きます。しかし、ユーザーが「ドキュメント」に移動した場合は、「セクション」を脇に置きます。
すべてのページを除いてそれぞれを含めることができることは知っていますが、それは効果的ではありません。また、ユーザーがメインコンテンツとして取っておくことを嫌がるので、別のフォルダーなどに配置する必要があります。
これを行うための効果的でそれほど複雑ではない方法を知りたいです。

これをお読みいただきありがとうございます。

4

4 に答える 4

2

どのサイドバーがデータベースのどのページに表示されるかを保持してから、そのデータベースにクエリを実行して、含める正しいサイドバーを探します。

テーブル構造は次のようになります。

  • テーブルサイドバー:ID | パス| 名前| サイドバーの詳細...
  • テーブルページ:ID | パス| 名前| ページの詳細...
  • のサイドバーからページへ:page_ID | sidebar_ID

このアプローチでは、特定のページに複数のサイドバーを配置することもできます。

于 2013-01-06T21:27:01.787 に答える
1

これをした場合はどうなりますか?

<?php
ob_start();
$page = (isset($_GET['page'])) ? sanitize($_GET['page']) : 'home';
if (!include 'pages/'.$page.'.php') require 'pages/404.php';
$contents = ob_get_clean();
?>
<div id="content">
    <div id="aside">
        <?php include($aside); ?>
    </div>

    <div id="main">
        <?php echo $contents; ?>        
    </div>
</div>

$page.phpは次のようになります。

<?php $aside = "sidebars/default.php"; ?>
<p>HTML for #main<br />
goes here</p>
于 2013-01-09T02:36:55.440 に答える
1

これを行うには、ほぼ同じであるいくつかの異なる方法があります。私はほとんどの場合、サイトにconfig.phpファイルを使用して、すべてのページに必要なグローバル情報を保持します。すべてのページの上部で、電話するだけです

<?php 

    require_once('config.php');

?>

そのconfig.phpファイルには、ページ名と各ページに含めるファイルをリストする配列と、次のようにコンテンツを返す関数を含めることができます。

// this lets you call includes relative to the site root
set_include_path($_SERVER['DOCUMENT_ROOT']);

$defaultAsideContent = 'includes/default.php';

$asideContent = array(
    'index.php' => 'includes/include-1.php',
    'document.php' => 'includes/include-2.php'
);

function getAsideContent() {

    global $asideContent;
    global $defaultAsideContent;

    $content = $defaultAsideContent;

    // get the requested page
    $pageFull = $_SERVER['REQUEST_URI'];
    // strip URL variables
    $pageParts = explode('?', $pageFull);
    $page = $pageParts[0];

    // loop throught the array and see if there is specific aside content for the page
    foreach($asideContent as $key=>$value) {
        if ($page == $key) {
           $content = $asideContent[$key]);
        }
    }

    include($content);
}

最後に、脇のコンテンツを表示したい場所はどこでも、

<?php getAsideContent(); ?>

新しいページを作成するときに、特定のコンテンツを脇に置きたい場合は、構成ファイルを編集するだけです。参考までに、これはまったくテストしていません。おそらくバグがありますが、問題はありません。

于 2013-01-09T21:53:14.800 に答える
0

皆様のご回答、ご協力ありがとうございました。答えのどれも私が探していたものを正確に実行しませんでしたが、それらは私にこの問題に取り組む他の方法を示し、どの方法を使用するかを決めるように私を導きました。
私はこれを行うための最も簡単な方法だと思うものを思いついた:

  1. フォルダ構造をpages/asideおよびpages/mainとして設定しました
  2. キーとしてasideファイル、値としてメインコンテンツファイルを使用して配列($ asides)を設定しました。
  3. 次に、要求されたファイルがメインフォルダーに存在するかどうかを確認します。
  4. 存在しない場合は、ユーザーを404ページにリダイレクトします。存在する場合は、 $ asidesをループして、そのメインコンテンツページに割り当てられている脇白を確認ます。
  5. それが確立された傍白のいずれにも属していない場合は、デフォルトをに含めます。
$asides = array(
        'aside1' => array('page1', 'page2', 'page3', 'page4'),
        'aside2' => array('page5', 'page6')
    );

$page = (!empty($_GET['p'])) ? sanitize($_GET['p']) : 'page1';

if (file_exists("pages/main/{$page}.php")) {

    foreach ($asides as $key => $value) {
        if (in_array($page, $asides[$key])) {
            $aside = $key;
            break;
        }
    }
    if (!isset($aside)) $aside = 'default';

?>
    <div id="aside"><?php require "pages/aside/{$aside}.php"; ?></div>
    <div id="main"><?php require "pages/main/{$page}.php"; ?></div>
<?php

} else {
    header('Location: ?p=404');
}


私の意見では、彼の答えは単純で効果的であるため、賞金はうちはマダラ に行きます。この問題を手伝ってくれた皆さんに改めて感謝します。

于 2013-01-10T15:23:26.550 に答える