URL-ссылка для настраиваемого модуля в Prestashop 1.6

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

domain.com/flower-deliveries?city=Hamburg&id_country=1&country=Germany 

Я уже добавил новую страницу для связи с пользовательским модулем, название страницы – цветы, но все же у меня есть параметры, которые мне нужно «скрыть».

Вместо этого из этой ссылки я хотел бы получить такой URL:

 domain.com/flower-deliveries-1-Hamburg-Germany.html 

Я попробовал 2 метода, но никто из них не работал.

Первый – добавить hookModuleRoutes в мой контроллер, как показано ниже:

 public function hookModuleRoutes($params) { return array( 'module-vpages-dpage' => array( 'controller' => 'dpage', 'rule' => 'flower-deliveries{-:id_country}{-:country}{-:city}.html', 'keywords' => array( 'id_country' => array('regexp' => '[_a-zA-Z0-9_-]+', 'param' => 'id_country'), 'city' => array('regexp' => '[\w]+', 'param' => 'city'), 'country' => array('regexp' => '[\w]+', 'param' => 'country') ), 'params' => array( 'fc' => 'module', 'module' => 'vpages', 'controller' => 'dpage' ) ) ); } 

А затем в контроллерах установите:

 $this->registerHook('moduleRoutes'); 

Это не сработало, поэтому я попытался переопределить класс Dispatcher, добавив настраиваемый маршрут модуля:

 'module-vpages-dpage' => array( 'controller' => 'dpage', 'rule' => 'flower-deliveries{-:id_country}{-:country}{-:city}.html', 'keywords' => array( 'id_country' => array('regexp' => '[0-9]+', 'param' => 'id_country'), 'city' => array('regexp' => '[\w]+', 'param' => 'city'), 'country' => array('regexp' => '[\w]+', 'param' => 'country'), ), 'params' => array( 'fc' => 'module', 'module' => 'vpages', 'controller' => 'dpage' ) ), 

При использовании этого настраиваемого правила ссылка http://domain.com/flower-deliveries?city=Hamburg&id_country=1&country=Germany была переведена в http://domain.com/flower-deliveries?module_action=list и это не помогло работал и перенаправлял меня на первую страницу.

Может ли кто-нибудь сказать мне, что я делаю неправильно? Я потратил часы на чтение, как это должно быть сделано, и должно быть так же, как и выше.

Спасибо!

Отмените все изменения, которые вы сделали :).

Попробуйте так:

Например, это основной файл модуля rootofps/modules/vpages/vpages.php

 class VPages extends Module { public function __construct(){ $this->name = 'vpages'; $this->author = 'you'; $this->tab = 'front_office_features'; $this->version = '1.0.0'; $this->controllers = array('dpage'); parent::__construct(); } // This is the function in your core module file (not in controller) public function install(){ return parent::install() && $this->registerHook('moduleRoutes') } public function hookModuleRoutes($params){ $my_link = array( 'vpages' => array( 'controller' => 'dpage', 'rule' => 'flower-deliveries{-:id_country}{-:country}{-:city}.html', 'keywords' => array( 'id_country' => array('regexp' => '[0-9]+', 'param' => 'id_country'), 'country' => array('regexp' => '[\w]+', 'param' => 'country'), 'city' => array('regexp' => '[\w]+', 'param' => 'city'), ), 'params' => array( 'fc' => 'module', 'module' => 'vpages' ) ) ); return $my_link; } } 

Теперь контроллер rootofps/modules/vpages/controllers/front/dpage.php

 class VpagesDpageModuleFrontController extends ModuleFrontController { public function init(){ parent::init(); $this->setTemplate('dapage.tpl'); } } 

И теперь вид rootofps/modules/vpages/views/templates/front/dpage.tpl

 id_country = {$smarty.get.id_country}<br> country = {$smarty.get.country}<br> city={$smarty.get.city}<br> 

Этот «скелет» работает на 100% :), кстати, обратите внимание, что если вы укажете URL-адрес mydomain.com/flower-deliveries?id_country=1&country=italy&city=rome PrestaShop не будет преобразовывать ваш URL-адрес в явно вы хотите. Но такой URL-адрес mydomain.com/flower-deliveries-2-italy-rome.html будет маршрутом правильно 🙂