Я пытаюсь создать очень простое веб-приложение, в основном для понимания лучших методов кодирования в 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>
У меня есть следующие вопросы:
head.php
имеет head.php
<body>
и <head>
. Итак, где я должен писать эти строки PHP, чтобы включить его? (в <head>
или <body>
) (я не хочу иметь несколько <head>
s и <body>
s на последней странице)
Какую другую лучшую практику я должен придерживаться? (любая ссылка на ссылки приветствуется)
Я уже читал 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 на страницах, включая его.