Как переписать URL-адрес каталога/поиска magento?


Необходимо переписать URL-адрес поиска по каталогу magento catalogsearch/result?q=query так, чтобы он был похож на katalog/resultater?q=query. Как вы можете видеть до и после косой черты, она должна отличаться в зависимости от исходного URL.

Просто мне нужно перевести этот URL-адрес. Как это сделать?

Author: white-imp, 2017-02-08

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