Использование PHP для разделения содержимого сайта

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

<?php include 'header.php'; ?> <body> <p>page content here</p> </body> <? include 'footer.php'; ?> 

header.php будет содержать открывающий <html> , <head> и статический контент, а footer.php будет содержать дополнительный статический контент и закрывающий </html> . Итак, мой вопрос: это хороший подход? Я обеспокоен тем, что распространение тегов <html> для нескольких файлов является плохой практикой. Если да, то каков правильный подход к такому дизайну?

Related of "Использование PHP для разделения содержимого сайта"

Нет, ваш подход ошибочен.
Вот основные ошибки в вашем дизайне:

  1. Вы предполагаете, что заголовок header.php будет вызываться при каждом вызове на странице. Это неверно.
  2. Вы предполагаете, что header.php всегда будет статичным. Это неверно.
  3. Вы забыли создать шаблон для самой страницы.

Главное правило, которое каждый должен выучить наизусть:

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

Зачем?

  • это 2011 год. AJAX эпохи. Что делать, если вашему коду придется отправлять данные JSONed вместо цельной HTML-страницы?
  • есть HTTP header . Иногда нам приходится их отправлять. И это становится невозможным, если вы уже отправили свой богатый HTML-заголовок.
  • это всего лишь 4-страничный сайт. Хорошо. Представьте, что вам повезло и получил запрос на еще один 4-страничный сайт. Вам придется менять только шаблоны и не трогать файлы движка. Это действительно большая польза.
  • Представьте, что вы собираетесь создать собственный <title> для своих страниц на основе содержимого страницы. Разве это не обычная вещь? Но вы не можете сделать это без использования шаблонов.

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

Пример макета будет таким:

0,1. самой страницы.

он ничего не выводит, а только собирает необходимые данные и вызывает шаблон:

 <? //include our settings, connect to database etc. include dirname($_SERVER['DOCUMENT_ROOT']).'/cfg/settings.php'; //getting required data $DATA=dbgetarr("SELECT * FROM links"); $pagetitle = "Links to friend sites"; //etc //and then call a template: $tpl = "links.tpl.php"; include "template.php"; ?> 

0,2. template.php который является вашим основным шаблоном сайта,

состоит из вашего верхнего и нижнего колонтитула:

 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>My site. <?=$pagetitle?></title> </head> <body> <div id="page"> <? include $tpl ?> </div> </body> </html> 

0,3. и, наконец, links.tpl.php является фактическим шаблоном страницы:

 <h2><?=$pagetitle?></h2> <ul> <? foreach($DATA as $row): ?> <li><a href="<?=$row['link']?>" target="_blank"><?=$row['name']?></a></li> <? endforeach ?> <ul> 

простой, чистый и обслуживаемый.

При построении ответа на Your Common Sense нет веской причины иметь по 2 файла для каждой страницы. Вы можете легко объединить свой шаблон (YCS, называемый этим .tpl.php), и вашу фактическую страницу в один файл.

Во-первых, начните с класса, который вы можете расширить по мере расширения вашего шаблона:

 <?php #lib/PageTemplate.php class PageTemplate { public $PageTitle; public $ContentHead; public $ContentBody; } 

Затем сделайте свой макет:

 <?php # layout.php require_once('lib/PageTemplate.php'); ?> <!DOCTYPE HTML> <html> <head> <title><?php if(isset($TPL->PageTitle)) { echo $TPL->PageTitle; } ?></title> <?php if(isset($TPL->ContentHead)) { include $TPL->ContentHead; } ?> </head> <body> <div id="content"> <?php if(isset($TPL->ContentBody)) { include $TPL->ContentBody; } ?> </div> </body> </html> 

И, наконец, добавьте свою страницу с содержимым тела:

 <?php #Hello.php require_once('lib/PageTemplate.php'); # trick to execute 1st time, but not 2nd so you don't have an inf loop if (!isset($TPL)) { $TPL = new PageTemplate(); $TPL->PageTitle = "My Title"; $TPL->ContentBody = __FILE__; include "layout.php"; exit; } ?> <p><?php echo "Hello!"; ?></p> 

Это базовый подход, но, да, он работает 🙂 Я уверен, буду беспокоиться о много шаблонов и ООП, но вы определенно на правильном пути

Поскольку я больше не могу комментировать, тогда я отвечу здесь;) Если ему нужен пользовательский заголовок, ему нужны дополнительные функции. Итак, как я сказал, это базовый подход. Но в конце концов, если у него действительно есть статический верхний / нижний колонтитул, и он действительно использует их везде, ну, да, это хороший способ.

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

index.php – включает заголовок, нижний колонтитул и содержимое на основе переменной REQUEST.
header.php – содержимое заголовка
footer.php – содержание нижнего колонтитула

content1.php, content2.php и т. д.


index.php:

 <?php include ('header.php'); // VERY IMPORTANT - do not use the GET variable directly like this // make sure to filter it through a white-list include(basename($_GET['page']).'.php'); include ('footer.php'); ?> 

если вы хотите, чтобы URL-адрес был отправлен на http://www.domain.com/pagename, где страница, которую вы пытаетесь загрузить в index.php, является «pagename», используйте HTACCESS и переписывайте URL-адрес: http://corz.org/serv/ фокусы / htaccess2.php