Smarty 5 в DPCMS: что изменилось для разработчиков шаблонов

Главные подводные камни перехода с Smarty 3 на Smarty 5 и как мы это решили в движке DPCMS.

Smarty 5 вышел вместе с PHP 8 — и сразу обнажил несовместимости со старыми шаблонами, написанными ещё в эпоху Smarty 3. В DPCMS мы прошли эту миграцию полностью: ниже — рабочий чек-лист, по которому можно перевести свой проект без сюрпризов в проде.

Что изменилось

  • escape_html=true теперь по умолчанию — в DPCMS отключаем явно в cTemplate, иначе плывут все вёрстки с HTML-вставками.
  • PHP-функции больше не работают как модификаторы из коробки — регистрируем нужные через registerPlugin('modifier', ...).
  • count($var) на null валит фатал в PHP 8 — лечится {$x|default:[]|@count}; для массовой правки используем fix_count_null.pl.
  • Изменилось поведение {capture} и {include} — путь шаблона теперь обязательно с расширением.

Что осталось как было

Синтаксис переменных, циклов и условий не поменялся — миграция в основном про конфигурацию и зарегистрированные плагины. Большинство верстальных шаблонов в DPCMS не пришлось трогать вообще.

COMPONENT "region_detect" NOT FOUND