Не возможно использовать в плагине шаблонизатор в хуках frontend_review_add.* Исправлено

5

В хуках:

https://developers.webasyst.ru/hooks/shop/frontend_review_add.after/

https://developers.webasyst.ru/hooks/shop/frontend_review_add.before/

При использования шаблонизатора в плагине на обработке данных хуков:

$view = wa()->getView();

Происходит ошибка в основном контроллере  shopFrontendProductReviewsAddController

Unable to load template file 'review.html' code 0


Ошибка возникает в функции renderTemplate в блоке:

$view = wa()->getView(array('template_dir' => $theme_path)); 
$view->assign($assign); 
return $view->fetch($template);

Однако getView - это фабрика и если поглядеть код глубже:

protected function getFactory($name, $class, $options = array(), ...) {    
    if (isset($this->factories[$name])) {        
        return $this->factories[$name];    
    }

то будет видно что если getView был вызван до этого без параметров, он и будет возвращен и соответсвенно переданные параметры не будут учтены, что и происходит

Просим исправить 

4 комментария

  • +4
    Андрей sverkunov.ru Андрей sverkunov.ru 30 октября 2019 19:42 #

    Когда ожидать исправления?

  • +4
    Андрей sverkunov.ru Андрей sverkunov.ru 24 декабря 2019 19:09 #

    Ждем фикс 4 месяца, чтобы заработал плагин уведомлений об отзывах. Товарищи разработчики, раз «Принято», то когда будет исправлено?

  • +2
    Markus Markus 28 января 2020 10:25 #

    Присоединяюсь. Та же проблема, но не с этим хуком. Вобщем если хук вызывается вместе с

    $view = wa()->getView();

    А после него в экшенах или контролерах вызывается 

    wa()->getView($options);

    передается экземпляр который был создан ранее и параметры этому экземпляру не передаются. У вас же есть в waSmarty3View метод setOptions! Может стоит его расширить.

        public function setOptions($options)
        {
            foreach ($options as $k => $v) {
                $this->options[$k] = $v;
                switch ($k) {
                    case "left_delimiter":
                        $this->smarty->left_delimiter = $v;
                        break;
                    case "right_delimiter":
                        $this->smarty->right_delimiter = $v;
                        break;
                    case "auto_literal":
                        $this->smarty->auto_literal = $v;
                        break;
                    case "template_dir":
                        $this->smarty->setTemplateDir($v);
                        break;
                    case "compile_dir":
                        $this->smarty->setCompileDir($v);
                        break;
                }
            }
        }

    Тогда в shopFrontendProductReviewsAddController renderTemplate

    $view = wa()->getView(array('template_dir' => $theme_path));

    Меняем на 

    $view = wa()->getView();
    $view->setOptions(array('template_dir' => $theme_path));

    и вуаля все работает как надо и контроллер и плагины. 

    Это же 1 минута времени!

  • +1
    Михаил Ушенин Михаил Ушенин Webasyst 23 марта 2020 14:39 #

    Мы выпустили обновление Shop-Script с исправлением этого недочёта. Обновление можно установить в «Инсталлере».

    Проверьте, пожалуйста. Сообщите нам, если проблема сохранилась.

    Добавить комментарий

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