В настоящее время у меня очень простая страница с более сложным бэкэнд. Я всегда делал это так же, но я чувствую, что это неправильно. Но я не придумал много полезного для меня.
У меня есть мои 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>
s в моем файле, так что делать, если я хочу иметь описание на каждой странице? У меня раньше были настройки файлов: 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" />
Однако, я думаю, файлы «фрагментированы». Я не знаю, есть ли общепринятый способ сделать это, но если есть, я хотел бы услышать это!
Я думаю, что большинство опытных кодеров скажут вам как можно меньше смешать ваш код и ваш HTML. Это означает выполнение всех ваших вычислений, а затем просто передачу любых переменных, необходимых для представления в представление.
Они также расскажут вам о шаблоне проектирования MVC. В PHP это то, где классы Controller берут первоначальный запрос, выполняют правильные операции над правильными бизнес-классами Model и затем передают необходимые данные классу View, который бы отображал ваш HTML.
MVC может перейти от очень простых трехмерных вариаций к чрезвычайно сложным «Framework», таким как Zend Framework. Если вы создадите свой собственный, загляните в автозагрузку класса PHP, так как это упростит вашу жизнь.
Понимает, что вы ищете шаблоны.
Хотя вы почти прибили его, вы немного смешаете дело. Просто отделите свои «детали дизайна» от «частей кода». Не делайте заголовок, чтобы выполнять работу с реальным кодом, и все становится таким же ясным, как пресная вода
Позвольте мне предложить вам следующую настройку:
Сайт содержит
основная идея заключается в том, чтобы сделать PHP-скрипт без вывода данных, пока все данные не будут готовы – таким образом, вы получите мгновенное решение проблемы с названием страницы. Более того (подумайте об этом):
После выполнения php-скрипта с подготовкой данных он запрашивает основной шаблон сайта, который, в свою очередь, будет содержать фактический шаблон страницы.
Таким образом, вы получите именно то, о чем вы просите, – достаточно динамичный веб-сайт, который может легко редактировать страницы, но также легко редактируется, и большая часть его нуждается в редактировании – и еще много других преимуществ.
Тем не менее, шаблон, о котором я говорю, представляет собой типичный PHP-скрипт, в основном состоит из чистого 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>
Общепринятый подход на небольших сайтах состоит в следующем:
<?php $title = 'Title'; ?> <?php require_once('header.php'); ?>
<title><?php echo $title; ?> - MyWebsite</title>
Я думаю, что это должно сработать хорошо для вас, сохраняя при этом принцип KISS.
То, что я сделал, это сделать функции заголовка и нижнего колонтитула, которые принимают массив как параметр, а массив может содержать необязательные элементы, поэтому вы должны передать заголовок и т. Д. Функции заголовка.
Я думаю, что одна вещь, которую вы обнаружите, является «общепринятой», заключается в том, чтобы использовать PHP все больше и больше в качестве программы, и меньше, чтобы отказаться от html, когда вам нужен только динамический контент. Другими словами, писать все как программу, которая выводит html, а не как сочетание html и php (открытие и закрытие тегов PHP).
В этой модели многие веб-сайты имеют только один «index.php» и фактически генерируют все страницы (часто из базы данных). Но если у вас есть только несколько страниц, то каждая из них – это собственная php-страница с общими функциями заголовка и нижнего колонтитула, это прекрасный способ пойти, ИМХО.