有没有更简洁的方法来写这个避免包括

时间:2011-12-29 22:16:18

标签: php mysql html dynamic

我正在用php编写一个项目,它基本上会给我一个网页,其中包含以下内容的链接:

  • 包含我最喜欢的存储在mysql db中的YouTube视频的页面
  • 包含我最喜欢的所有游戏的页面
  • 和音乐等

所有内容都将直接嵌入网页内,而不是链接到网站。

为了简化这个,我创建了一个主模板“index.php”,然后使用$_GET我将页面和其他信息传递给模板,然后由一个页面检查脚本处理,该脚本执行一些ifs确定加载到网站的PHP脚本。

我的问题在于,当前的方法是将目前的方法加载到网站上的首选方法

if ($_GET["page"] == "videos"){
    include ("dynapage/scripts/videos/videos.php");
}

if ($_GET["page"] == "music"){
    include ("dynapage/scripts/music/music.php");
}
等等

使用包含将此代码添加到我的模板中是一件好事,还是有更好的方法可以建议?

注意:支票中已包含isset的支票,并可根据要求提供附加费用。

3 个答案:

答案 0 :(得分:6)

使用一个数组,其中$_GET["page"]值为键,php文件名为值。然后,您只需要检查它是否在数组内,如果是,请包含它。然后,您将值写入数组,而不是编写许多if子句。

下面的代码示例显示了这一点,另外它还有一个加载页面的功能,因为所包含的脚本不会在它被偶然包含的上下文中设置变量。

$pages = array(
    'videos' => 'videos/videos.php',
    'music' => 'music/music.php',
);

/**
 * include a page template
 */
function load_page(array $pages, $page, $path = 'dynapage/scripts')
{
    if (isset($pages[$page])) return;
    include ($path.'/'.$pages[$page]);
}

if (isset($_GET['page']))
{
    load_page($pages, $_GET['page']);
}

答案 1 :(得分:2)

也许是这样的事情:

$config = array(
    'videos' => 'dynapage/scripts/videos/videos.php',
    'music' => 'dynapage/scripts/music/music.php'
);

if(isset($config[$_GET['page']])) {
     include($config[$_GET['page']]);
}

稍微好一些,然后编写许多if子句(;

答案 2 :(得分:0)

看起来你可以这样做:

if( file_exists($fn = "dynapage/scripts/".$_GET['page']."/".$_GET['page'].".php"))
    include($fn);