Уточнить пользовательские URL-адреса в Magento
В настоящее время я пытаюсь создать собственные URL-адреса/маршрутизацию с помощью magento, в настоящее время я установил маршрут по умолчанию в config.xml в локальном модуле.
<frontend>
<routers>
<portfolios>
<use>standard</use>
<args>
<module>Custom_Portfolios</module>
<frontName>portfolios</frontName>
</args>
</portfolios>
</routers>
<default>
<router>portfolios</router>
</default>
</frontend>
В настоящее время он работает с URL-адресом/portfolios/index/action/custom-string, который является маршрутом по умолчанию magento.
То, что я пытаюсь достичь, состоит в том, чтобы иметь /portfolios/custom -string.html. Я попытался использовать правило mod_rewrite без каких-либо успехов, я нашел некоторые ссылки относительно использования пользовательского суффикса .html, который я добавил в тот же файл config.xml.
<default><portfolios><seo><portfolios_url_suffix>.html</portfolios_url_suffix></seo></portfolios></default>
Я просмотрел документы alan storm по отношению к маршрутизации и нашел, что это релевантно только для маршрутов маршрутизации по умолчанию или информация немного устарела.
Знаете ли вы лучший метод управления маршрутизацией в magento с помощью, возможно, простого и улокального учебника? если да, пожалуйста, поделитесь: D many
Ответы
Ответ 1
Способ сделать это с помощью перезаписи URL. Фактически, найденная конфигурация суффикса, вероятно, используется Mage_Catalog для создания наборов перезаписи. Я впервые подхожу к этой конкретной функции, поэтому этот фрагмент нужно взять с щепоткой соли...
// Creating a rewrite
/* @var $rewrite Mage_Core_Model_Url_Rewrite */
$rewrite = Mage::getModel('core/url_rewrite');
$rewrite->setStoreId($store_id)
->setIdPath('portfolios/'.$url_key)
->setRequestPath('portfolios/'.$url_key.'.html')
->setTargetPath('portfolios/index/action/id/'.$url_key)
->setIsSystem(true)
->save();
Для каждого возможного пути требуется новый переписать.
Изменить; Я добавил setIdPath
, потому что это может быть необходимо.
Ответ 2
Код ниже не проверен, но должен работать
Если вы не хотите определять пользовательскую переписку для каждого элемента орфографии, выполните следующие действия:
-
Напишите свой собственный класс маршрутизатора, расширенный от Mage_Core_Controller_Varien_Router_Standard, и реализуйте метод match
:
public function match(Zend_Controller_Request_Http $request)
{
$path = explode('/', trim($request->getPathInfo(), '/'));
// If path doesn't match your module requirements
if (count($path) > 2 && $path[0] != 'portfolios') {
return false;
}
// Define initial values for controller initialization
$module = $path[0];
$realModule = 'Custom_Portfolios';
$controller = 'index';
$action = 'action';
$controllerClassName = $this->_validateControllerClassName(
$realModule,
$controller
);
// If controller was not found
if (!$controllerClassName) {
return false;
}
// Instantiate controller class
$controllerInstance = Mage::getControllerInstance(
$controllerClassName,
$request,
$this->getFront()->getResponse()
);
// If action is not found
if (!$controllerInstance->hasAction($action)) {
return false; //
}
// Set request data
$request->setModuleName($module);
$request->setControllerName($controller);
$request->setActionName($action);
$request->setControllerModule($realModule);
// Set your custom request parameter
$request->setParam('url_path', $path[1]);
// dispatch action
$request->setDispatched(true);
$controllerInstance->dispatch($action);
// Indicate that our route was dispatched
return true;
}
-
Определите свой настраиваемый маршрутизатор в файле config.xml:
<stores>
<default>
<web>
<routers>
<your_custom>
<area>frontend</area>
<class>Custom_Portfolios_Controller_Router_Custom</class>
</your_custom>
</routers>
</web>
</default>
</stores>
-
Наслаждайтесь своей собственной маршрутизацией в Magento:)
Ответ 3
Самый простой способ (когда вам не нужно автоматически генерировать много URL-адресов) - использовать встроенный модуль Url Rewrites. Перейти к админ-серверу администратора → Каталог → Url Rewrite управление и настройка любого URL-адреса, который вам нравится.