Как отделить 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>

Добавить комментарий


Защитный код
Обновить