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

Crazy

Developer
В данном случае имелся в виду код шаблона. Т.е. то, с чем работает верстальщик.
 

Mammoth

Guest
2Crazy:
Мне уже стало интересно. У тебя, видимо, имеется опыт работы с темплейтными энжайнами, работающими по "кусочному" принципу и работающими по принципу "вставки данных"? Не можешь разъяснить вот это подробнее:

Автор оригинала: Crazy
Мне, если честно, смесь кода PHP и HTML мешает. Но жесткие ограничения мешают больше. :)
 

tony2001

TeaM PHPClub
говоря о потере смысла я имел ввиду то, что теряется самое главное преимущество темплейтов (точнее даже два):
- "переносимость" (сейчас объясню)
- верстальщику необходимо теперь знать синтаксис ПХП.

что я подразумеваю под переносимостью:
есть у меня шаблон, точнее был. сделал я новый, наверстал, повставлял в разных местах там %var% (или {var} - не принципиально), положил на место старого и получил ТО ЖЕ САМОЕ, только с другим внешним видом.
в случае с "кусочничанием":
беру старый шаблон, долго разбираюсь че там за код и не перестанет ли она работать после того, как я поправлю его в нужном месте, переписываю весь ХТМЛ вокруг этого кода (я под кодом имею ввиду что-то посложнее <?=$var?>) и потом задаю кучу вопросов в форуме типа "как мне распарсить один шаблон без его мгновенного вывода?", пользуюсь ob_start etc., вместо того, чтобы взять нормальный движок шаблонов и забыть обо всем этом, как о страшном сне.
хау.
я все сказал.
 

Crazy

Developer
- верстальщику необходимо теперь знать синтаксис ПХП.
В противном случае ему нужно знать синтаксис языка макросов шаблонов. Принципиально это ничего не меняет -- разница количественная.

наверстал, повставлял в разных местах там %var% (или {var} - не принципиально), положил на место старого и получил ТО ЖЕ САМОЕ, только с другим внешним видом.
Что изменится, если вместо "%var% там будет написано <?= $var ?> ?

(Или мы таки о разном?)
 

tony2001

TeaM PHPClub
>В противном случае ему нужно знать синтаксис языка макросов шаблонов.
если вы подразумеваете под "языком" конструкцию типа %var%, то я думаю, что она чуть проще, чем
PHP:
<?
if ($var) {
?>
<html>
<?
}
else
{
?>
</html>
<?
}
?>
таки о разном
 

Crazy

Developer
Шеф, ты сравниваешь несравнимое. Или у тебя %var% имеет ту же семантику, что и приведенный код на PHP?

Кстати, ты не ответил на вопрос про "что изменится". Так что изменится?
 

tony2001

TeaM PHPClub
>Шеф, ты сравниваешь несравнимое.
Ой, очень сравнимое.
У меня за некоторыми %var% стоят килобайты ХТМЛя БЕЗ всяких ob_start и т.п. Причем результирующий ХТМЛ может содеражть так же шаблоны (оп-па), которые я парсю ПОСЛЕ этого.

>Кстати, ты не ответил на вопрос про "что изменится". Так что изменится?
обьясняю.
изменится реакция на несоблюдение синтаксиса.
при написании %var ничего критичного не произойдет.
однако <?=var?> - это уже parse error, который надо вдолбить в голову верстальщику.
 

vano

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

<skip>

Далее: я не вижу принципиальной разницы для верстальщика, какой синтаксис макросов он будет использовать: {foobar} или <?= $foobar ?>. Но во втором случае он автоматически получает большу гибкость в формировании ПРЕДСТАВЛЕНИЕ. Например -- он может по СВОЕМУ усмотрению (не дергая реализатора логики) заставить foobar отображаться в верхнем регистре.
<td id="up"> поможет верстальщику. Но то, что предлагается как плюс(весьма сомнительный) для верстальщика - это уже разрушение идеи разделения кода и шаблонов.
 

Crazy

Developer
Автор оригинала: tony2001
>Шеф, ты сравниваешь несравнимое.
Ой, очень сравнимое.
У меня за некоторыми %var% стоят килобайты ХТМЛя
Однако семантика все равно принципиально разная. В одном случае -- подстановка готового кода. На котьорый верстальщик никак не воздействует.

В другом -- предоставление верстельщику принципиально более мощного инструмента. Вполне логично, что более мощные средства требуют более сложного синтаксиса.

Но вот когда ты приведешь для сравнения с этим PHP'шным кодом полностью эквивалентную с точки зрения функционала конструкцию на языке шаблонов -- тогда и можно будет сравнивать.

однако <?=var?> - это уже parse error, который надо вдолбить в голову верстальщику.
У меня сложилось впечатление, что вепстальщики не самые тупые люди. Если человек держит в голове кучу правил по верстке под разные браузеры, то еще одно правило его не перегрузит.
 

Crazy

Developer
Автор оригинала: Mammoth Непонятна фраза: ..."но жесткие ограничения мешают больше"...
Большинство "шаблонных" технологий (в жестком понимании этого термина) сильно ограничивают возможность манипулировать представлением.

Например, я хочу вывести число, хранящееся в {NUM}, с разбивкой на тысячи неразрывным пробелом.

Или хочу вывести фамилию в верхнем регистре.

Или раскрасить все отрицательные суммы красным цветом.

Или вывести таблицу с чередованием фона строк.

Во всех виденных мной шаблонных движках практически все эти ТРИВИАЛЬНЫЕ задачи вызывали проблемы.
 

Crazy

Developer
Автор оригинала: vano

<td id="up"> поможет верстальщику. Но то, что предлагается как плюс(весьма сомнительный) для верстальщика - это уже разрушение идеи разделения кода и шаблонов.
Покажи как такими средствами решить ВСЕ поставленные выше примеры задач.
 

vano

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

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

Кстати, у нас(yp.ru) вот все на шаблонах делается, и верстальщикам прекрасно хватает предоставляемых им возможностей. А мне и своих багов хватает, чтобы еще быть ответственным за баги, которые наплодит верстальщик.

PS: У вас там что, на отдельного верстальщика денег нету?

PPS: Обычному верстальщику и своих забот хватает. Сдается мне, у вас на него слишком много не его обязанностей накладывают.
 

tony2001

TeaM PHPClub
>Большинство "шаблонных" технологий (в жестком понимании
>этого термина) сильно ограничивают возможность
>манипулировать представлением.
вероятно ты не совсем понял.
шаблоны как раз для этих задач и сделаны.

>Например, я хочу вывести число, хранящееся в {NUM}, с
>разбивкой на тысячи неразрывным пробелом.
это в коде реализуется.

>Или хочу вывести фамилию в верхнем регистре.
strtoupper(); ?
в коде.

>Или раскрасить все отрицательные суммы красным цветом.
в коде или в шаблоне (<font color="%color%">%text%</font>), при выводе - присваиваем значение %color% и все.

>Или вывести таблицу с чередованием фона строк.
ха-ха.

>Во всех виденных мной шаблонных движках практически все
>эти ТРИВИАЛЬНЫЕ задачи вызывали проблемы.
Crazy - твои задачи просто _смешны_.
Ну подумай сам - если шаблонами это не решается, то зачем они нужны ? Для понту ?
Если тебе нужны реальные примеры - в приват или на мэйл пиши, нарисую тебе то, как я решаю такие задачи со своими шаблонами.
 

Mammoth

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

Большинство "шаблонных" технологий (в жестком понимании этого термина) сильно ограничивают возможность манипулировать представлением.

Например, я хочу вывести число, хранящееся в {NUM}, с разбивкой на тысячи неразрывным пробелом.

Или хочу вывести фамилию в верхнем регистре.

Или раскрасить все отрицательные суммы красным цветом.

Или вывести таблицу с чередованием фона строк.

Во всех виденных мной шаблонных движках практически все эти ТРИВИАЛЬНЫЕ задачи вызывали проблемы.
Наверное мне повезло, и я сразу сел за изучение Smarty. По крайней мере не буду врать - сравнивать этот энджайн мне не с чем. Но те примеры, которые ты привел, относительно него абсолютно беспочвенны. Приведу примеры:

// хочу вывести фамилию в верхнем регистре.
{$last_name | upper_case}

// хочу вывести число, хранящееся в {NUM},
// с разбивкой на тысячи неразрывным пробелом.
{$NUM | thousands_spacify} // используем рукописный модификатор

// хочу раскрасить все отрицательные суммы красным цветом.
{$NUM | colorize_negative} // используем рукописный модификатор

// хочу вывести таблицу с чередованием фона строк.
{section name=customer loop=$custid}
{if $smarty.section.customer.first}
<table>{cycle values="#eeeeee, #d0d0d0" print="False"}
{/if}
<tr bgcolor={cycle}><td>{$smarty.section.customer.index} id:
{$custid[customer]}</td></tr>
{if $smarty.section.customer.last}
</table>
{/if}
{/section}

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

Жду следующих невыполнимых ТРИВИАЛЬНЫХ задач.
 

Crazy

Developer
Автор оригинала: vano

Приятель, ты когда-нибудь поддержкой кода, написанного через задницу, занимался?
Мсье путает гибкие шаблоны и "код через задницу". Это разные вещи.

Но это все лирика. Ты не ответил на поставленный вопрос.

Итак?
 

Crazy

Developer
Автор оригинала: tony2001
шаблоны как раз для этих задач и сделаны.
Для этих. Но в очень ограниченнгом виде.

>Например, я хочу вывести число, хранящееся в {NUM}, с
>разбивкой на тысячи неразрывным пробелом.
это в коде реализуется.
Т.е. ты предлагаешь засунуть в код задание ПРЕДСТАВЛЕНИЯ? Хм... Что там чуть выше писали о поддержке кода? :)

(остальное поскипано, дабы не повторяться)

Crazy - твои задачи просто _смешны_.
Разумеется. Это самые простейшие задачи. В своих ответах ты показал, что согласно твоему пониманию шаблонов реализация всех этих вещей -- связанных именно с представлением -- отдается не верстальщику, а тому, кто кодит логику. Т.е. валим логику и представление в кучу. Это прямой шаг к трудноподдерживаемому коду.

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

Но это я не рассматриваю как распространенную ситуацию.

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

vano

Guest
Crazy, а ты не мог сразу сказать, какие шаблоны ты используешь? Нет, нужно было пустой флейм устроить...

ps: имхо тему пора закрывать
 
Сверху