Вопрос по php, html, include – Как использовать PHP include для вставки заглушки HTML на все страницы сайта

1

Я занимаюсь разработкой простого сайта. Это будет иметь около 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

ие 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']. Первый вариант хорош, если вы используете его для общих файлов (совместно используемых несколькими веб-приложениями), второй для удобства, если файлы расположены в одной структуре каталогов веб-приложения.

Атли. Я могу использовать DOCUMENT_ROOT, но как насчет разницы между режимом отладки и развертыванием? На рабочем сервере файл может находиться непосредственно под DOCUMENT_ROOT, но во время отладки, в XAMPP, который я использую, у меня будет отдельная папка для моего сайта. так что это будет DOCUMENT_ROOT + какая-то папка + имя файла. Я должен помнить, чтобы удалить эту дополнительную папку каждый раз, когда я развертываю. anon355079
Здравствуй. Спасибо за редактирование, ссылка на php include path. Я пойду через это :) anon355079
atli: хороший комментарий, я добавил его в ответ senthil: добавил ссылку на документ Brimstedt
Вы также можете использовать$_SERVER['DOCUMENT_ROOT'] элемент, чтобы найти корневой каталог вашего HTTP-сервера, который вы можете использовать вместо{$rootDir} в вашем втором примере. Например.include($_SERVER['DOCUMENT_ROOT'] . '/menustub.html');. Atli
Привет, Бримштедт! Я хочу узнать больше о include_path. Похоже, решение, которое я ищу. Это глобальная вещь, которую будет знать весь php-код (на моем сайте) (независимо от того, где находится код). Как я определяю include_path и помещаю туда файл test.html, и я могу просто использовать include «test.html» независимо от того, в какой файл я включаю Я правильно понял? anon355079
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');
?>

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

привет .. спасибо за подтверждение того, что это рекомендуемый / стандартный подход. Также спасибо за модуль mod_rewrite. Будет смотреть на это тоже. anon355079
Привет, Атли. На одном из моих других сайтов я придерживаюсь упрощенной версии вашего подхода. Тем не менее, я не учел это для моего текущего сайта, потому что чувствовал, что что-то не так. Может быть, я ошибаюсь так думать. Это лучшая практика? Мол, всегда показывать только индексную страницу, но включать заглушки HTML в зависимости от параметров? Если это так, URL будет выглядеть немного странно, не так ли? Вместо красивого URL, например,example.com/games/fps/quake3, это будет выглядетьexample.com?cat=games&subcat=fps&page=quake3, Как я могу использовать ваш подход, НО показать красивый URL, как первый? anon355079
Когда вы начинаете работать над более динамичными вещами - используя более сложные методы проектирования - это становится стандартным методом, да. Я рекомендую вам попытаться привыкнуть к этому раньше, чем позже. - Что касается вопроса URL. Посмотрите на переписывание URL. Если вы используете Apache, вы можете сделать это с помощьюmod_rewrite модуль.(Видетьhttp://httpd.apache.org/docs/2.0/misc/rewriteguide.html) Atli

Похожие вопросы