我有以下代码动态包含页面:
<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
添加特定内容。例如,如果用户转到“主页”和“关于”,我希望将“默认”放在一边。但是,如果用户转到“文档”,我想要一个“部分”
我知道我可以在每个页面中包含每个页面,但这并不有效。我也不希望用户能够把它放在一边作为主要内容,所以他们必须在不同的文件夹或其他东西。
我想知道一种有效且不那么复杂的方法。
感谢您花时间阅读本文。
答案 0 :(得分:2)
您希望将哪个边栏保留在数据库中的哪个页面上,然后在该数据库中查询要包含的正确边栏。
表结构可能如下所示:
此方法甚至允许您在特定页面上放置多个侧边栏。
答案 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)
谢谢大家的回答和合作。虽然没有一个答案完全符合我的要求,但他们向我展示了解决这个问题的其他方法,并指导我决定使用什么方法。
我想出了我认为最简单的方法:
$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 ,因为在我看来,他的回答很简单有效。再次感谢所有帮助我解决此问题的人。