Свой shopFrontendCartAddController

Доброго времени суток.

Подскажите, кто знает, возможно ли системе подсунуть свой контроллер shopFrontendCartAddController (т.е. унаследоваться от него и перегрузить функцию execute)?

3 ответа

  • 2
    Eugen Nichikov 31 января 2018 17:00 #

    Можно переписать роутинг и подсунуть контроллер своего плагина.

    wa-apps/shop/lib/config/routing.php => wa-config/apps/shop/routing.php

    Там нужно подменить ключи 'cart/<action>/' в зависимости от того какой тип ссылок используется в поселении.

    Ну или так вообще

    <?php
    
    $original = include dirname(__FILE__).'/../../../wa-apps/shop/lib/config/routing.php';
    
    $p = array(
        'plugin' => 'mymyplugin',
        'module' => 'frontend',
        'action' => 'cart'
    );
    
    $p2 = array(
        'plugin' => 'mymyplugin',
    'module' => 'cart' ); foreach ($original as &$item) { $item['cart/'] = $p; $item['cart/<action>/'] = $p2; } return $original;
  • 1
    Юрий Романов 31 января 2018 22:45 #

    Всем спасибо. Вопрос решен.

    Воспользовался хуком.

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

    return array(
    'cart/<action:add>/' => 'CartAdd',
    'shop_product'=> array(
    'url' => 'product/<product_url:[^/]+>/',
    'module' => '',
    'action' => 'product'
    ), );
    • +1
      info@ravencode.ru info@ravencode.ru 2 февраля 2018 03:41 #

      не стоит давать советы не разобравшись, должно быть что-то вроде этого:

      public function routingHandler(array $route)
      {
      	$routes = array(
      		'cart/add/' => array(
      			'module' => 'frontend',
      			'app'    => 'shop'
      			'plugin' => 'myplugin',
      			'action' => 'add'
      		)
      	);
      	// @see wa-apps/shop/lib/config/routing.php
      	if ($route['url_type'] == 0) {
      		$routes['<product_url:[^/]+>/'] = array(
      			'module' => 'frontend',
      			'app'    => 'shop'
      			'plugin' => 'myplugin',
      			'action' => 'product'
      		);
      	} elseif ($route['url_type'] == 1) {
      		$routes['product/<product_url:[^/]+>/'] = array(
      			'module' => 'frontend',
      			'app'    => 'shop'
      			'plugin' => 'myplugin',
      			'action' => 'product'
      		);
      	} else {
      		// ...
      	}
      
      	return $routes;
      }


  • 1
    Юрий Романов 2 февраля 2018 09:12 #

    Золотые слова.

    Особенно учитывая, что один из кодов не работает.

    За синтаксис, конечно спасибо.

    • +1
      info@ravencode.ru info@ravencode.ru 2 февраля 2018 11:10 #
      что-то вроде этого

      конечно не работает, это же просто пример, а не конечная реализация.

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

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