Smarty VS <? print ?>

Духовность™

Продвинутый новичок
nerezus
сам тролль. Методы вынесены в класс, что очень удобно и полезно.

У мня так рисуются формы:

PHP:
selsect: <?
$select = $this->goHelper()->inputSelect('article[article_rubric]', $this->article_rubric);
foreach ($this->article_rubrics_list as $id_rubric => $rubric):
    $select->addOption( $this->goHelper()->inputOption($id_rubric, $rubric->rubric_name) );
endforeach;

echo $select->getHtml();?>
PHP:
<tr>
  <td>input text: <?=$this->goHelper()->inputText('article[article_url]', 
$this->article->article_url, 
array('class'=>'textLarge', 'maxlength'=>255))->getHtml()?>
  </td>
</tr>
 

nerezus

Вселенский отказник
triumvirat вот насколько это полезно, попробуй верстальщику объяснить.
Мой верстальщик не видит разницы в сложности php/смарти, но вот такой код в шаблонах он точно делать не будет.
 

korchasa

LIMB infected
Каждый год одно и то же, с одинаковыми аргументами. Не надоедает?
 

Духовность™

Продвинутый новичок
nerezus
Я за последний год работал с двумя верстальщиками и у всех их была оличительная способность - они умели делать крутые штуки на jQuery и нефига не знали JS. Пародоксально? Да нет. Просто более высшая абстракция не обязывает знать низшую. Поэтому я не вижу ничего сложного,что бы научить верстальщика КО-ПИ-ПАС-ТИТЬ коды типа
PHP:
<?=TemplFilters::mySuperFilter($templ['my_var']); ?>
или
<?=mySuperFilter($my_super_var)?>
или
<?=$this->goHelper()->inputText('article[article_url]',
$this->article->article_url, 
array('class'=>'textLarge', 'maxlength'=>255))->getHtml()?>
Но откровение заключается в том, что верстальщик почти не сталкивается с програмированием и логкой вида. Верстальщик отдает верстку прораммисту, который и натягивает её на формат своей системы.

Так что идите вы все в попу со своими верстальщиками, которые боятся самописных хелперов на PHP, но от рождения знают как работать со Смарти.
 

nerezus

Вселенский отказник
triumvirat
у меня верстальщик работает с PHP, но шаблон выглядит гораздо понятнее, если хелпер - функция.
 

cDLEON

Онанист РНРСlub
triumvirat
жесть. а чем ваша конструкция отличается от обычного html?
Зачем здесь ещё и ПХП тягать? о_О
 

AmdY

Пью пиво
Команда форума
triumvirat
мифический верстальщик здесь ни причём, это полумифический фактор годный максимум для 1-го процента проекта. это ещё в прошлых флеймах выяснили, потому синтаксис не важен. вот я бы если бы писал твой шаблонизатор сделал бы на свой манер.
<?=$this->getFilters()->mySuperFilter($this->my_var);?>

<?$this->getForm()->begin($this->form)?>
<?=$this->getForm()->error('article_url')?>
<?=$this->getForm()->label('article_url')?>: <?=$this->getForm()->field('article_url')?>
<?$this->getForm()->end()?>

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

Духовность™

Продвинутый новичок
cDLEON
Тем, что это код на PHP, а не HTML :)

Формы рисовать руками довольно утомительно. Это касается и необходимости делать htmlspecialchars, и делать selected значения в зависимости от значение по дефолту. В конце-концов, пр работе с формами хочется какой-то структурированности и инструментов, облегчающих жизнь при написании форм.

Я написал сырую версию хелперов на базе расширения SimpleXML, которые формируют элементы форм HTML. Они имеют ОО-интерфейс, возможность ругаться на недопустимые символы в именах идентификаторов, на недопустимые атрибуты (strict режим), а также абстрагируют разработчика от тривиальных операций, как вышесказанных htmlspecialchars и сравнение на selected.

Вот пример такого решения.
Базовый класс Html_Element - http://phpclub.ru/paste/index.php?show=2313
Класс Html_Element_Input - http://phpclub.ru/paste/index.php?show=2314
Класс Html_Element_Select - http://phpclub.ru/paste/index.php?show=2315

как вызывается - вы видели выше.
 

AmdY

Пью пиво
Команда форума
мона делать так
PHP:
<tr> 
  <td>input text: <?=$this->goHelper()->inputText('article[article_url]', $this->article->article_url) class="textLarge" maxlength="255"?>[b]>[/b] 
  </td> 
</tr>
тоесть хелпер строит не весь тег, чтобы можно было добавить атрибуты.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
(задумчиво) а что тогда называют "спагетти"?
 

korchasa

LIMB infected
grigori
+1

*
Зачем вам шаблонизатор, если вы не пытаетесь им допилить html?
 

cDLEON

Онанист РНРСlub
triumvirat
Откровенно говоря - хрень какая то....
В каком месте у вас получилось сделать создание формы "не утомительно" ? С селектами справляется обычный шаблон "хелпер".
 

Духовность™

Продвинутый новичок
С селектами справляется обычный шаблон "хелпер".
блин, что ты докопался как пьяный до радио?

Что в твоем понимании значит "обычный шаблон хелпер"? Я как раз и продемонстрировал то, как должен выглядеть хелпер для select-a. Если вас пугает навороченность хелпера, то я объясню: хелпер для построения html должен быть реализован в стиле DOM. А не тупо функцией make_select(), ибо как показывает практика, ситуации бывают разные. Иногда надо сделать optgroup, иногда присвоить отдельному option какие-то уникальные аттрибуты и т.д. т.п.

Поэтому я и решил создать набор классов для построения элементов html-форм на базе ОО-модели. А для удобства сделал хелперы абстракцией выше. Т.е. если в сыром виде построение select-a с двумя options выглядит так:

PHP:
$select = new Html_Element_Select();
$select->name = 'user_ban_select';
$select->setCheckedValue($checked_value);

$option = new Html_Element_Option();
$option->value = 1;
$option->setText('да');
$option->setData(array('style'=>'color:red'));

$select->addOption($option);

$option = new Html_Element_Option();
$option->value = 0;
$option->setText('нет');
$option->setData(array('style'=>'color:green'));

$select->addOption($option);

echo $select->getHtml();
то конечный хелпер для большинства ситуаций реализуется в таком виде:

PHP:
    <tr>
        <td><strong class="compulsory">Зобанить:</strong></td>
        <td>
        <?
        // метод вида goHelper() - аббревиатура от Get Object Helper
        $select = $this->goHelper()->inputSelect('user_ban_select', $checked_value);
        $select->addOption( $this->goHelper()->inputOption(1, 'да', array('style'=>'color:red')) );
        $select->addOption( $this->goHelper()->inputOption(0, 'нет', array('style'=>'color:green')) );
        echo $select->getHtml();
        ?>
        </td>
    </tr>
тут пока мы не сделали $select->getHtml() мы имеет объект $select, который содержит в себе 2 объекта option и которые мы можем вертеть программно как нам заблагорассудится - удалять и добавлять option-ы, атрибуты, всё что угодно. Это напоминает DOM и BOM в JavaScript,только самописное и заточеное под конкретные задачи - написание элементов форм средствами PHP и интерфейсом, интуитивно понятным любому, кто работал с объектной моделью документа .
 

tf

крылья рулят
<tr>
<td><strong class="compulsory">Зобанить:</strong></td>
<td>
<?
// метод вида goHelper() - аббревиатура от Get Object Helper
$select = $this->goHelper()->inputSelect('user_ban_select', $checked_value);
$select->addOption( $this->goHelper()->inputOption(1, 'да', array('style'=>'color:red')) );
$select->addOption( $this->goHelper()->inputOption(0, 'нет', array('style'=>'color:green')) );
echo $select->getHtml();
?>
</td>
</tr>
это не шаблон, это каша
и если я хочу обработать значения формы, узнать значение, проверить на допустимость (неизвестные значения не нужны)
мне опять описывать где-то форму?
 

Духовность™

Продвинутый новичок
tf
Активист
что значит "описывать где-то форму"? в чем сложность вы увидели?

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