Перезапись 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 !