Ответ 1
Механизмы шаблонов, чтобы упростить жизнь веб-дизайнера. Рамки предназначены для программистов.
Рамки могут содержать один или несколько шаблонов. Поскольку фреймворки предназначены для программистов, новый или собственный механизм шаблонов программиста может быть встроен в структуру.
Как программист, которому не нужно работать с дизайнером, в PHP вам не нужен механизм шаблонов, так как сам PHP может быть окружен HTML-кодом (X).
Создание механизма шаблона в качестве программиста
В качестве доказательства того факта, что сам PHP можно использовать в качестве механизма шаблонов, вот как вы можете отделить бизнес-логику от логики представления.
Это домашний манекен для моделирования шаблонов. Он не является полным, он небезопасен. Это всего лишь прототип, чтобы показать вам основную идею шаблонов.
Возможно, вы уже слышали о MVC - или нет - это не имеет значения. Практика, описанная ниже, похожа на нее, но вам не нужно программировать OOP или использовать framework
Ваши "представления" - это просто шаблоны, которые получают некоторые переменные из вашего script. В главном script (здесь greet.php) вы выполняете только "бизнес-логику". "Бизнес-логика" включает в себя все операции с базой данных, работу с сеансами, выполнение всех математических вычислений и проверку правильности ввода, в конечном итоге фильтрацию.
Затем вам нужно только сохранить данные, которые вы хотите отображать в промежуточных переменных. В приведенном ниже примере это $title, $name, $showdata и $errors.
Функция render() делает одну важную вещь: она изолирует шаблон, который должен быть включен из внешнего мира бизнес-логики нашего script, используя автоматическую область переменных - переменные extract() 'ed из ассоциативного массива являются локальными для render() - весь шаблон существует только внутри этой функции.
Обратите внимание, что переменные extract() 'ed называются после ассоциативных индексов второго параметра render(). Если вашему шаблону не нужны разные имена для переменных, вы можете отрезать некоторые строки, инициализируя массив следующим образом:
$export = compact('title','name','showdata','errors');
Переменная $do_greet больше не будет существовать внутри вашего шаблона. Вместо этого одна и та же переменная будет известна под тем же именем, что и в вашей бизнес-логике script, а именно $showdata.
greet.php
<?php
$title = 'Contact';
$name = 'Guest';
$showdata = FALSE;
$errors = array();
if(isset($_POST['submit'])) {
if(isset($_POST['name']) && $name = trim($_POST['name'])) {
$name = strip_tags($name);
$showdata = TRUE;
}
else {
$errors[] = 'Missing name.';
}
}
$export = array(
'title' => $title,
'name' => $name,
'do_greet' => $showdata,
'errors' => $errors
);
render('greet_view.php',$export);
function render($template,$data) {
extract($data);
return include $template;
}
Одно важное примечание к таким шаблонам: если вы пытаетесь получить доступ к глобальным данным, соединениям с базой данных, суперглобальным массивам, например $ _SESSION, $_GET, $_POST, $_COOKIE, $_FILES, $_SERVER и т.д. В ваших шаблонах, то вы не используете эту технику должным образом. Ваша цель - полностью отделить логику от взгляда.
Если вам нужны такие данные, сделайте их доступными для просмотра через промежуточную переменную, например:
$export = array(
'title' => $title,
'name' => $name,
'do_greet' => $showdata,
'errors' => $errors,
'referer' => htmlentities($_SERVER['HTTP_REFERER'])
);
Вот код представления или шаблона greet_view.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $title ?></title>
</head>
<body>
<?php
if($do_greet) {
echo 'Hi ',$name;
}
if(count($errors)) {
if(count($errors)>1) {
echo '<p class="error">',implode('</p><p class="error">',$errors),'</p>';
}
else {
echo '<p class="error">'.$errors[0].'</p>';
}
}
?>
<form method="post">
<input name="name" />
<input type="submit" name="submit" />
</form>
</body>
</html>
Отказ от ответственности: представленный код не является чистым, и он не является безопасным или совершенным. Мое намерение - только поставить вас на правильный путь. ваша работа делать больше исследований.
Рамка
Это была часть движка шаблона. Структура обеспечивает функциональность (в виде функций и/или классов) для решения общих проблем, таких как аутентификация, авторизация, маршрутизация запроса на правильный файл/класс (контроллер в мире MVC) и т.д.
Эта функция, в отличие от CMS, не готова к использованию как есть. Различные компоненты рамки должны быть связаны вместе программистом. Поскольку программисту требуется только эта проводка, но не (повторно) писать эту функцию снова и снова для каждого проекта, структура делает программирование более приятным, позволяя программисту сосредоточиться на конкретных проблемах, связанных с конкретным проектом.
Механизм шаблонов, подобный представленному выше, может быть частью этой структуры, а функция render() может быть методом контроллера (в условиях MVC).