Несколько тегов <head> и <body>

Я пытаюсь создать очень простое веб-приложение, в основном для понимания лучших методов кодирования в HTML5, CSS и JavaScript.

Мое приложение имеет 3-4 страницы, и каждый использует тот же заголовок меню. Поэтому я хочу сделать его многоразовым, написав его в отдельном файле (PHP или HTML).

head.php (он должен быть повторно использован):

<!DOCTYPE html> <html> <head> <link href="../../css/headermenu.css" rel="stylesheet" type="text/css"/> </head> <body> <ul id="menu"> <li><a href="#" class="home">Home<span></span></a></li> </ul> <p> </p> </body> </html> 

front.php:

 <?php include ("$_SERVER[DOCUMENT_ROOT]/page/common/head.php"); ?> 

HTML-разметка (грязный код):

 <!DOCTYPE html> <html> <head> <!DOCTYPE html> <html> <head> <link href="../../css/headermenu.css" rel="stylesheet" type="text/css"/> </head> <body> <ul id="menu"> <li><a href="#" class="home">Home<span></span></a></li> </ul> <p> </p> </body> </html></head> <body> <div> </div> <p> </p> </body> </html> 

У меня есть следующие вопросы:

  1. head.php имеет head.php <body> и <head> . Итак, где я должен писать эти строки PHP, чтобы включить его? (в <head> или <body> ) (я не хочу иметь несколько <head> s и <body> s на последней странице)

  2. Какую другую лучшую практику я должен придерживаться? (любая ссылка на ссылки приветствуется)

Я уже читал w3schools.

На мой взгляд, было бы неплохо прочитать о системах шаблонов или посмотреть, как это работает с каркасами / CMS.

Выполняя это, вы не можете полностью избежать повторения, например, тега закрывающей головки </head> в каждом content.php.

Так что это всего лишь идея:

head.php

 <?php // Some other includes / requires, // code snippets... ?> <!DOCTYPE html> <html> <head> <!-- site-wide stylesheets --> <!-- & js-files --> <link href="css/main.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="my/global/scripts.js"></script> 

content.php

 <?php include ($_SERVER['DOCUMENT_ROOT'] . '/page/common/head.php'); ?> <!-- put page specific scripts & <!-- styles here --> <link href="my/pages/css/style.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="my/pages/js/scripts.js"></script> </head> <body> <div id="container"> <!-- content start --> <div id="content"> <h1>title</h1> <p>Your content</p> </div> <!-- end of content div --> <?php include ($_SERVER['DOCUMENT_ROOT'] . '/page/common/foot.php'); 

foot.php

  <div id="foot"> copyright etc </div> </div> <!-- end of container div --> </body> </html> 

php – это рендеринг html, и если у вас в обоих заголовках файлов, конечно, он будет напечатан дважды

вы должны отделить в include, но не пишите в оба файла тега

пример

 <header> <?php // this file should not include <head> taf include ($_SERVER[DOCUMENT_ROOT] . '/page/common/header.php); ?> </header> BODY <header> <?php include ($_SERVER[DOCUMENT_ROOT] . '/page/common/foot.php); ?> </header> 

include будет выводить контент из head.php и foot.php и будет помещен в файл index.php

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

 <?php // head.php $html = <<< EOF <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> <head> <title>{$title}</title> {$meta} <link href="../../css/headermenu.css" rel="stylesheet" type="text/css"/> {$additional_style} </head> <body> <ul id="menu"> <li><a href="#" class="home">Home<span></span></a></li> </ul> {$mainbody} {$footer} {$javascript} </body> </html> EOF; ?> <?php // page1.php $title = 'some title'; $meta = ''; $additional_style = ''; $mainbody = 'your body'; $footer = ''; $javascript = ''; include_once("head.php"); echo $html; ?> <?php // page2.php $title = 'some other title'; $meta = ''; $additional_style = '<link href="../../css/page2.css" rel="stylesheet" type="text/css"/>'; $mainbody = 'your body'; $footer = ''; $javascript = ''; include_once("head.php"); echo $html; ?> 

Он также позволяет использовать несколько уровней наследования (например, вы можете определить один и тот же нижний колонтитул для нескольких страниц). Этот принцип также можно использовать без EOF, но я думаю, что он выглядит лучше.

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