Как переписать URL-адрес каталога/поиска magento?
Необходимо переписать URL-адрес поиска по каталогу magento catalogsearch/result?q=query
так, чтобы он был похож на katalog/resultater?q=query
. Как вы можете видеть до и после косой черты, она должна отличаться в зависимости от исходного URL.
Просто мне нужно перевести этот URL-адрес. Как это сделать?
2
1 answers
Да, в этом возможно. В этом случае вам необходимо использовать пользовательский маршрут.
Создайте пользовательский маршрут.
На пользовательском маршруте он может понадобиться для каталогизации/вывода в качестве контроллера как
Создать di.xml
Создать di.xml для определения пользовательского маршрута в конфигурации
<?xml version="1.0"?>
<!--
/**
* Copyright © 2017 amitbera.com
* created by Amit Bera([email protected])
* Module is created for Custom Router demonstration
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<type name="Magento\Framework\App\RouterList">
<arguments>
<argument name="routerList" xsi:type="array">
<item name="katalog" xsi:type="array">
<item name="class" xsi:type="string">[Vendorname]\[Modulename]\Controller\Router</item>
<item name="disable" xsi:type="boolean">false</item>
<item name="sortOrder" xsi:type="string">22</item>
</item>
</argument>
</arguments>
</type>
</config>
Маршрут файл:
<?php
namespace [Vendorname]\[Modulename]\Controller;
class Router implements \Magento\Framework\App\RouterInterface
{
/**
* @var \Magento\Framework\App\ActionFactory
*/
protected $actionFactory;
/**
* Response
*
* @var \Magento\Framework\App\ResponseInterface
*/
protected $_response;
/**
* @param \Magento\Framework\App\ActionFactory $actionFactory
* @param \Magento\Framework\App\ResponseInterface $response
*/
public function __construct(
\Magento\Framework\App\ActionFactory $actionFactory,
\Magento\Framework\App\ResponseInterface $response
) {
$this->actionFactory = $actionFactory;
$this->_response = $response;
}
/**
* Validate and Match
*
* @param \Magento\Framework\App\RequestInterface $request
* @return bool
*/
public function match(\Magento\Framework\App\RequestInterface $request)
{
/*
* We will search katalog/resultater and “exampletocms” words and make forward depend on word
* -katalog/resultate will set front name to catalogsearch, controller path to result and action to index
*/
$identifier = trim($request->getPathInfo(), '/');
if(strpos($identifier, 'katalog/resultater') !== false) {
$request->setModuleName('catalogsearch')->setControllerName('result')->setActionName('index');
} else {
//There is no match
return;
}
/*
* We have match and now we will forward action
*/
return $this->actionFactory->create(
'Magento\Framework\App\Action\Forward',
['request' => $request]
);
}
}
2
Author: Amit Bera, 2017-04-13 12:55:02