PHP: про eval и его друзей :-)

Crazy

Developer
Автор оригинала: tony2001
по большому счету мне все равно как у тебя это реализовано.
ты спросил что мне не нравится в этом подходе - я попытался объяснить.
Насколько я понял, твое описание свелось к тому, что ты все переменные данные формируешь там, где обрабатывается логика. И в шаблонах тебе достаточно простой макроподстановки. Что я упустил? :)
 

tony2001

TeaM PHPClub
>Именно. А отдельная спецификация согласует их действия.
спецификация как раз объединяет.
а общение между ними - необходимо.
 

Crazy

Developer
Автор оригинала: tony2001
>Именно. А отдельная спецификация согласует их действия.
спецификация как раз объединяет.
Не вижу разницы.

а общение между ними - необходимо.
В моем варианте -- нет. Полезно. Но не необходимо.
 

tony2001

TeaM PHPClub
>Насколько я понял, твое описание свелось к тому, что ты все
>переменные данные формируешь там, где обрабатывается
>логика. И в шаблонах тебе достаточно простой макроподстановки.
>Что я упустил?
да, примерно так.
это мое понимание шаблонов.
 

Mammoth

Guest
Автор оригинала: Crazy

Отнюдь. Шаблоны -- лишь один из способов формирования представления. Хоть в жестком понимании -- хоть в гибком.
Каие есть еще?

Автор оригинала: Crazy
Ok. Я вижу, мы действительно готовы перейти к более забавным примерам. Итак, начнем усложнять:

Код:
<table border=1>
  <tr valign=top>
    <td>Foo</td><td rowspan=8>Some comment</td>
  </tr><tr>
    <td>Bar</td>
  </tr><tr>
    <td>Buzz</td>
  </tr><tr>
    <td>Quixx</td>
  </tr><tr>
    <td>---</td>
  </tr><tr>
    <td>111</td>
  </tr><tr>
    <td>222</td>
  </tr><tr>
    <td>333</td>
  </tr>
</table>
Мы видим здесь две последовательности, записанные в левой колонке и разделенные отдельной строкой. Справа -- единая колонка с некоторым текстом.

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

ПХП-файл:
...
$cnt=array("Foo", "Bar", "Buzz", "Quixx", "---", "111", "222", "333");
...

Шаблон:

{section name=i loop=$cnt}

{if $smarty.section.cnt.first}

<table border=1>
<tr valign=top>
<td>{$cnt}</td><td rowspan=8>Some comment</td>
</tr>

{else}

<tr>
<td>{$cnt}</td>
</tr>
{/if}

{if $smarty.section.cnt.last}
</table>
{/if}

{/section}


В свою очередь хотелось бы увидеть, Crazy, как ты будешь реализовывать на своем енджине _смешные_ (тм) примеры. Ну и этот для сравения приведи.

Жду более нетривиальных примеров.
 

tony2001

TeaM PHPClub
>В моем варианте -- нет. Полезно. Но не необходимо.
а аргументы у тебя есть ?
почему ты так решил ?
 

Mammoth

Guest
Автор оригинала: Crazy

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

Автор оригинала: Crazy
Именно. А отдельная спецификация согласует их действия.
 

Mammoth

Guest
Автор оригинала: tony2001
м-дя...
нет, Смарти не для меня..
Если пошла такая пьянка, неплохо бы было посмотреть и на то как ты решил данный примерчик...
 

tony2001

TeaM PHPClub
>Если пошла такая пьянка, неплохо бы было посмотреть и на то как ты решил данный примерчик..
http://tony2001.narod.ru/crazy/
пару минут подождите, у меня ФТП тормозит =(
 

Mammoth

Guest
Автор оригинала: tony2001
>Если пошла такая пьянка, неплохо бы было посмотреть и на то как ты решил данный примерчик..
http://tony2001.narod.ru/crazy/
пару минут подождите, у меня ФТП тормозит =(
Понятно... По мне лучше Smarty. В данном случае я согласен с Crazy: тут имеет место быть ситуация, когда в "код" (код логики) засунут дизайн.
 

Crazy

Developer
Автор оригинала: Mammoth
$cnt=array("Foo", "Bar", "Buzz", "Quixx", "---", "111", "222", "333");
Шеф, ты решаешь не поставленную задачу, а некоторую другую. Я говорю не об одной последовательности, а о двух:

PHP:
$data1=array("Foo", "Bar", "Buzz", "Quixx");
$data2=array("111", "222", "333");
И второе: длина поселдовательностей может быть разной. Не обязательно дважды по четыре элемента. так что '<td rowspan=8>' -- не проходит.

Так каким же будет решение?
 

tony2001

TeaM PHPClub
Crazy:
не понял разницы.
ты не умеешь обьединять массивы в ПХП ?
 

Crazy

Developer
Автор оригинала: tony2001
>Если пошла такая пьянка, неплохо бы было посмотреть и на то как ты решил данный примерчик..
http://tony2001.narod.ru/crazy/
Mammoth, Вот как раз это я и называю "кусочным кодом". Т.е. в данном случае не просто формирование представления засунуто в PHP-файл, но и HTML-код разделен на фрагменты "как удобнее программисту" оставляя за бортом удобство верстальщика.

Вот именно поэтому шаблонные энжины такого рода я всегда сразу исключаю из рассмотрения. Но, разумеется, потребности у всех разные и истина у каждого своя. :)
 

Crazy

Developer
Автор оригинала: tony2001
Crazy:
не понял разницы.
ты не умеешь обьединять массивы в ПХП ?
А при чем здесь PHP? Ты же против использования PHP в шаблонах? :)

Как раз в моем случае это проблемы не составляет. А вот решение средствами шаблонного энжина -- это то, что я хочу увидеть. Решение в твоем стиле я полагаю, уже знаю: в логическом модуле слить данные. Но это как раз то действие, ради исключения которого и создаются шаблонные энжины -- чтобы отделить логику от представления.
 

tony2001

TeaM PHPClub
>Понятно... По мне лучше Smarty. В данном случае я согласен с Crazy: тут имеет место быть ситуация, когда в "код" (код логики) засунут дизайн.
по-моему все четко - контент, генерируемый кодом, - отдельно, дизайн - отдельно.
 

Crazy

Developer
tony2001, как я уже сказал, терминологическая пропасть даже глубже чем "использовать ли PHP в шаблонах". Основополагающие понятия -- данные и представления -- ты и я понимает по-разному. И мне кажется, что восприятие Mammoth все же ближе к моему. Это, разумеется, не повод для решения вопроса голосованием. Это повод четче обозначить наши позиции по этому основному вопросу.

Верно?
 

tony2001

TeaM PHPClub
>А при чем здесь PHP? Ты же против
>использования PHP в шаблонах?
ты путаешь что-то.
одна колонка, значит очень удобно будет объединить все в один массив.
как это работает - верстальщика, дизайнера и всех остальных не касается.
объединяешь два массива в один и аналогично.

>Т.е. в данном случае не просто
>формирование представления засунуто в
>PHP-файл, но и HTML-код разделен на
>фрагменты "как удобнее программисту"
>оставляя за бортом удобство верстальщика.
по твоему мнению было бы удобнее вставлять в страницу код типа того, что привел Mammoth ?
а там ХТМЛ не разбит на куски ?
где и что там может понять человек, знающий только ХТМЛ ака верстальщик ?
предупреждая встречный вопрос:
у меня: 3 комментария и верстальщик уже знает "что в чем".
в случае со Смарти еще и в коде Смарти надо понимать...
 

tony2001

TeaM PHPClub
Ок.
давайте определимся.
я считаю данными - ПХП код,
а представлением - ХТМЛ код с вставками переменных.
остальные "представления" (Смарти например) имхо представлениями как таковыми не являются, т.к. включают в себя вставки псевдо-кода, т.е. обработку данных.
Я не прав ?
 

Crazy

Developer
Автор оригинала: tony2001
одна колонка, значит очень удобно будет объединить все в один массив.
как это работает - верстальщика, дизайнера и всех остальных не касается.
объединяешь два массива в один и аналогично.
Минуточку. КТО объединяем массивы? Верстальщик? Он не может, у него только шаблоны с единственной функцией -- макроподстановкой.

Тот, кто кодит логику? А он не ясновидящий, чтобы заранее угадать, что дизайнер захочет вывести это в одной колонке, а не в двух соседних.

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

по твоему мнению было бы удобнее вставлять в страницу код типа того, что привел Mammoth ?
Да.

а там ХТМЛ не разбит на куски ?
Там весь HTML в одном файле. И логический порядок кода вроде как не нарушен. Я что-то упустил?

где и что там может понять человек, знающий только ХТМЛ ака верстальщик ?
На эту тему я уже писал выше. Не вижу смысла повторяться.

предупреждая встречный вопрос:
у меня: 3 комментария и верстальщик уже знает "что в чем".
Откуда? Из четко расписанного и согласованного ТЗ, где учтено все включая особенности верстки в HTML?

в случае со Смарти еще и в коде Смарти надо понимать...
30 минут времени на обучение. Если туповатый верстальщик -- три дня. Вполне можно оплатить такую потерю времени за счет фирмы.
 
Сверху