Каково различие между платформами как zendframework и движком шаблонов как присяжный острослов?
С которого я должен запустить как новичок?
Механизмы шаблонов призваны облегчить жизнь веб-дизайнеру. Фреймворки предназначены для программистов.
Фреймворки могут содержать один или несколько шаблонов. Поскольку фреймворки предназначены для программистов, в фреймворк может быть встроен новый или собственный шаблонизатор.
Как программисту, которому не нужно работать с дизайнером, в PHP вам действительно не нужен механизм шаблонов, поскольку сам PHP может быть окружен (X) HTML-кодом.
В качестве доказательства того факта, что сам PHP может использоваться в качестве механизма создания шаблонов, вот как вы можете отделить бизнес-логику от логики представления.
Это доморощенный шаблонизатор-пустышка. Это неполно, это небезопасно. Это всего лишь прототип, чтобы показать вам основную идею создания шаблонов.
Вы, наверное, уже слышали о MVC - или нет - это не имеет значения. Описанная ниже практика похожа на нее, но вам не нужно программировать ООП или использовать фреймворк
. Ваши «представления» - это просто шаблоны, которые получают некоторые переменные из вашего скрипта. В основном скрипте (здесь greet.php) вы выполняете только «бизнес-логику». «Бизнес-логика» включает в себя все операции с базой данных, работу с сеансами, выполнение всех математических расчетов и проверку правильности ввода, в конечном итоге его фильтрацию.
Тогда все, что вам нужно сделать, это сохранить данные, которые вы хотите отобразить, в промежуточных переменных. В приведенном ниже примере это $ title, $ name, $ showdata и $ errors.
Функция render () делает одну важную вещь: она изолирует шаблон, который должен быть включен, от внешнего мира бизнес-логики нашего скрипта, используя автоматический объем переменных - переменные extract () 'ed из ассоциативного массива являются локальными для render () - весь шаблон существует только внутри этой функции.
Обратите внимание, что переменные extract () 'ed названы в честь ассоциативных индексов второго параметра функции render ().Если ваш шаблон не требует других имен для переменных, вы можете вырезать несколько строк, инициализировав массив следующим образом:
$export = compact('title','name','showdata','errors');
Переменная $ do_greet больше не будет существовать в вашем шаблоне. Вместо этого та же переменная будет известна под тем же именем, что и в вашем сценарии бизнес-логики, а именно $ 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).
Фреймворк, подобный Zend Framework, по сути, это расширение поверх PHP, тогда как Smarty - это механизм шаблонов, который просто отделяет все ваши переменные PHP от внешнего интерфейса (html), а также поддерживает простые методы кэширования содержимого.
Я порекомендую вам начать изучение Smarty из-за его простоты, и вы удивитесь, насколько проще будет объединить ваш интерфейсный дизайн с вашим PHP-кодом.
Вы также можете комбинировать Smarty с eAccelerator http://eaccelerator.net/ , чтобы немного ускорить работу.
Фреймворки сложнее, чем шаблонизаторы. Фреймворк может содержать шаблонизатор, но не наоборот. Фреймворк может помочь вам в создании вашего (веб-) приложения множеством способов. Шаблонный движок просто используется для разбора переменных в вашем предварительно отформатированном html-шаблоне.
Вкратце:
шаблонизатор не делает ничего, кроме немного более продвинутой str_replace. Он ищет специальные теги в шаблоне и заменяет их соответствующими значениями. Более продвинутые движки (например, Smarty) также имеют циклы и условия.
Веб-фреймворк (например, Zend) выполняет большую часть основных функций веб-страницы, принимая запросы страницы и пересылая их обработчикам, ответственным за обработку запроса, а также обычно пересылает информацию ответа в шаблонизатор для разделения логики и макета. Веб-фреймворки (существуют и другие типы фреймворков, например, GUI Frameworks, Networking Frameworks, Graphics Frameworks и т. Д.) Обычно имеют вспомогательные утилиты, которые помогают вам со всем, что нужно типичному веб-сайту, включая проверку форм, управление сеансом, создание Captcha, перезапись URL,. ..