Духовность™
Продвинутый новичок
а зачем нужен шаблонизатор, если есть php?Кстати, во View вы реально используете html код вместе со вставками php без шаблонизатора?
а зачем нужен шаблонизатор, если есть php?Кстати, во View вы реально используете html код вместе со вставками php без шаблонизатора?
удобство, понятность.а зачем нужен шаблонизатор, если есть php?
<body>
Привет {L_Name},
Ваши заказы:
{S_Orders}
Заказ {Orders.ID}: {Orders.Name} - {Orders.Cost} руб.<br />
{E_Orders}
</body>
В таком случае вообще ВЕСЬ код (вклкючая PHP и OS) отвечает за построение представления. Давайте будем проводить черту адекватно. Согласитесь, что ни шаблонизатор, никакие другие части комплекса не влияют на отображение, только сам шаблон.Разве к View не относится весь код, который отвечает непосредственно за построение представления?.
Хелперы -- это трудное место MVC. На то MVC и является ПРАДИГМОЙ, то есть диктующей только основополагающие принципы, но не детали. Есть например христианская парадигма (идея), но в реальности она материализуется в католицизм, православие, лютеранство и т.д.В том числе и код, который предварительно подготавливает данные, получаемые от модели для отображения в шаблоне (например, нестандартный колоночный вывод, линеаризация иерархии для вывода без рекурсивных вызовов)?
1. Нет нужды везде писать "<?php ?>" и нормальное обращение к массивам: "{$array.key.subkey}" - пожалуй, это основные определяющие моменты для большинства разработчиков.а зачем нужен шаблонизатор, если есть php?
<?php
foreach($items as $item)
{
?>
html html <?php echo $var1 ?> html <?php echo $vaк2 ?> html
html <?php echo $var3 ?> html
html html <?php echo $var4 ?> html <?php echo $var5 ?> html
<?php
}
?>
<?php
foreach($items as $item)
{
echo "html html {$var1} html {$var2} html";
echo "html {$var3} html";
echo "html html {$var4} html {$var5} html";
}
?>
3. второй вариант не делемминичен - он просто работает медленнее значит заменяется первым1. Нет нужды везде писать "<?php ?>" и нормальное обращение к массивам: "{$array.key.subkey}" - пожалуй, это основные определяющие моменты для большинства разработчиков.
2. Удобнее применять всякие модификаторы (опять же "<?php ?>" и не нужно использовать синтаксис вызова функции - имя + 2 скобки вокруг аргумента(ов)) - "{$value|escape}".
3. При использовании PHP для вывода HTML возникает дилемма - написать:
илиPHP:<?php foreach($items as $item) { ?> html html <?php echo $var1 ?> html <?php echo $vaк2 ?> html html <?php echo $var3 ?> html html html <?php echo $var4 ?> html <?php echo $var5 ?> html <?php } ?>
С шаблонизатором таких дилемм не возникаетPHP:<?php foreach($items as $item) { echo "html html {$var1} html {$var2} html"; echo "html {$var3} html"; echo "html html {$var4} html {$var5} html"; } ?>
Шаблонизатор - это прежде всего читабельность и экономия времени при создании, поддержке и рефакторинге шаблонов.
У вас логика в шаблоне, что я считаю не допустимым. Но для вас возможно так лучше.2. Удобнее применять всякие модификаторы (опять же "<?php ?>" и не нужно использовать синтаксис вызова функции - имя + 2 скобки вокруг аргумента(ов)) - "{$value|escape}".
Как же не влияет. Шаблонизатор это неотьемлемая часть View. Это механизм, который на основе конфигурации - шаблона, генерит представление.В таком случае вообще ВЕСЬ код (вклкючая PHP и OS) отвечает за построение представления. Давайте будем проводить черту адекватно. Согласитесь, что ни шаблонизатор, никакие другие части комплекса не влияют на отображение, только сам шаблон.
Это не бизнес-логика, а логика вывода. За вывод четный-нечетный у вас разве модель отвечает?У вас логика в шаблоне, что я считаю не допустимым. Но для вас возможно так лучше.
for(...)
{
echo $odd[$i];
echo $even[$i]
}
В моём случае это не получится сделать в контроллере. В том-то всё и дело, что объект вида сам знает, как ему отображаться и шаблонизатор он инстанцирует сам. Это не позволит контроллеру подсунуть ему шаблонизатор, которым он не умеет пользоваться или не рассчитан на него.меняем ваш вид с html на xml в контролере,в зависимости к примеру от $_REQUEST, что происходит с шаблонизатором? если в виде сслыка на него?
Не понял сразу. У меня контроллер содержит ссылку на экзепляр класса представления, специфичного для данной страницы (группы страниц). А они уже знают всё, что нужно для построения страницы.меняем ваш вид с html на xml в контролере,в зависимости к примеру от $_REQUEST, что происходит с шаблонизатором? если в виде сслыка на него?
Во-первых, незначительное повышение производительности проекта при ухудшении читаемости и поддержки. Для меня дилемма осталась. Любая оптимизация должна быть многокритериальной.3. второй вариант не делемминичен - он просто работает медленнее значит заменяется первым
именно из-за того, чтобы не оправдываться, что у меня нельзя всю туже инфу вывести в xml/json/doc/pdf/все что угодно, потому и потому, я не пользуюсь шаблонизаторами сторонними.В моём случае это не получится сделать в контроллере. В том-то всё и дело, что объект вида сам знает, как ему отображаться и шаблонизатор он инстанцирует сам. Это не позволит контроллеру подсунуть ему шаблонизатор, которым он не умеет пользоваться или не рассчитан на него.
Вы когда создаете представления всегда рассчитываете их на всевозможные шаблонизаторы или как? Если в вашем приложении контроллер подменит шаблонизатор, что будет с приложением?
Если вид поддерживает несколько форматов генерации документа, то он сам должен определять какой формат использовать сейчас (по конфигу, по запросу). Если вы доверите это контроллеру, то при каждом изменении, по сути, в слое представления вам придется ковыряться не просто в чистеньком контроллере, а уже в вариации ТТУКа
если ссылка получаеться у вас рендера нет? так? а если и есть как с шаблонизатором вы будете с ним работать?Не понял сразу. У меня контроллер содержит ссылку на экзепляр класса представления, специфичного для данной страницы (группы страниц). А они уже знают всё, что нужно для построения страницы.
Он может подключать 2 разных TPL-файла.или просто к примеру мне надо изменить для каких то пользователей вид отображения новостей, к примеру для арабов каких-нить выводить их справа на лево...
не удобно я бы написал другой вид и отрендерил бы его в контроллере в зависимости от геоайпи. И не поимел бы ТТУК кстати.Он может подключать 2 разных TPL-файла.
Может использовать другой шаблонизатор, если потребуется - View может делать всё, что связано с логикой отображения.
Его задача подготовить данные модели для шаблона и запустить его рендеринг.
Некоторый абстрактный класс для представлений, использующих Smarty:если ссылка получаеться у вас рендера нет? так? а если и есть как с шаблонизатором вы будете с ним работать?
abstract class ..._Mvc_SmartyView extends ..._Mvc_AbstractView
{
...
public function build()
{
$smarty = self::getSmartyInstance(); // Singleton
...
$smarty->assign($this->templateVars); // условно. переменные для шаблона утанавливаются в методе prepare()
...
return $smarty->fetch($templateFileName);
}
...
}
$view = new $className(...); // класс определяется исходя из поступившего запроса
...
// готовим всё, что нужно для генерации представления, кстати View у меня генерит не только страницы, но и отдельные блоки, которые требуют специальной подготовки данных
$view->prepare();
...
// генерация и отдача страницы
echo $view->build();
Ваш вариант тоже можно использовать. Но, если получение данных для генерации шаблона идентично для всех geo, т.е. мы где-то во View :: prepare вызываем:не удобно я бы написал другой вид и отрендерил бы его в контроллере в зависимости от геоайпи. И не поимел бы ТТУК кстати.
но каждый как известно...
$model->getData($geo);
эээ какой второй класс? у вас View - классы?Ваш вариант тоже можно использовать. Но, если получение данных для генерации шаблона идентично для всех geo, т.е. мы где-то во View :: prepare вызываем:
то не зачем создавать второй класс для View, а во View просто выбрать другой шаблон для генерации вывода.PHP:$model->getData($geo);
class MyController extends Controller_Action{
public function fooAction(){
if ("arrabi" == GEOIP::GetNationByIP($ip)){
$this->render("arrabi"); // my/arrabi.phtml
}else{
$this->render(); // my/foo.phtml
}
}
}