В чем разница между фреймворками, такими как zendframework и движком шаблонов вроде smarty?
С чего начать с новичков?
В чем разница между фреймворками, такими как zendframework и движком шаблонов вроде smarty?
С чего начать с новичков?
Механизмы шаблонов, чтобы упростить жизнь веб-дизайнера. Рамки предназначены для программистов.
Рамки могут содержать один или несколько шаблонов. Поскольку фреймворки предназначены для программистов, новый или собственный механизм шаблонов программиста может быть встроен в структуру.
Как программист, которому не нужно работать с дизайнером, в 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).
Рамки более сложны, чем шаблонные. Структура может содержать механизм шаблонов, но не обратный. Структура может помочь вам в бесчисленных способах создания вашего (веб-приложения). Механизм шаблонов просто используется для синтаксического анализа переменных в вашем предварительно отформатированном html-шаблоне.
Структура, такая как Zend Framework, по сути является расширением поверх PHP, а Smarty - это механизм шаблонов, который просто отделяет все ваши переменные PHP от front-end (html), а также поддерживает простые методы кэширования контента.
Я порекомендую вам начать изучать Smarty для простоты, и вы будете удивлены, насколько проще будет объединить ваш внешний интерфейс с вашим PHP-кодом.
Вы также можете комбинировать Smarty с eAccelerator http://eaccelerator.net/, чтобы немного ускорить работу.
Короче:
A шаблонный движок делает не что иное, как немного более продвинутое str_replace. Он ищет специальные теги в шаблоне и заменяет их соответствующими значениями. Более продвинутые двигатели (например, Smarty) также имеют петли и условия.
A веб-фреймворк (например, Zend) делает основную часть веб-страницы, делая запросы на страницы и пересылая их обработчикам, ответственным за обработку запроса, и обычно также пересылает информацию ответа механизм шаблонов для разделения логики и макета. Веб-фреймворки (существуют другие типы фреймворков, например, графические интерфейсы GUI, сетевые платформы, графические платформы и т.д.), Как правило, имеют вспомогательные помощники, которые помогают вам со всем, что требуется для типичного веб-сайта, верификацией формы, управлением сеансами, генерацией Captcha, переписыванием URL...