Нет доступа к переменным 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 ответа

  • 1

    can_use_smarty - более чем достаточно для работы.

    if ($this->getConfig()->getOption('can_use_smarty') && $product->description) {
                $product->description = wa()->getView()->fetch('string:'.$product->description);
            }
    

    Но. Компиляция описания продукта происходит до передачи переменной $produc в шаблонизатор.
    Поэтому на момент компиляции $product недоступен. И поэтому общие переменные фрэймворка типа {$wa_app} и прочие работают, а $product нет.
    Нужно перенести вышеуказанный блок в самый конец метода prepareProduct у shopFrontendProduct.action.php. А может даже и перенести в конец execute, ведь там ниже еще куча всего подключается.

    Можно считать это багом и донести эту мысль до Webasyst.

  • 1
    Markus 8 августа 2019 12:36 #

    А может даже и перенести в конец execute, ведь там ниже еще куча всего подключается.

    Кстати если в index.html или любой другой файл который подключается через include объявить глобальную переменную смарти, она не будет доступна в файлах которые подключаются через ($content). Например home.html в магазине

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите