我通常在URL中使用GET变量来确定在我的模板中显示哪些数据。
今天我没有传递变量。我在每个页面都包含一个名为inludes / leftmenu.php的文件,但根据页面名称,我想显示不同的数据。
leftmenu.php看起来像这样:
$page = $_SERVER["REQUEST_URI"];
$page_name = get_page_name($_SERVER["REQUEST_URI"]);
if ($page_name == "classes.php")
{
<h2 class="left_h2">Class Schedules & Info</h2>
<ul class="left_ul">
<li>Immersion Programs</li>
<li>Afternoon Programs</li>
<li>Immersion Schedule</li>
<li>Afternoon Schedule</li>
</ul>
}else if($page_name == "about.php")
{
<h2 class="left_h2">About Us</h2>
<ul class="left_ul">
<li>About Us</li>
<li>Photo Scrapbook</li>
</ul>
}else if ($page_name == "news.php")
{
<h2 class="left_h2">News & Events</h2>
<ul class="left_ul">
<li>News</li>
<li>Events</li>
</ul>
}
答案 0 :(得分:2)
您可以使用PHP数组:
$pages = array(
'/events.php' => 'includes/events_menu.php',
'/news.php' => 'includes/news_menu.php'
);
// lookup the appropriate include file
$uri = $_SERVER['REQUEST_URI'];
$include = $pages[$uri];
// produce a default page if the URI wasn't recognised
if (!isset($include)) {
$include = 'includes/default.php';
}
include($include);
答案 1 :(得分:1)
我不知道它是否更快,但有很多方法可以做到这一点。
E.g。数组:
$page_name = get_page_name($_SERVER['REQUEST_URI']);
$includes = array(
'events.php' => 'includes/events_menu.php',
'news.php' => 'includes/news_menu.php'
);
if(isset($includes[$page_name])) include($includes[$page_name]);
else die('this page does not exist');
答案 2 :(得分:0)
PHP polulates $_GET,其中包含在URL中传递的变量。虽然我不建议使用用户传递的变量作为代码包含的函数。
数组是一种更好的方法,当然,您也可以查看realpath()并确保它位于DOCUMENT_ROOT / includes
答案 3 :(得分:0)
您可以使用路径创建数组,然后使用in_array
函数,这将减少if
语句。
答案 4 :(得分:0)
如果每个页面都有一个菜单,您可以使用
include('includes/'.basename($page_name, ".php").'_menu.php');
答案 5 :(得分:0)
您可以使用REQUEST_URI
,但必须记住它始终以/
斜杠开头。除非你申请basename()
,否则你必须写:
if ($page_name == "/events.php")
如果您只需要几个页面名称,if
语句是可行的方法。否则使用switch
或url-&gt;文件名映射(作为数组)。
如果您使用RewriteRule将所有传入的URL映射到单个PHP脚本,您还可以考虑使用PATH_INFO
而不是REQUEST_URI
。