Лучшая практика для HTML-заголовка в PHP
В настоящее время у меня очень простая страница с более сложными бэкэнд. Я всегда делал это так же, но я чувствую, что это неправильно. Но я не придумал много полезного для меня.
У меня есть мои index.php, header.php и function.php. index.php включает header.php, который вызывает функцию из функции .php. Главное, что я не уверен в том, как сделать сайт достаточно динамичным, чтобы он мог легко редактировать страницы, но также легко редактироваться, большая часть его нуждается в редактировании.
index.php
<?php
session_start();
include_once 'header.php';
?>
// Page content
</body>
</html>
header.php
<!DOCTYPE HTML>
<html lan="en">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<?php
require_once 'functions.php';
getBar(); // Top of page bar with menu/login etc
?>
Я не думаю, что функция functions.php добавила бы столько. Я знаю, что не должен использовать 2 <head>
в моем файле, так что делать, если я хочу иметь описание на каждой странице? У меня ранее были настройки файлов, например:
index.php
<?php
session_start();
include_once 'header.php';
?>
// extra page specific stuff here, such as description or JS
</head>
<body>
<?php
require_once 'functions.php';
getBar(); // Top of page bar with menu/login etc
?>
// Page content here
</body>
</html>
header.php
<!DOCTYPE HTML>
<html lan="en">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" type="text/css" />
Однако, я думаю, что файлы "фрагментированы". Я не знаю, есть ли общепринятый способ сделать это, но если есть, я бы хотел его услышать!
Ответы
Ответ 1
Я думаю, что большинство опытных кодеров скажут вам как можно меньше смешать ваш код и ваш HTML. Это означает выполнение всех ваших вычислений, а затем просто передачу любых переменных, необходимых для представления в представление.
Они также расскажут вам о шаблоне проектирования MVC. В PHP это то, где классы контроллера берут первоначальный запрос, выполняют правильные операции над правильными бизнес-классами модели, а затем передают необходимые данные классу View, который бы отображал ваш HTML.
MVC может перейти от очень простых 3-х классов к чрезвычайно сложным "Framework", таким как Zend Framework. Если вы создадите свой собственный, загляните в автозагрузку класса PHP, так как это упростит вашу жизнь.
Ответ 2
Определяет, что вы ищете шаблоны.
Хотя вы почти прибили его, вы немного смешаете. Просто отделите свои "детали дизайна" от "частей кода". Не делайте заголовок, чтобы выполнять работу с реальным кодом, и все становится таким же прозрачным, как пресная вода
Позвольте мне предложить вам следующую настройку:
Сайт содержит
- главный файл конфигурации (предположим, что-то вроде ваших функций .php)
- шаблон основного сайта
- фактические страницы (или разделы) - реальные скрипты php различного назначения. Каждый из них состоит из двух частей:
- script сам, выполняя все интеллектуальный анализ и подготовку данных, инициализируя все переменные
- шаблон, выполняющий только вывод данных.
Основная идея состоит в том, чтобы сделать PHP script не выводить вывод до тех пор, пока все данные не будут готовы - таким образом, вы получите мгновенное решение проблемы с названием страницы. Более того (подумайте об этом):
- вы сможете отправлять любые HTTP-заголовки, файлы cookie, запускать сеанс и т.д.
- вы также сможете изменить весь внешний вид вывода "на лету": вместо XML XML или JSON, например
- вы сможете использовать одну и ту же базу кода для разных сайтов, изменяя только шаблоны
Как только php script выполняется с подготовкой данных, он вызывает основной шаблон сайта, который, в свою очередь, будет содержать фактический шаблон страницы.
Таким образом, вы получите именно то, о чем вы просите, - достаточно динамичный веб-сайт, который может легко редактировать страницы, но также легко редактируется, и большая часть его нуждается в редактировании - и еще много других преимуществ.
Шаблон, о котором я говорю, типичный PHP script, однако, состоит в основном из чистого HTML, причем некоторый PHP-код предназначен только для отображения динамически генерируемых данных.
Здесь вы найдете примерный, но рабочий пример
страница:
<?
//include our settings, connect to database etc.
include dirname($_SERVER['DOCUMENT_ROOT']).'/cfg/settings.php';
//getting required data
$DATA=dbgetarr("SELECT * FROM links");
// setting title for using in the main template
$pagetitle = "Links to friend sites";
//etc
//set page template filename
$tpl = "links.tpl.php";
//and then finally call a template:
include "main.tpl.php";
?>
где main.tpl.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>
и links.tpl.php
- это фактический шаблон страницы:
<h2><?=$pagetitle?></h2>
<ul>
<? foreach($DATA as $row): ?>
<li><a href="<?=$row['link']?>" target="_blank"><?=$row['name']?></a></li>
<? endforeach ?>
<ul>
Ответ 3
Общепринятый подход на небольших сайтах должен иметь что-то вроде этого:
<?php $title = 'Title'; ?>
<?php require_once('header.php'); ?>
header.php
<title><?php echo $title; ?> - MyWebsite</title>
Я думаю, что это должно сработать для вас, сохраняя при этом принцип K.I.S.S.
Ответ 4
То, что я сделал, это сделать функции заголовка и нижнего колонтитула, которые принимают массив как параметр, а массив может содержать необязательные элементы, поэтому вы должны передать заголовок и т.д. функции заголовка.
Я думаю, что одна вещь, которую вы обнаружите, является "общепринятой", заключается в том, чтобы использовать PHP все больше и больше в качестве программы, и меньше, чтобы отказаться от html, когда вам нужен только динамический контент. Другими словами, писать все как программу, которая выводит html, а не как сочетание html и php (открытие и закрытие тегов PHP).
В этой модели многие веб-сайты имеют только один "index.php" и фактически генерируют все страницы (часто из базы данных). Но если у вас есть только несколько страниц, то каждая из них - это собственная php-страница с разделяемыми функциями верхнего и нижнего колонтитула, это прекрасный способ, IMHO.