Простой вопрос PHP о наилучшем опыте меню и контента - PullRequest
2 голосов
/ 15 февраля 2011

ОК, поэтому я впервые создаю полноценный сайт и работаю с php. Теперь я столкнулся с проблемой:

Допустим, мой сайт просто имеет заголовок с меню и область с контентом. Конечно, я хотел бы иметь header.php и несколько файлов содержимого, например, content1.php content2.php и content3.php Таким образом, вам нужно всего лишь изменить меню в 1 файле, как вы понимаете.

Как тогда лучше построить сайт:

A. поместите что-то подобное в каждый файл содержимого:

  <?php include 'header.php'; ?>

  here the content of the content page 1

B. создайте индексный файл с чем-то вроде:

   <?php include 'header.php'; ?>

   <?php include 'content1.php'; ?>

как тогда получается, что когда в меню нажимается ссылка на content2.php, заголовок также остается на этой странице?

C. что-то другое? Может быть, хороший учебник о том, как сделать такие страницы?

Ответы [ 5 ]

5 голосов
/ 15 февраля 2011

Если вы хотите извлечь максимальную пользу от повторного использования кода / элементов, то вы на правильном пути, выбрав второй вариант:

B. создайте индексный файл с чем-то вроде:

<?php include 'header.php'; ?>
<?php include 'content1.php'; ?>

как же тогда, когда в меню нажата ссылка на content2.php, заголовок все еще находится на этой странице?

Вот как (упрощенный пример):

Направьте все похожие запросы (content1,2,3) через ваш index.php скрипт, используя строку запроса - mod_rewrite может сделать это красиво. Затем обслуживайте основной раздел контента на основании запроса.

Например, ссылка:

<a href='index.php?page=content1'>Content 1</a>

И обнаружение контента для обслуживания:

<php
    $pages['content1'] = 'content1.php';
    $pages['content2'] = 'content2.php';

    $pages['default'] = $pages['content1']; //set default content

    $page = 'default';
    if(isset($pages[$_GET['page']]){
        $page = $pages[$_GET['page']]; //make sure the filename is clean
    }

?>
<?php include 'header.php'; //header here?>
<?php include $page; //correct content here?>

Мало того, что есть единственное место, чтобы изменить заголовок, но теперь есть единственное место, чтобы изменить весь макет.

Конечно, это просто упрощенный пример, есть много PHP-фреймворков, которые делают все это для вас (используя MVC).

3 голосов
/ 15 февраля 2011

Простой вместо index.php, включая файлы содержимого, вы делаете:

header.php:

 <a href="content1.php">content 1</a><br />
 <a href="content2.php">content 2</a><br />

content2.php:

<?php
    include('header.php');
?>

This is the page with 'content 1'

content2.php:

<?php
    include('header.php');
?>

This is the page with 'content 2'
2 голосов
/ 15 февраля 2011

Но если бы у меня было 1000 страниц содержания, разве не было бы способа сделать это по-другому?как это было 10 лет назад с рамками.

Краткий ответ, нет.Самый быстрый способ для небольшого веб-сайта - использовать метод заголовка, который описывает @mark b.Это не только быстро, но и позволяет вам полагаться на URL-пути, которые могут быть полезны для SEO.

Возможно, длинный ответ.Фреймы по существу были заменены использованием dom, где каждый назначает контент div и выполняет обновление.Он быстрый, намного проще в управлении, чем старые кадры, и может выполняться асинхронно (через AJAX). Однако, это также намного больше работы, чем старая цель = функциональность.Клиентам это нравится, но на это нужно время.Фактически, это значительное время, если вы имеете дело с кучей страниц и большим количеством контента.

Другой вариант - использовать систему шаблонов, такую ​​как Zend Framework, чтобы встроить ваши представления в единый шаблон для отображения.Но это добавило бы издержки инфраструктуры, которые могут быть значительными.

Наконец, поскольку у вас есть PHP, вы можете просто извлечь весь контент из БД и по существу запустить весь сайт на одном ».страница».Строка URL будет содержать параметр, который сообщает ей, какой контент извлечь из БД и заменить на вашей обычной странице «получения».Настоящая система CMS.

Удачи.

0 голосов
/ 15 февраля 2011

Вариант A уменьшает количество файлов, хотя по мере того, как вы все более усложняете дизайн своего сайта, вы можете захотеть взглянуть на Smarty , поскольку это полностью отделяет «представление» от «данные» страницы. Кроме того, он очень надежен и создан в качестве основы.

0 голосов
/ 15 февраля 2011

Вы можете использовать phps __autoload ().Это звучит немного грязно, но классные обертки вокруг вашего контента, а затем один метод доступа в конце каждого файла.

Каждый файл будет выглядеть примерно так:

...