2016-12-21 13 views
2

Я начинающий PHP. Во многих учебниках я видел, что они рекомендуют заменить заголовок страницы на include. Но название и описание должны быть разными на каждой странице. Поэтому я не понимаю. Есть ли способ решить это? или если если хотите иметь уникальные названия и описания, я не должен включать в себя часть головы? Какова наилучшая практика?Включить голову и уникальные заголовки

(Я понимаю, что полезность включает в себя: Если я когда-либо сделать изменение, которое я только должен пойти в одно место.)

Примера страницы:

<!DOCTYPE HTML> 
<html lang="en"> 
<head> 
<meta charset="UTF-8"> 

<title>Title of the page</title> 
<meta name="description" content="Description of the page"> 
<link rel="stylesheet" href="externs/stylesheet/general.css" > 
</head> 
<body> 

<div>Content</div> 

</body> 
</html> 

На той же странице что ставит голову на другую страницу с включенными

include "head.php"; 
<div>Content</div> 
include "footer.php"; 
+0

«Рекомендуем заменить голову страницы на включение» - будьте осторожны с этим. Ваш код будет неуправляемым, если только ваши файлы PHP не генерируют хорошо сформированный фрагмент, т. Е. Генерируют все между «» и «» в порядке, но не «» до «». – symcbean

ответ

0

Ваши включенные файлы не обязательно должны быть статическими. Вы можете создать свои head.php и footer.php и использовать в них код PHP. Например:

<?php 
// head.php 
$title = getPageTitle(); // you need to implement a way of getting a title here 
?> 
<!-- html code skipped --> 
<title><?= $title ?></title> 

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

include "head.php"; // here head.php is dynamic by itself 
<div>Content</div> 
include "footer.php"; // and footer.php also knows what to do 
+1

У вас есть опечатка в вашем ответе. Вы хотели сказать «templating engine», но вы случайно набрали что-то несвязанное под названием MVC. – PeeHaa

0

предложение Юрия использовать header.php и footer.php, безусловно, обеспечивает более управляемый веб-сайт, копируя один и тот же стиль и структурную HTML через множество различных PHP-файлов. Но в соответствии с моим комментарием в другом месте это сложно реализовать, создавая хорошо сформированный HTML. Кроме того, ваш код должен быть разделен на управляемые единицы - поэтому создание и потребление «$ title», вероятно, будет в очень разных местах (области) внутри вашего кода.

Конечно, вы должны попытаться свести к минимуму количество кода, выполняющегося в контексте _main включенного файла - он должен делать только то, что явно вызывается. И использование одного файла упрощает обслуживание - например,

<?php 

include('project/templater.inc.php'); 
$t=new template(); 
t->pre_output(); 
print "<html>\n"; 
$t->head("My test page"); 
$t->page_start(); 
// all entry point scripts contain something like the above, and a page_end() 
// next, all the page specific stuff.... 
?> 

    <div>Hello world</div> 

<?php 
$t->page_end(); 
print "</html>"; 
$t->clean_up(); 

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

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

<?php 

include("project/stdpage.inc.php"); 

render_page('content_for_this_page'); 

function content_for_this_page() 
{ 
    print "<div>Hello world</div>\n"; 
} 

Здесь, в том числе файл делает не что иное, как определение функций, включая «render_page()», когда он вызывается, в какой-то момент он знает, что ему нужно включить какой-то специфический для страницы контент - это определяется обратным вызовом в аргументе.

+0

Я просто не понимаю. Как я уже сказал, я новичок – Nrc