LINUX.ORG.RU

Перенос приложения php-5.2.0/smarty-2.6.9 на 5.6.30/3.1.21

 


1

1

Для обратной совместимости изменил вызов Smarty:

require("/usr/share/php/smarty3/SmartyBC.class.php");
$smarty = new SmartyBC;
Приложение использует в шаблоне тег {php}:
{php}
$this->assign("years", array("2016",
"2017",
"2018"));

$this->assign("months", array("01"=>"Jan",
"02"=>"Feb",
"03"=>"Mar",
"04"=>"Apr",
...
Получаю ошибку:
Fatal error: Using $this when not in object context in /usr/share/php/smarty3/SmartyBC.class.php(464) : eval()'d code on line 2

★★

Это просто вин.

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

Сидя на ЯП, изначально являющимся шаблонизатором — выкинуть и не пользовать никаких шаблонизаторов — вот правильный путь.

deep-purple ★★★★★
()

Зачем в шаблоне объявлять переменные? Переменные надо объявлять в нативном коде PHP, и дальше использовать для отображения этим самым шаблоном, который для этого и создан.

Infra_HDC ★★★★★
()
Ответ на: комментарий от deep-purple

выкинуть и не пользовать никаких шаблонизаторов — вот правильный путь

Нет, шаблоны там нужны. Возможно, не стоит использовать вставки php-кода в шаблонах (в smarty3 это исключили), но переписывать работающее приложение не хочется. Надежда на SmartyBC — backwards compatibility wrapper.

Evenik ★★
() автор топика
Ответ на: комментарий от Infra_HDC

Зачем в шаблоне объявлять переменные?

Речь не об этом, а о том, почему SmartyBC не работает.
В шаблоне удобно объявить переменные, которые нигде больше не нужны кроме как в этом шаблоне.

Evenik ★★
() автор топика
Ответ на: комментарий от Evenik

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

Ну а тебе да — расхлебывать все это.

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

deep-purple ★★★★★
()

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

Evenik ★★
() автор топика
Ответ на: комментарий от deep-purple

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

PHP как шаблонизатор достаточно не оптимален. Нет наследования, нет монолитной компиляции, нет изоляции кода. То, что было нормальным в шаблонах конца 1990-х уже в начале нулевых безнадёжно устарело.

Дно достигнуто! Теперь шаблонизатор смарти имплементирует синтаксис шаблонизатора на котором он написан!

С разморозкой. Это «дно» было «достигнуто» лет 17 назад. И возможность использования этого тега всегда выключена по умолчанию.

KRoN73 ★★★★★
()
Ответ на: комментарий от deep-purple

Осуждаю сам факт шаблонизаторов в пхп

Значит, ты используешь шаблоны очень примитивно.

поднять на рассмотрение вопрос выкинуть смарти и переехать на пхп-натив шаблоны

Ряд вещей на них принципиально не сделать. См. выше.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

PHP как шаблонизатор достаточно не оптимален

В каком месте и чем ты мерял?

Нет наследования, нет монолитной компиляции, нет изоляции кода

Все это — переусложненная херь. Загляни в кеш смарти, там же пыховые шаблоны как итог. Значит пыховые шаблоны... правильно — могут во все что ты перечислил, если тебе зачем-то понадобилось этим обмазаться.

С разморозкой

Где ты увидел что я замерзал?

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

Их и нужно примитивно использовать.

Ряд вещей на них принципиально не сделать.

Тебе нужно это гуано только потому, что ты подсел, а не потому что без него не обойтись.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Все это — переусложненная херь.

Ага. И морковка для кого-то — сладость :)

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

Загляни как-нибудь во что превращается код PHP/Ruby/Python при исполнении процессором. Там машинные коды как итог. Значит машинные коды могут... правильно, делать всё, что делают ЯВУ.

Тебе нужно это гуано только потому, что ты подсел, а не потому что без него не обойтись.

Так ты пишешь софт в машинных кодах?

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

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

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Не перегибай

Это лёгкая гипербола, не более.

я про парсинг (в смарти) и интерпретацию в пыхе

Угу. Как и (с меньшей гиперболой) можно рассматривать парсинг Си в машинные коды. Однако, люди предпочитают писать на Си.

Шаблонизация на PHP не обеспечивает множество востребованного даже не сегодня, а уже 15 лет назад функционала. Безусловно, можно всё собрать ручками. Как можно написать, скажем, Web-браузер на ассемблере. Но это столь же затратно, сколь и бесполезно. Для реализации того же наследования шаблонов на PHP или хотя бы монолитной сборки из блоков придётся городить большущий огород обвязок... который и окажется очередным шаблонизатором на PHP :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

парсинг Си в машинные коды

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

Web-браузер на ассемблере

Опять перегиБербола. Если ты скажешь: сделать «что-то» на Qt вместо qt quick, то болемене аналогия, с тем, о чем мы говорим, будет.

Шаблонизация на PHP не обеспечивает наследования, монолит

Мочало. Говорю же, ты просто подсел.

Для реализации...

Если это НЕ БУДЕТ содержать альтернативный синтаксис и парсинг до скармливания в пхп — я обеими руками за. Но, увы, велосипедисты. Они начали делать кофемолку, а закончили роторным экскаватором. И это не си, где сконпелять можно только нужное. Твой шаблонизатор грузится каждый раз, грузит свои плагины, проверяет нет ли в кеше пхп файла, если есть то выводит, если нет то генерит, сохраняет и выводит.

большущий огород обвязок

Вот в шаблонизаторах именно так, не то что огород, а целое поле дрисьни. Повторю — шаблоны должны быть максимально просты и заниматься только выводом (условия, циклы, инклюды) и не использовать жирные надстройки для своей работы — заинклюдил файл и понеслась.

15 лет назад

Нафик были не нужны шаблонизаторы и их толстота. А сейчас уж тем более. Щас вон, хватай vue.js и хренач все прямо в браузере один раз с бекенда прислав ресурсы.

deep-purple ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.