Тюнниг php как шаблонизатора.

Ирокез

бессмертный пони
Команда форума
Партнер клуба
Создавая объект на каждую переменную или используя внутренний указатель на текущий объект то-ж выход. Но я говорю о облегчении кода шаблона. мне очень не нравится
PHP:
<?=$this->truncate($Var)?>
в самом шаблоне.

PHP:
<?=$Var|trunacte?>
или
PHP:
<?=truncate($Var)?>
выглядит более понятней, да казалось бы отличий мало, но они есть и постоянное дублирование $this-> или более показательно
PHP:
$sf_data->get('test_object', ESC_RAW)->testSpecialChars('&')
-~{}~ 17.02.10 15:26:

Автор оригинала: HraKK
Кстати да - эскейпить задача View, ну лично у меня так)
У меня нет View, точнее в качестве View у меня используется шаблон. (Архитектуру фреймворков не обсуждаем :) )
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
Автор оригинала: Wicked
ты типа привел в пример самую длинную строчку, а разобраться, что она делает - забыл? .-)

обычно все сводится к $this->name = '...'; в экшене и к <?php echo $name ?> в шаблоне
Таки я просто как пример жесткого синтаксиса а не в качестве разбора на то что он делает.

Ну если усходить из того что вводить три раздельные стадии обработки (получение данных, форматирование, вывод) то сведется все к <?php echo $name ?> не спорю, но при этом обработка массива по идее выльется в лишние циклы
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
Автор оригинала: HraKK
>> Мсье пишет хайлоады?
при чем тут хайлоад? (

>> Но даже там пару _лишних_ циклов не решат ничего.
в них нет необходимости...

>> А отсутствие View заменяем на извращение с шаблонами? Ну-ну :)

В чем заключается извращение? И не извращение ли вводить искусственный обработчик дабы подогнать данные под вывод. Но это уже не тема поста.


HraKK
Так можно ли поподробнее почему отказался от этого "извращения"?
 

Wicked

Новичок
Таки я просто как пример жесткого синтаксиса а не в качестве разбора на то что он делает.
там, между прочим, сказано, что это эквивалентно записи:
PHP:
<?php echo $test_object->testSpecialChars('&', ESC_RAW) ?>
а ты не думал о том, как будет выглядеть в твоем случае вывод неэкранированного значения, взятого с помощью метода некоего объекта, вызванного с аргументом '&'? :)

но при этом обработка массива по идее выльется в лишние циклы
в смысле? какие именно циклы?
работа с массивами получается такой же прозрачной, как и с обычными строками - в них значения тоже экранируются, и тоже лениво.
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
>> а ты не думал о том, как будет выглядеть в твоем случае вывод неэкранированного значения, взятого с помощью метода некоего объекта, вызванного с аргументом '&'? :)
Туго представляю зачем такое надо, возможно подходы разные к переменным шаблона, у меня условно разделено, что шаблон может вызывать только хелперы шаблонизатора.

но никто не запрещает закинуть в шаблон объект какого либо класса и самому делать все необходимые действия для вывода данных. но у меня очень редко возникает такая необходимость, соответственно на большинства случаев, делается компиляция шаблона, раскрывающая пхп-теги, тег <?php ?> у меня переносится в чистом виде (с заменой толькой вызова хелпре функций url(...) -> $this->url(...) )
 

HraKK

Мудак
Команда форума
при чем тут хайлоад? (
Ну если усходить из того что вводить три раздельные стадии обработки (получение данных, форматирование, вывод) то сведется все к <?php echo $name ?> не спорю, но при этом обработка массива по идее выльется в лишние циклы
в них нет необходимости...
Необходимость есть, чтоб проекскейпить данные не в шаблоне, а во вью.

В чем заключается извращение? И не извращение ли вводить искусственный обработчик дабы подогнать данные под вывод. Но это уже не тема поста.
Задача вью не только обрабатывать данные, а и _главное_ хранить их и передавать между контроллерами.

Так можно ли поподробнее почему отказался от этого "извращения"?
Потому что PHP Native с грамотной архитектурой хватает за уши.
Если не хватает, ищи проблему в архитектуре.
 

AmdY

Пью пиво
Команда форума
шет, я думал будет действительно объяснения, а здесь: мне не нужна пила с моторчиком, моя двуручная итак пилит, мне хватает ты просто не умеешь ей пользоваться правильно.
если с таким подходом удастся использовать фишки типо смарти + мощь php, наследование шаблонов и решить проблему активных шаблонов, да ещё свести на нет возможность xss, как это в xslt..... будет просто великолепно.
кстати, здесь приводили пример симфони, там шаблоны просто ужасны и автор сам заикался, что не мешало бы перейти на twig(довольно интересный шаблонизатор). у них архитектура так ужасна как и шаблоны?
 

HraKK

Мудак
Команда форума

HraKK

Мудак
Команда форума
А, это тоже думаю не проблема и есть _везде_
 

fixxxer

К.О.
Партнер клуба
Вот кстати да, копипащу из реального по сути

layouts/base.tpl
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>                                                                                                                                                  
    {% block head %}                                                                                                                                    
    <link rel="stylesheet" href="{% url static '/css/style.css' %}" />                                                                                  
    <script type="text/javascript" src="{% url static '/js/jquery.min.js' %}"></script>                                                           
    <script type="text/javascript" src="{% url static '/js/common.js' %}"></script>                                                                       
    <meta http-equiv="Content-type" content="text/html;charset=utf-8" />                                                                                
    <title>domain.com: {% block title %}default title{% endblock %}</title>                                                                          
    {% endblock %}                                                                                                                                      
</head>                                                                                                                                                 
<body>                                                                                                                                                  
{% block contents %}                                                                                                                                    
{% endblock %}                                                                                                                                          
{% block footer %}                                                                                                                                      
    <div class="footer">
     блаблабла
    </div>                                                                                                                                              
{% endblock %}                                                                                                                                          
</body>                                                                                                                                                 
</html>
pages/somepage.tpl
PHP:
{% extends "/layouts/base.tpl" %}
{% block head %}
    {% block title %}Title of this page{% endblock %}
    {% parent %}
    <link rel="stylesheet" href="{% url static '/css/extra-for-this-page.css' %}" />
    <script type="text/javascript" src="{% url static '/js/extra-for-this-page.js' %}"></script>                                                                       
{% endblock %}
{% block contents %}
...............
{% endblock %}
вот как такое на native php изобразить?
 

HraKK

Мудак
Команда форума
Круто, как ваши верстальщики ноги не ломают, раз даже я что делают эти шаблоны я не понял.
Так что буду ходить к гадалке.
PHP:
<head>
<title><?=$title;?>
    <link rel="stylesheet" href="<?=$basepath;?>/css/extra-for-this-page.css" />
    <script type="text/javascript" src="<?=$basepath;?>/js/extra-for-this-page.js"></script>
</head>
<?=$Page->content;?>
<?=wInclude::template('/layouts/base.tpl'); // просто запускает новый рендер с шаблоном указанным и текущим View и возвращает вывод.?>
 

fixxxer

К.О.
Партнер клуба
Видимо потому что тут подсветка неправильная. =)
Все просто - наследование, аналогия для block = метод класса.

Я объяснял за 10 минут.

В твоем способе так и не понял, как повторить то же самое.
 

Wicked

Новичок
fixxxer
я правильно понимаю, что вместо parent вставится текст оригинального блока, но с переопределенным блоком title (будет: "domain.com: Title of this page"), а за ним доставятся <link> и <style>?
 

Fortop

Новичок
HraKK
Задача вью не только обрабатывать данные, а и _главное_ хранить их и передавать между контроллерами.
Ух ты господи...
А где про такое прочитать можно? Я концепцию как-то уловил смутно, почему View должно еще что-то хранить и передавать?
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
Автор оригинала: HraKK
Необходимость есть, чтоб проекскейпить данные не в шаблоне, а во вью.


Задача вью не только обрабатывать данные, а и _главное_ хранить их и передавать между контроллерами.


Потому что PHP Native с грамотной архитектурой хватает за уши.
Если не хватает, ищи проблему в архитектуре.
Насколько я понимаю у тебя четырех компонентный подход, Модель, Контроллер, Вид, ну и шаблон в этом случае тебе действительно хватит нативного шаблонизатора. У меня Модель, контроллер + шаблон, ввиду этого и возникает потребность в использовании форматирования данных в шаблоне, я не вижу смысла во вью так-как модель+контроллер способны решить все.

На этом можно и остановиться про архитектуру.

Т.е. твой основной аргумент отказа от компиляции php в php, в том, что теперь это у тебя делает вид?

-~{}~ 18.02.10 09:30:

Автор оригинала: HraKK
Круто, как ваши верстальщики ноги не ломают, раз даже я что делают эти шаблоны я не понял.
Так что буду ходить к гадалке.
PHP:
<head>
<title><?=$title;?>
    <link rel="stylesheet" href="<?=$basepath;?>/css/extra-for-this-page.css" />
    <script type="text/javascript" src="<?=$basepath;?>/js/extra-for-this-page.js"></script>
</head>
<?=$Page->content;?>
<?=wInclude::template('/layouts/base.tpl'); // просто запускает новый рендер с шаблоном указанным и текущим View и возвращает вывод.?>
Сообственно, поддерживаю идею на 100% что все это можно сделать на натив пхп без проблем + если использовать прекомпиляцию пхп то можно избавиться от (с моей точки зрения) компонента вид.

Что касается виджетов, то возможно это косвенно и смарти, собственно из-за того, что в смарти через неимовреный изврат это делается, возникла такая реализация, но те-же самые верстальщики в состоянии исправить дизайин в одном месте и вставить вполне понятный код в шаблон.

Интересно что проще добавить к примеру
<table:column ../>
или
<td class='column'><?=htmlspecialchars(...)?></td>
+ организовать цикл по строкам и вывести значения столбцов
 

C_TIGER

Новичок
вот во что выраждается шаблон после компиляции<<
яд на полке стоит =)
 
Сверху