如何使用PHP包括在网站的所有页面中插入HTML存根

时间:2009-11-30 06:23:28

标签: php html include

我正在开发一个简单的网站。它将有近20页。它有一个3级层次结构。

Home
MenuStub
   Category1
      Page1
      Page2
   Category2
      Page1
      Page2
   ....
      ....
      ....

主导航将有4到5个项目代表每个“类别” 对于所有页面,这将是不变的。我甚至不打算 突出显示当前类别或任何内容。

以前我决定将菜单HTML stub单独放在一个单独的文件中 并使用PHP include将其包含在所有页面中。

但是,相对路径可能令人沮丧。假设菜单存根 文件位于根目录。

因此,在根级页面中,php include会像

一样读取
include "menustub.html";

在二级页面中,应该说

include "../menustub.html";

在第三级页面中,应该说

include "../../menustub.html";

首先,这是包含单个文件的最佳方式 在网站的所有页面上?

其次,如果网站变大,还有更多层次 添加,维持这将是一个问题。如果我突然 决定将一整套页面移动一个(或几个)级别 向上或向下,我应该手动去改变相对路径 在每个文件中。

我在这里遗漏了什么吗?是否有一种普遍的方式来指出 对于特定文件,每个页面都会理解,无论如何 它所在的位置?

拥有存根并将其包含在所有页面中的最佳方法是什么 没有这些维护噩梦?

2 个答案:

答案 0 :(得分:3)

解决此问题的常用方法是使用include_path:在您的配置中,添加带有此类文件的目录以包含路径,您只需执行

include "menustub.html";

来自任何地方。 见http://se2.php.net/manual/en/ini.core.php#ini.include-path 它可以从php.ini和代码中设置。不确定是否可以在.htaccess文件中设置

另一种方法是设置根目录变量并始终使用它:

include "{$rootDir}/menustub.html";

还可以选择使用自动追加/前置,这意味着你告诉php总是附加或前置文件,参见http://se2.php.net/manual/en/ini.core.php(auto_prepend_file)

$ rootDir可以从配置中设置,也可以使用$ _SERVER ['DOCUMENT_ROOT']自动设置。如果你将它用于共享文件(在几个web应用程序之间共享),前者是好的,后者是方便的,如果文件位于一个webapp目录结构下。

答案 1 :(得分:1)

让索引文件执行所有包含操作会更加动态,并使用GET参数告诉它要包含哪个页面。

例如,考虑这样的目录结构:

/
  index.php
  /ui
    header.html
    menu.html
    footer.html
    Cat1/
      Page1.html
      Page2.html
    Cat2/
      Page3.html
      Page4.html

如果您总是调用索引文件,包括您想要查看的类别和页面的名称,例如:index.php?category=Cat1&page=Page1,您可以执行以下操作:

<?php
// Include a header and a menu, defined in their own HTML files.
include('ui/header.html');
include('ui/menu.html');

// Set up a list of valid categories and their sub pages.
$pages = array(
    'Cat1' => array(
        'Page1',
        'Page2'
    ),
    'Cat2' => array(
        'Page3',
        'Page4'
    )
);

// Find the category and page to use.
if(isset($_GET['category'], $pages[$_GET['category']])) {
    $category = $_GET['category'];
} else {
    $category = 'Cat1';
}
if(isset($_GET['page'], $pages[$category][$_GET['page']])) {
    $page = $_GET['page'];
} else {
    $page = 'Page1';
}

// Include the selected content page.
include("ui/{$category}/{$page}.html");

// Include a footer
include('ui/footer.html');
?>

通过这种方式,您可以根据需要扩展内容,而无需在每个新文件中重复包含。