使用url作为变量

时间:2011-02-27 22:39:22

标签: php

我通常在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 &amp; 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 &amp; Events</h2>
<ul class="left_ul">
    <li>News</li>
    <li>Events</li>
</ul>

  }

6 个答案:

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