动态页面:包含特定内容的特定内容

时间:2013-01-06 21:23:04

标签: php

我有以下代码动态包含页面:

<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 个答案:

答案 0 :(得分:2)

您希望将哪个边栏保留在数据库中的哪个页面上,然后在该数据库中查询要包含的正确边栏。

表结构可能如下所示:

  • 侧边栏:ID |路径|名字|有关侧栏的更多信息......
  • 页面:ID |路径|名字|更多关于页面的信息......
  • 侧边栏到页面:page_ID | sidebar_ID

此方法甚至允许您在特定页面上放置多个侧边栏。

答案 1 :(得分: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>

答案 2 :(得分: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(); ?>

创建新页面时,如果您想要特定的内容,只需编辑您的配置文件即可。只是仅供参考,根本不测试这个,可能有错误,但是你得到了这个小说。

答案 3 :(得分:0)

谢谢大家的回答和合作。虽然没有一个答案完全符合我的要求,但他们向我展示了解决这个问题的其他方法,并指导我决定使用什么方法。
我想出了我认为最简单的方法:

  1. 我将文件夹结构设置为: pages / aside pages / main
  2. 我设置了一个数组($ asides),其中支持文件作为主要内容文件作为
  3. 然后我检查所请求的文件是否存在于文件夹中。
  4. 如果不存在,我会将用户重定向到404页面。 如果确实存在,我会遍历 $ asides ,看看哪个支持内容页面一致。
  5. 如果它不属于任何已建立的 asides ,那么我将默认放在一边。
  6. $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');
    }
    


    赏金归于 Madara Uchiha ,因为在我看来,他的回答很简单有效。再次感谢所有帮助我解决此问题的人。