Возможно ошибка в wa()->getResponse()->addCss() при использовании в плагине доставки Есть решение

Разрабатываю плагин доставки. Понадобилось подключить собственные js и css в <head> на странице корзины. Для этих целей решил использовать wa()->getResponse(). Код следующий:

protected function calculate()
{
    ...........................

    $response = wa()->getResponse();
    $full_plugin_url = wa()->getConfig()->getRootUrl(true).'wa-plugins/shipping/myplugin';
    $response->addJs("{$full_plugin_url}/js/myplugin_front.js");
    $response->addCss("{$full_plugin_url}/css/myplugin_front.css");

}

Добавление js в "<head>" страницы происходит корректно, а css нет.

Естественно, файл css по указанному пути присутствует.

Я также проверил, что метод "->addCss()" формирует код с корректной ссылкой.

waResponse object {
  *headers => array(
    'Cache-Control' => 'no-store, no-cache, must-revalidate',
    'Expires' => 'Tue, 20 Mar 2018 19:35:09 GMT',
  )
  *status => NULL
  *metas => array(
    'title' => 'Корзина',
  )
  *js => array(
    0 => 'http://mysite/wa-plugins/shipping/myplugin/js/myplugin_front.js',
  )
  *css => array(
    0 => 'http://mysite/wa-plugins/shipping/myplugin/css/myplugin_front.css',
  )
  *google_analytics => array()
}

Это баг, или я где-то ошибся?

Возможно не лучшая идея пытаться подключить js и css через метод calculate() плагина, но тогда как это сделать, чтобы css и js подключались через код плагина и только на странице корзины? Хуки shop-script в системных плагинах доставки не работают...

К слову, сейчас решил проблему при помощи динамического подключения css через js. Как я написал выше, метод "->addJs()" отрабатывает корректно.

P.S. Установлены все текущие обновления фреймверка Webasyst и приложения Shop-Script 7.

4 ответа

  • 3
    Syrnik.com 21 марта 2018 05:27 #

    не надо так делать

  • 1
    info@ravencode.ru 21 марта 2018 06:28 #

    У меня addJs\addCss корректно работает только в обработчике хуков вроде https://developers.webasyst.ru/hooks/shop/frontend...

    • +1
      DES DES 21 марта 2018 11:49 #

      В плагинах доставки, к сожалению, нельзя использовать хуки shop-script...

  • 1
    Михаил Ушенин Webasyst 21 марта 2018 09:21 #

    Что вы понимаете под "страницей корзины"? Страницу выбора способа доставки?

    • +1
      DES DES 21 марта 2018 11:47 #

      Да, но здесь забыл ещё уточнить, что для корзины используется плагин "Заказ на одной странице"

      https://www.webasyst.ru/store/plugin/shop/onestep/

      По идее, плагин не должен влиять. Метод "addCss()" должен добавлять тэг <link href="....." rel="stylesheet" type="text/css"> прямо в <head> страницы, верно? А этого не происходит, когда данный метод вызывается из метода "calculate()" плагина доставки. А вот метод "addJs()" отрабатывает корректно.

      • +2
        Genasyst Genasyst 21 марта 2018 11:53 #

        Не надо так делать! Подключайте инлайном через кастомные поля!

      • +3
        Михаил Ушенин Михаил Ушенин Webasyst 21 марта 2018 12:54 #

        Добавьте подключение файлов на странице выборе способа доставки с помощью дополнительных полей.

        • +1
          DES DES 21 марта 2018 23:58 #

          Ок. Сделаю через доп. поля.

          На счёт "возможной ошибки" подключения css. Всё оказалось проще. Ошибки никакой нет. В index.html установленного шаблона отсутствовало это самое подключение:css. То есть не было кода:

          {$wa->css()}

          Я так понимаю, в методе calculate() плагина доставки нежелательно использовать методы addJs и addCss по той причине, что они постоянно будут дёргаться при обращении к плагину через ajax после смены региона?

          При первом заходе в корзину отрабатывает метод calculate() плагина и в head сайта нормально прописываются добавленные через addJs и addCss файлы...

          Данный плагин разрабатывается под конкретный сайт. Загрузка способа доставки будет всегда сразу при заходе в корзину. Поэтому, наверное, здесь можно оставить и так, как уже сделано.

          Но если способ доставки при первом заходе в корзину для региона не доступен, а появляется только потом после смены региона через ajax, то да, методы addJs и addCss здесь, видимо, бесполезны.

          Всех благодарю за ответы.

          • +1
            Syrnik.com Syrnik.com 22 марта 2018 00:54 #

            если под конкретный сайт и дизайн, то проблем нет.

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

  • 1
    DES 22 марта 2018 01:04 #

    Задам сразу здесь же вопрос. Можно ли получить в методе calculate() цифровой идентификатор плагина доставки? Если можно, то как?

    Речь идёт о цифре, которая прописывается, например, в

    <input type="radio" id="delivery_23" name="shipping_id" value="23" class="radio-standart">

    Как получить эту цифру "23" в методе calculate()?

    Через $this->getSettings() и $this->getId() данный идентификатор не передаётся.


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

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