Перезапись URL в Magento
Опубликовано: 2014-09-11Критически важно, чтобы все веб-сайты имели URL-адреса, удобные для целей SEO. Однако нам не всегда легко создавать их в Magento, особенно когда вы устанавливаете модуль. Как мы можем решить эту проблему как нетехнический пользователь? Мы предлагаем 2 возможных решения для перезаписи URL-адресов в Magento и создаем соответствующие URL-адреса по вашему желанию. Вы видите, что это не будет большой проблемой больше.
ГОРЯЧИЙ!! Вышла версия 2.0 Claue

Посмотреть демо
Claue — Clean, Minimal Magento 2&1 Theme — отличный шаблон для современного и чистого магазина электронной коммерции с более чем 40 макетами домашней страницы и множеством вариантов для магазина, блога, портфолио, макетов локатора магазинов и других полезных страниц. Claue версии 2.0 поставляется с множеством эксклюзивных функций, включая:
- На основе темы Luma.
- Соответствует всем стандартам темы Magento
- Значительное улучшение производительности
- Совместим с большинством сторонних расширений.
- Полностью совместим с Magento 2.4.x
Эта вторая расширенная версия полностью отличается от предыдущей. Таким образом, если вы используете Claue версии 1 и хотите обновиться до Claue версии 2, вы можете только перестроить новый веб-сайт, а не обновлять старую версию. А теперь вернемся к основной теме
Прежде чем мы перейдем к двум решениям, мы покажем пример, чтобы описать, как создается URL-адрес по умолчанию, и необходимые знания для исправления. Например. Мы создали модуль для блога под названием «Блог», и его пространство имен — MGS с простыми полями, такими как
| я бы | заглавие | описание |
В бэкенде, когда мы создаем пост, нам нужно вставить два поля, т.е. Название и описание. ID поста будет сгенерирован автоматически. Чтобы отобразить информацию о записи в блоге, мы полагаемся на маршрутизатор (объявленный в файле config.xml, мы объявили блог), контроллер (мы назвали index, поэтому это будет файл IndexControler.php в папке controllers), действие (мы назвали view , функция viewAction в файле IndexControler.php) и идентификатор поста.
Таким образом, URL-адрес поста по умолчанию во внешнем интерфейсе будет выглядеть так:
http://domain.com/blog/index/view/id/1 (1 – идентификатор сообщения)
Насколько мы видим, этот URL-адрес совершенно не подходит для SEO, его следует переписать, чтобы он стал удобным для URL-адресов. Возвращаясь к основной цели, мы предложили 2 метода создания URL-адресов. И в любом случае вам нужно будет определить URL-адрес, который вы хотите, или вы будете следовать общему правилу для создания URL-адреса (обычно мы будем использовать заголовок сообщения, преобразовать все символы в обычный стиль, заменить пустое место на -, например, заголовок « Как переписать URL-адрес в Magento » станет « как переписать URL-адрес в Magento».
В этой статье мы будем использовать подход к определению URL-адресов, поэтому мы добавим еще одно поле в вышеуказанную базу данных для сохранения URL-адреса.
| я бы | заглавие | описание | URL |
Таким образом, URL поста будет заполнен.
Первая техника перезаписи URL
Используйте функцию перезаписи URL-адресов Magento, вы можете получить более подробную информацию в Каталог-> Управление перезаписью URL-адресов.

Там вы обнаружите, что Magento создает модуль для сохранения перезаписи URL для категории и продукта. Magento также позволяет вам добавить перезапись URL-адреса, нажав «Добавить перезапись URL-адреса», чтобы добавить пользовательскую перезапись URL-адреса с помощью:
Целевой путь: URL-адрес сообщения, например. блог/индекс/представление/идентификатор/1
Путь запроса : перепишите URL-адрес, который вы вставите, например. как переписать URL-адрес в magento.html
Очевидно, что мы не будем вручную добавлять эту информацию, чтобы избежать перезаписи URL. Вместо этого мы будем использовать модель url_rewrite основного модуля (Mage::getModel('core/url_rewrite')) для сохранения URL-адреса блога в таблице core_url_rewrite после сохранения данных блога.
После того как вы сохранили сообщение в блоге, вы можете использовать следующий код, чтобы сохранить переписанный URL-адрес:
Mage::getModel('core/url_rewrite')
->setIsSystem(true)
->setIdPath('blog/index/view/id/'.$blogId)
->setTargetPath('blog/index/view/id/'.$blogId)
->setRequestPath($url)
->save();
Примечание: $blogId — это идентификатор блога после сохранения, а $url — это URL-адрес, который вы определили.

Напомним, приведенная выше команда применяется к новому сообщению, если вы хотите отредактировать существующее сообщение, вам необходимо обновить эту запись.
Второй метод перезаписи URL
По-прежнему берите модуль «Блог» и те же поля данных, что и упомянутые выше, вы создаете сообщения в бэкэнде, включая соответствующие данные заголовка, описания, URL-адреса.
Перейдите к config.xml (app/code/local/MGS/Blog/etc)
В глобальном теге:
<global> … </global>
Добавьте следующий код
<events>
<controller_front_init_routers>
<observers>
<blog_custom_router>
<class>MGS_Blog_Controller_Router</class>
<method>initControllerRouters</method>
</blog_custom_router>
</observers>
</controller_front_init_routers>
</events>
В основной папке модуля app/code/local/MGS/Blog вы создадите еще одну папку с именем Controller, в которой затем создадите файл с именем Router.php со следующим содержимым:
<?php
class MGS_Blog_Controller_Router extends Mage_Core_Controller_Varien_Router_Abstract
{
/**
* Initialize Controller Router
*
* @param Varien_Event_Observer $observer
*/
public function initControllerRouters($observer)
{
/* @var $front Mage_Core_Controller_Varien_Front */
$front = $observer->getEvent()->getFront();
$front->addRouter('blog', $this);
}
/**
* Validate and Match Cms Page and modify request
*
* @param Zend_Controller_Request_Http $request
* @return bool
*/
public function match(Zend_Controller_Request_Http $request)
{
if (!Mage::isInstalled()) {
Mage::app()->getFrontController()->getResponse()
->setRedirect(Mage::getUrl('install'))
->sendResponse();
exit;
}
$identifier = trim($request->getPathInfo(), '/');
$condition = new Varien_Object(array(
'identifier' => $identifier,
'continue' => true
));
if ($condition->getRedirectUrl()) {
Mage::app()->getFrontController()->getResponse()
->setRedirect($condition->getRedirectUrl())
->sendResponse();
$request->setDispatched(true);
return true;
}
if (!$condition->getContinue()) {
return false;
}
$collection = Mage::getModel('blog/blog')
->getCollection();
if(count($collection)>0){
foreach($collection as $post){
if($identifier == $post->getUrl()){
$request->setModuleName('blog');
$request->setControllerName('index');
$request->setActionName('view');
$request->setParam('id', $post->getId());
return true;
}
}
}
}
} Приведенный выше фрагмент кода означает:
Например, когда вы вводите путь в браузере:
http://domain.com/how-to-rewrite-url-in-magento.
Функция сравнит путь: как-to-rewrite-url-in-magento.html с URL-адресом в таблице данных блога.
Если путь аналогичен полю URL любой записи в БД, то 4 командные строки:
$request->setModuleName('blog');
$request->setControllerName('index');
$request->setActionName('view');
$request->setParam('id', $post->getId());поможет системе понять, что URL-адрес соответствует router: blog, controller: index, action: view, а id — это идентификатор записи, имеющей URL-адрес, идентичный пути в браузере.
Например. Запишите с URL-адресом, как переписать-url-in-magento.html и идентификатором 1, затем:
http://domain.com/how-to-rewrite-url-in-magento.html
соответствует
http://domain.com/blog/index/view/id/1
Это два решения, которые мы рекомендуем для решения проблемы с URL-адресами в Magento . Мы надеемся, что вы найдете их полезными. Мы высоко ценим ваш комментарий и дальнейший вклад в статью.
Большое спасибо за ваше время!
Служба поддержки Magesolution !
