Каковы различия между платформой и движком шаблонов?

Каково различие между платформами как zendframework и движком шаблонов как присяжный острослов?

С которого я должен запустить как новичок?

12
задан Lance Roberts 22 May 2011 в 18:12
поделиться

4 ответа

Механизмы шаблонов призваны облегчить жизнь веб-дизайнеру. Фреймворки предназначены для программистов.

Фреймворки могут содержать один или несколько шаблонов. Поскольку фреймворки предназначены для программистов, в фреймворк может быть встроен новый или собственный шаблонизатор.

Как программисту, которому не нужно работать с дизайнером, в 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).

6
ответ дан 2 December 2019 в 23:06
поделиться

Фреймворк, подобный Zend Framework, по сути, это расширение поверх PHP, тогда как Smarty - это механизм шаблонов, который просто отделяет все ваши переменные PHP от внешнего интерфейса (html), а также поддерживает простые методы кэширования содержимого.

Я порекомендую вам начать изучение Smarty из-за его простоты, и вы удивитесь, насколько проще будет объединить ваш интерфейсный дизайн с вашим PHP-кодом.

Вы также можете комбинировать Smarty с eAccelerator http://eaccelerator.net/ , чтобы немного ускорить работу.

0
ответ дан 2 December 2019 в 23:06
поделиться

Фреймворки сложнее, чем шаблонизаторы. Фреймворк может содержать шаблонизатор, но не наоборот. Фреймворк может помочь вам в создании вашего (веб-) приложения множеством способов. Шаблонный движок просто используется для разбора переменных в вашем предварительно отформатированном html-шаблоне.

2
ответ дан 2 December 2019 в 23:06
поделиться

Вкратце:

шаблонизатор не делает ничего, кроме немного более продвинутой str_replace. Он ищет специальные теги в шаблоне и заменяет их соответствующими значениями. Более продвинутые движки (например, Smarty) также имеют циклы и условия.

Веб-фреймворк (например, Zend) выполняет большую часть основных функций веб-страницы, принимая запросы страницы и пересылая их обработчикам, ответственным за обработку запроса, а также обычно пересылает информацию ответа в шаблонизатор для разделения логики и макета. Веб-фреймворки (существуют и другие типы фреймворков, например, GUI Frameworks, Networking Frameworks, Graphics Frameworks и т. Д.) Обычно имеют вспомогательные утилиты, которые помогают вам со всем, что нужно типичному веб-сайту, включая проверку форм, управление сеансом, создание Captcha, перезапись URL,. ..

-1
ответ дан 2 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: