Перезапись URL в Magento

Опубликовано: 2014-09-11

Критически важно, чтобы все веб-сайты имели URL-адреса, удобные для целей SEO. Однако нам не всегда легко создавать их в Magento, особенно когда вы устанавливаете модуль. Как мы можем решить эту проблему как нетехнический пользователь? Мы предлагаем 2 возможных решения для перезаписи URL-адресов в Magento и создаем соответствующие URL-адреса по вашему желанию. Вы видите, что это не будет большой проблемой больше.

ГОРЯЧИЙ!! Вышла версия 2.0 Claue

claue2_edited (1)

Посмотреть демо

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-адресов.

Изображение1

Там вы обнаружите, что 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 !