Как отделить php-код от html. Один из способов.
При написании кода каждый, как правило, пишет так, как ему удобно. Когда в проекте вы программист, дизайнер и верстальщик можно делать как вам удобно, перемешав в куче php с html и css. Но почему бы не вспомнить о Карме позаботиться, о будущих "наследниках" вашего творения, тех, кому придётся изменять/дополнять ваш код. Ниже показан один из способов как отделить исполняемый код php от htmk-верстки, тем самым максимально разделив работу программиста и верстальщика.
Условия задачи
Есть таблица пользователей:
| id | login | type |
| 1 | serg | guest |
| 2 | alex | admin |
| 3 | juli | guest |
Необходимо вывести login пользователя с id=1
Решение задачи
Определим функцию php
В качестве параметров функция получает файл $templatename (шаблон html) и меняет в нем одни значения на другие. Массив $tpltags определяет, что на что, поменять:
if (!function_exists(Template_Load)) {
function Template_Load($templatename, $tpltags) {
$out = file_get_contents($templatename);
$out = strtr($out, $tpltags);
return $out;
}
}
Создадим файл шаблона user.html
Содержимое файла:
<h1>Данные пользователя</h1>
Логин: {LOGIN}, статус: {TYPE}
Выводим результат
Идея в том, что дизайнер проекта работает только с html кодом (файлом user.html), его задача сделать форму максимально удобной и красивой для конечного пользователя, и все равно каким образом вместо {LOGIN} и {TYPE} появятся реальные значения. В свою очередь задача программиста в соответствии с условием получить значения и передать их в шаблон:
// Получим значения из базы mysql
$res = mysql_query("SELECT * FROM `table` WHERE `id`=1");
$row = mysql_fetch_array($res);
// Заполним шаблон
$tmpl = Template_Load("user.html", array(
"{LOGIN}" => $row[login],
"{TYPE}" => $row[type]
));
// Вывод результата
echo $tmpl;
Таким образом текст в файле шаблона заменится: {LOGIN} примет значение $row[login], а вместо {TYPE} появится значение $row[type].
Более сложный пример
Ранее мы показали самый простой пример использования данного метода. Чтобы было проще понять суть, усложним задачу. Пусть требуется вывести информацию о всех пользователях со статусом "Гость" в виде списка. В качестве источника данных используем туже таблицу sql. Нам понадобится два шаблона.
Основной шаблон (файл users.html):
<h1>{TITLE}</h1>
<ul>{TMPL_LINES}</ul>
Шаблон строки (файл line.html):
<li>id: {ID}, Логин: {LOGIN}</li>
Код php для получение информации и вывода результата:
// Получим значения из базы mysql
$res = mysql_query("SELECT * FROM `table` WHERE `type`='guest'");
while ($row = mysql_fetch_array($res)) {
// Заполним шаблон строк
$tmpl_lines .= Template_Load("line.html", array(
"{ID}" => $row[id],
"{LOGIN}" => $row[login]
));
}
// Заполним основной шаблон
$title = 'Список всех гостей сайта';
$tmpl = Template_Load("users.html", array(
"{TMPL_LINES}" => $tmpl_lines,
"{TITLE}" => $title
));
// Вывод результата
echo $tmpl;
Сам результат:
<h1>Список всех гостей сайта</h1>
<ul>
<li>id: 1, Логин: serg</li>
<li>id: 3, Логин: juli</li>
</ul>