Активация локализации темы дизайна из плагина

Вопрос возник внезапно.
Из плагина вывожу что-то с помощью page.html шаблона магазина

class shopMyPluginFrontendPageAction extends shopFrontendAction
{
  бла-бла-бла
        $route = wa()->getRouting()->getRoute();
        if ( !empty($route['theme']) ){
            if ($route['theme'] == 'comfortbuy'){
                $this->view->assign('prd_thumbs_tpl', wa()->getDataPath('themes/'.$route['theme'],'shop').'/products.list.html');
            } else {
                $this->view->assign('prd_thumbs_tpl', wa()->getDataPath('themes/'.$route['theme'],'shop').'/list-thumbs.html');
            }
        }
$html = $this->view->fetch($plugin_root.'/templates/actions/frontend/page.html'); $this->view->assign('page', array( 'id' => 'myplugin', 'title' => $page_title, 'name' => $page_name, 'content' => $html, )); $this->setThemeTemplate('page.html'); }
То есть в плагине есть шаблон, внутри которого подключается шаблон темы дизайна для вывода списка продуктов

Всё замечательно, кроме одного. не срабатывает локализация темы дизайна для шаблона списка продуктов.
В принципе понятно почему, но пока не нашел, как заставить её срабатывать.

Как принудительно запускать механизм локализации, чтобы fetch нормально отработал?

8 ответов

  • 2
    Rat 29 декабря 2016 09:58 #

    Может, примерно так, но применительно к приложению: https://support.webasyst.ru/2503/lokalizatsiya/#comment5910.

    И немного офтопика: а если в теме нет файла list-thumbs.html? Я бы сделал настройку в плагине, которая позволит пользователю самому выбрать нужный шаблон для темы выбранного поселения магазина. Тогда и хардкодить не придётся.

    • +1
      Николай Иванов Николай Иванов 29 декабря 2016 10:33 #

      >list-thumbs.html?
      Это не коммерческий плагин. Поэтому там костылей много. Не обращай внимания.

      По решению - пробовал я так, не работает.
      Я так понимаю, что тут другая задача стоит. Не включать временно локализацию плагина, а заставить сработать локализацию приложения/темы дизайна.
      По идее оно бы должно и так работать....но вот поди ж ты. Не работает.




      • +2
        Nichikov Eugen Nichikov Eugen 29 декабря 2016 11:52 #

        Решение должно работать. Нужно отключить локаль плагина до fetch шаблона.

        waSystem::popActivePlugin();

        И, может, её ещё и включать не нужно :) Как писал Леонид,

        Между этими двумя вызовами _wp() и [``] будут брать переводы из локализации плагина yourpluginid приложения shop.

        А вам как раз нужно, чтобы [``] не брало.


        • +1
          Николай Иванов Николай Иванов 29 декабря 2016 18:45 #

          всё верно, если в самом плагине никакой локализации нет, то достаточно и одного push-а.

      • +2
        Rat Rat 29 декабря 2016 11:55 #

        У меня получилось вот так — код из тестового плагина:

        $route = wa()->getRouting()->getRoute();
        $collection = new shopProductsCollection('category/1');
        $products = $collection->getProducts('*');
        
        $products_template = wa()->getDataPath('themes/'.$route['theme'].'/list-thumbs.html', 'shop');
        $this->view->assign(compact('products'));
        
        //я имел в виду вот это waLocale::loadByDomain('shop'); waSystem::pushActivePlugin(null, 'shop'); $template = $this->view->fetch($products_template); waSystem::popActivePlugin(); $this->view->assign(compact('template')); $html = $this->view->fetch(wa()->getAppPath('plugins/test/templates/actions/frontend/page.html')); $this->view->assign('page', array( 'id' => 'myplugin', 'title' => '', 'name' => '', 'content' => $html, )); $this->setThemeTemplate('page.html');
        • +1
          Rat Rat 29 декабря 2016 11:56 #

          Только надо кеш почистить, чтобы сработало. Даже в режиме отладки мне потребовалась чистка кеша, чтобы стала применяться локализация магазина вместо локализации плагина.

        • +1
          Николай Иванов Николай Иванов 29 декабря 2016 18:53 #

          Всё правильно. Работет.
          Как в таком режиме - вставка скомпилировнного list-thumbs.html, так и просто передача имени файла в свой шаблон, а там инклуд...очень странно, что у меня с первого раза не заработало.
          Ну да спишем это на новогодние чудеса, хотя вроде еще отмечать не начал -)

Эта тема в архиве. Добавление комментариев к ней отключено.