Переопределение стандартного роутинга

Нужно через плагин переопределить стандартный роутинг магазина. 

К примеру роутинг категорий.

Перечитал кучу тем на форуме. Испробовал все советы. Не помогает. Пробовал и через routing.php и через хук routing, правила просто игнорируются.

Полез в кишки WA и магазина и обнаружил, что роутинг цепляется. Если вызывается через хук, все срабатывает, кроме правил.

Если правила отличаются  от правил в routing.php магазина, все ок. Но если я хочу переопределить например category/<category_url>/, то правило просто игнорируется. 

В классе shopConfig в методе getRouting такие правила затираются 

$routes = array_merge($all_plugins_routes, $routes);

что нам говорит мануал PHP 

Если входные массивы имеют одинаковые строковые ключи, тогда каждое последующее значение будет заменять предыдущее.

т.е. имеем в $all_plugins_routes правило category/<category_url>/, которое затирается правилом в $routes.

Если поменять на 

$routes = array_merge($routes, $all_plugins_routes);

все отлично работает.

Не понимаю это так специально сделано? Или я чего то не до понял?

2 ответа

  • 1
    Eugen Nichikov 28 августа 2019 14:44 #

    Если без плагина, нужно скопировать файл routing.php в wa-config/apps/shop/routing.php и там изменять.

    Если с плагином, то можно это же сделать программно.

    P.S. СЕО-фильтры от Bodysite не будут работать.

    • +1
      Markus Markus 28 августа 2019 14:48 #
      Если с плагином, то можно это же сделать программно.

      Не подскажете? Но только так, чтобы дефолтовый экшен не вызывался

  • 1
    Syrnik.com 28 августа 2019 15:20 #

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

    • +1
      Markus Markus 28 августа 2019 15:49 #

      Мне не для маркета.

      Нужно чтобы дефолтовый экшен не вызывался.

      вариант свой роутинг в wa-config/apps/shop/routing.php справляется с задачей.

      Полулегальный способ есть, даже не один.

      Какой например, только с вышеизложенным условием.

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

      Тогда почему в многочисленных темах на эту тему от саппорта ни слова о том, что переопределять стандартные правила роутинга нельзя?!

      Syrnik.com, последний вопрос, собственно, не Вам, а саппорту

      • +1
        Syrnik.com Syrnik.com 29 августа 2019 00:03 #

        1. ловить хук routing. только через него не добавлять надо, а вызывать свой обработчик и вызывать die(). 

        2. в /lib/custom засунуть кастомизированный экшен

        • +1
          Markus Markus 29 августа 2019 10:31 #

          Это уже реальные костыли. Тогда уж 

          свой роутинг в wa-config/apps/shop/routing.php

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

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