Создание сайта без рамок - PullRequest
1 голос
/ 13 марта 2010

Я хочу сделать мою домашнюю страницу без фреймов, если я просто разделю свой дизайн на index.php, чтобы он был header.php / footer.php, а затем просто включил их на каждой странице?

Ответы [ 5 ]

5 голосов
/ 13 марта 2010

Да, вы можете разделить ваш index.php на header.php / footer.php, а затем просто включить их на каждой странице. Обратите внимание, что ваши страницы могут быть не статическими HTML, а php-скриптами, чтобы показывать несколько страниц одним скриптом.
Я бы также посоветовал не иметь такой банальной структуры, как

include 'header.php';
//do some stuff
include 'footer.php';

но другая структура, гораздо более полезная:

//do some stuff, retrieve all data.
include 'header.php';
include 'page.php'; //include page template
include 'footer.php';
2 голосов
/ 13 марта 2010

Я предлагаю вам использовать фреймворк. Большинство фреймворков (если не все) имеют простые системы шаблонов, поэтому вам не нужно повторять код.

1 голос
/ 13 марта 2010

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

Лучшая идея - вообще не иметь соединения между скриптом и страницей. Таким образом, вы не пишете php-файл на страницу, которую хотите показать. Вместо этого используйте один файл фронт-контроллера, большинство используют index.php в корне сайта. А затем используйте Apache mod_rewrite или другие методы сервера, чтобы иметь гибкость в URL вашего сайта. Затем пусть index.php отображает различные URL-запросы для обслуживания разных страниц, после чего вы можете поместить все страницы вашего сайта в базу данных или куда-то еще.

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

Афаик, это хороший способ сделать это.

0 голосов
/ 13 марта 2010

Другая идея состоит в том, чтобы иметь только одну единственную точку входа, которая вызывается с параметром GET, например, ?site=about. Ваш index.php может выглядеть так:

<?php
// whitelist of allowed includes
$allowedIncludes = array('home', 'about', 'error404'); // etc.
// what to include if ?site is not set at all / set to an illegal include
$defaultInclude = 'home';
$errorInclude = 'error404';

// if site is not set, include default
$site = (empty($_GET['site'])) ? $defaultInclude : $_GET['site'];
// if site is illegal, include error page
$include = (in_array($site, $allowedIncludes)) ? $site : $errorInclude;

// actual includes
include 'header.php';
include $include.'.php';
include 'footer.php';

Таким образом, вам нужно только включить header.php и footer.php один раз и иметь полный контроль над тем, что разрешено, а что нет (включенные файлы могут находиться в каталоге, к которому имеет доступ только php). Пока ваш index.php обрабатывает запрос, home.php, about.php не должны знать о header.php и footer.php (вы можете легко заменить их в более поздний момент времени).

Если вам не нравится http://www.example.com/?site=about, можете заглянуть в mod_rewrite и друзей.

0 голосов
/ 13 марта 2010

Вы можете установить сеанс для этого. Переменная сеанса существует, пока посетитель находится на вашем сайте:

<?php
    session_start(); // Remember that session_start(); must be the first line of your PHP and HTML-code

    if($add_a_message){
        $_SESSION['message'] = 'Message';
    }

    if($destroy_message){
        $_SESSION['message'] = '';
    }

    // echo this message
    if(isset($_SESSION['message']) && strlen($_SESSION['message']) > 0){
        echo '<strong>' . $_SESSION['message'] . '</strong>';
    }
?>
...