Переопределение стандартного роутинга
Нужно через плагин переопределить стандартный роутинг магазина.
К примеру роутинг категорий.
Перечитал кучу тем на форуме. Испробовал все советы. Не помогает. Пробовал и через 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);
все отлично работает.
Не понимаю это так специально сделано? Или я чего то не до понял?
6 ответов
Если без плагина, нужно скопировать файл routing.php в wa-config/apps/shop/routing.php и там изменять.
Если с плагином, то можно это же сделать программно.
P.S. СЕО-фильтры от Bodysite не будут работать.
Не подскажете? Но только так, чтобы дефолтовый экшен не вызывался
Это сделано специально, чтобы сторонние продукты не могли вмешиваться в работу основного скрипта. Полулегальный способ есть, даже не один. Но, подозреваю, шансов быть опубликованным у такого плагина немного. Хотя, опять же, в в маркете есть примеры плагинов, манипулирующие роутингом
Мне не для маркета.
Нужно чтобы дефолтовый экшен не вызывался.
вариант свой роутинг в wa-config/apps/shop/routing.php справляется с задачей.
Какой например, только с вышеизложенным условием.
Тогда почему в многочисленных темах на эту тему от саппорта ни слова о том, что переопределять стандартные правила роутинга нельзя?!
Syrnik.com, последний вопрос, собственно, не Вам, а саппорту
1. ловить хук routing. только через него не добавлять надо, а вызывать свой обработчик и вызывать die().
2. в /lib/custom засунуть кастомизированный экшен
Это уже реальные костыли. Тогда уж