Как использовать PHP include для вставки заглушки HTML на все страницы сайта - PullRequest
1 голос
/ 30 ноября 2009

Я занимаюсь разработкой простого сайта. Это будет иметь около 20 страниц. Имеет 3 уровня иерархии.

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

Основная навигация будет иметь 4 - 5 элементов, представляющих каждую «категорию» Это будет постоянным для всех страниц. Я даже не планирую выделите текущую категорию или что-нибудь еще.

Ранее я решил поместить заглушку меню HTML отдельно в отдельный файл и используйте PHP include, чтобы включить его во все страницы.

Но относительные пути могут быть расстраивающими. Предположим, что заглушка меню файл находится в корневом каталоге.

Так, на страницах корневого уровня, включение php будет выглядеть как

include "menustub.html";

на страницах второго уровня должно быть написано

include "../menustub.html";

и на страницах третьего уровня должно быть написано

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

Во-первых, это лучший способ включить один файл на всех страницах веб-сайта?

Во-вторых, если веб-сайт становится большим, и еще много уровней добавлены, поддерживая это будет проблемой. Если я вдруг решили переместить весь набор страниц на один (или несколько) уровней вверх или вниз, я должен вручную пойти и изменить относительные пути в каждом файле.

Я что-то здесь упускаю? Есть ли универсальный способ указать к конкретному файлу, что каждая страница будет понимать, независимо от где он находится?

Как лучше всего иметь заглушку и включать ее во все страницы? без этих кошмаров обслуживания?

Ответы [ 2 ]

3 голосов
/ 30 ноября 2009

Распространенными способами решения этой проблемы является использование include_path: в вашей конфигурации добавьте dir с такими файлами для включения пути, и вы можете просто сделать

include "menustub.html";

из любого места. Смотри http://se2.php.net/manual/en/ini.core.php#ini.include-path Это может быть установлено из php.ini и в коде. Не уверен, что это можно установить в файлах .htaccess

Другой способ - установить переменную корневого каталога и всегда использовать ее:

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

Существует также опция использования auto append / prepend, что означает, что вы говорите php всегда добавлять или добавлять файл, смотрите http://se2.php.net/manual/en/ini.core.php (auto_prepend_file)

$ rootDir может быть установлен из конфигурации или автоматически с использованием $ _SERVER ['DOCUMENT_ROOT']. Первый вариант удобен, если вы используете его для общих файлов (совместно используемых несколькими веб-приложениями), второй - для удобства, если файлы находятся в одной структуре каталогов веб-приложения.

1 голос
/ 30 ноября 2009

Было бы гораздо более динамично, чтобы индексный файл выполнял все операции включения и использовал параметры 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');
?>

Таким образом, вы можете расширять содержимое настолько глубоко, насколько хотите, без необходимости повторять ваши включения в каждый новый файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...