Нет доступа к переменным Smarty со страницы товара
В продолжение ранее заданного вопроса с новыми подробностями.
Итак:
Сайт в облаке, тема - Дефолт 3.0, can_use_smarty = true
На подстраницах товара код Smarty вполне себе работает, удается получить доступ и вывести нужные переменные.
В описании товара - нет.
Используем {wa_tpl_vars}.
На подстранице, соответственно, получаем список всех необходимых переменных, все замечательно.
В описании товара результат следующий:
'SCRIPT_NAME' => '/index.php', 'frontend_nav' => array(), 'frontend_nav_aux' => array(), 'wa_url' => '/', 'wa_static_url' => '/', 'wa_backend_url' => '/webasyst/', 'wa_app' => 'shop', 'wa_app_url' => '/', 'wa_app_static_url' => '/wa-apps/shop/', 'wa' => waViewHelper object { ** skipped ** }, 'smarty' => NULL,
Вместо подстановки Smarty в описание товара пробовал добавить в шаблон product.html прямой вывод содержимого подстраницы:
{foreach $product.pages as $pagecon} {include file="product.page.html" page=$pagecon} {/foreach}
И получаю код в виде текста, без обработки шаблонизатором.
В тему дизайна радикальных изменений не вносилось, попробовал на "чистой" версии - та же беда.
Для наглядности:
Товар - $product.page выведена перед описанием товара
Подстраница с кодом Smarty
Вопрос остается прежним: каким образом можно "разрешить" вызов переменных из описания товаров?
2 ответа
can_use_smarty - более чем достаточно для работы.
Но. Компиляция описания продукта происходит до передачи переменной $produc в шаблонизатор.
Поэтому на момент компиляции $product недоступен. И поэтому общие переменные фрэймворка типа {$wa_app} и прочие работают, а $product нет.
Нужно перенести вышеуказанный блок в самый конец метода prepareProduct у shopFrontendProduct.action.php. А может даже и перенести в конец execute, ведь там ниже еще куча всего подключается.
Можно считать это багом и донести эту мысль до Webasyst.
Кстати если в index.html или любой другой файл который подключается через include объявить глобальную переменную смарти, она не будет доступна в файлах которые подключаются через ($content). Например home.html в магазине