Управление структурой URL

 

Исходя из многочисленных обращений пользователей, нашими разработчиками было принято решение добавить возможность изменить структуру URL на сайте.

Начиная с версии ImageCMS 4.12 реализована возможность убрать из URL адресов сегменты shop/category и shop/product и возможность гибкой настройки URL для товаров и категорий. Функционал, доступный в релизе ImageCMS Shop в редакциях Pro и Premium, а также для пользователей облачного решения Premmerce (ImageCMS Corporate не будет содержать данного функционала, так как в Corporate используется другая логика построения структуры URL).

Примечание:
Если вы используете более ранюю версию ImageCMS Shop и не имеете возможности обновить свою систему в целом (например из-за многочисленных доработок), но данная возможность для вас является важной, вам необходимо связатся с нашими менеджерами любым удобным вам способом и обсудить отдельную интеграцию данного функционала.
Внимание!
Перед обновлением к 4.12 уникализируйте названия категорий товаров. Если у вас останутся категории с одинаковым именем, то после обновления они, вероятно, не будут работать корректно и понадобится их отдельная настройка.

1. Открытие функционала

Функционал настройки URL добавлен отдельным разделом в настройках магазина.

Чтобы открыть функционал, вам необходимо перейти к разделу главного меню "Настройки" → "Настройки магазина". Далее перейдите на вкладку "URL":

К началу

2. Настройка URL

Открывшаяся форма настройки будет разделена на 2 основных блока:

  • Product url - раздел настройки url для страниц товаров
  • Category url - раздел настройки url для страниц категорий

По своему функциональному содержимому данные разделы абсолютно идентичны - обе формы содержат только 2 элемента:

  • Prefix - поле, которое позволяет добавить произвольный сегмент в ссылку; по умолчанию - поле пустое и не используется. Если вы вставите в него определенное содержимое, то ссылка будет иметь примерно следующий вид: http://site.com/prefix/урл-страницы
  • Show parent url - ячейка выбора, которая позволяет настроить отображение родительских сегментов в url конечной страницы товара или категории.

К началу

2.1. для товаров

По умолчанию, ссылка страницы товара в ImageCMS 4.12 выглядит примерно следующим образом:

httр://site-name.com/ХХХХХ

Где ХХХХХ - сегмент, состоящий из URL страницы товара (генерируется автоматически из названия товара)

Если указано значение поля Prefix, то URL страницы товара будет иметь примерно следующий вид:

http://site-name.com/prefix/ХХХХХ

Где:

  • prefix - содержимое поля "Prefix"
  • ХХХХХ - сегмент, состоящий из URL страницы товара (генерируется автоматически из названия товара)
Примечание:

Если вы желаете сохранить "традиционную" структуру URL после обновления к 4.12 - вам необходимо в поле "Prefix", для страниц товаров указать shop/product

Хотя содержимое поля "Prefix" может быть практически произвольным, что позволяет осуществлять гибкую настройку со стороны SEO, но мы крайне не рекомендуем использовать для его содержимого:

  • кирилицу;
  • знаки припинания, пробелы и другие символы (кроме дефиса);
  • содержимое, прывышающее 60 - 80 символов.

Если для ячейки Show parent url присвоено значение "Выбрано", но поле "Prefix" пустое, то URL страницы товара будет иметь примерно следующий вид:

http://site-name.com/category-1/category-2/category-3/ХХХХХ

Где:

  • category-1 - URL товарной категории первого уровня, к которой принадлежит товар
  • category-2 - URL товарной категории второго уровня, к которой принадлежит товар (если таковая есть)
  • category-3 - URL товарной категории третьего уровня, к которой принадлежит товар (если таковая есть)
  • ХХХХХ - сегмент, состоящий из URL страницы товара (генерируется автоматически из названия товара)

Если в настройках URL для страницы товара, указано значение поля Prefix, а для ячейки Show parent url присвоено значение "Выбрано", то URL страницы товара будет иметь примерно следующий вид:

http://site-name.com/prefix/category-1/category-2/category-3/ХХХХХ

Где:

  • prefix - содержимое поля "Prefix"
  • category-1 - URL товарной категории первого уровня, к которой принадлежит товар
  • category-2 - URL товарной категории второго уровня, к которой принадлежит товар (если таковая есть)
  • category-3 - URL товарной категории третьего уровня, к которой принадлежит товар (если таковая есть)
  • ХХХХХ - сегмент, состоящий из URL страницы товара (генерируется автоматически из названия товара)

К началу

2.2. для товарных категорий

По умолчанию, ссылки страниц товарных категорий в ImageCMS 4.12 выглядят примерно следующим образом:

httр://site-name.com/ХХХХХ

Где ХХХХХ - сегмент, состоящий из URL категории

Если указано значение поля Prefix, то URL страницы категории будет иметь следующий вид:

http://site-name.com/prefix/ХХХХХ

Где:

  • prefix - содержимое поля "Prefix"
  • ХХХХХ - сегмент, состоящий из URL категории
Примечание:

Если вы желаете сохранить "традиционную" структуру URL после обновления к 4.12, вам необходимо в поле "Prefix", для страниц категорий указать shop/category

Хотя содержимое поля "Prefix" может быть практически произвольным, что позволяет осуществлять гибкую настройку со стороны SEO, но мы крайне не рекомендуем использовать для его содержимого:

  • кирилицу;
  • знаки припинания, пробелы и другие символы (кроме дефиса);
  • содержимое, прывышающее 60 - 80 символов.

Если для ячейки Show parent url присвоено значение "Выбрано", но поле "Prefix" пустое, то URL страницы категории будет иметь следующий вид:

http://site-name.com/category-1/category-2/category-3/ХХХХХ

Где:

  • category-1 - URL товарной категории первого уровня, к которой принадлежит товар
  • category-2 - URL товарной категории второго уровня, к которой принадлежит товар (если таковая есть)
  • category-3 - URL товарной категории третьего уровня, к которой принадлежит товар (если таковая есть)
  • ХХХХХ - сегмент, состоящий из URL категории

Если в настройках URL для страницы категории, указано значение поля Prefix, а для ячейки Show parent url присвоено значение "Выбрано", то URL страницы категории будет иметь примерно следующий вид:

http://site-name.com/prefix/category-1/category-2/category-3/ХХХХХ

Где:

  • prefix - содержимое поля "Prefix"
  • category-1 - URL товарной категории первого уровня, к которой принадлежит категории (если таковая есть)
  • category-2 - URL товарной категории второго уровня, к которой принадлежит категории (если таковая есть)
  • category-3 - URL товарной категории третьего уровня, к которой принадлежит категории (если таковая есть)
  • ХХХХХ - сегмент, состоящий из URL категории

К началу

3. Настройка URL в мультиязычном магазине

В целом, струкрура URL в мультиязычном магазине не будет отличатся от логики описанной выше, в пунктах 2.1 и 2.2., лиш с только той разницей, что в структуру URL будет добавлен сегмент локализации (так же как и в предыдущих версиях). Например:

  • http://site-name.com/ua/prefix/category-1/category-2/category-3/ХХХХХ
  • http://site-name.com/en/ХХХХХ

Где ua и en - локали языковых версий (украинской и английской соответственно).

К началу

4. Создание глобального редиректа

Если у вас есть желание изменить структуру URL со старой на новую (то есть убрать сегменты shop/product и shop/category), в таком случае, вам необходимо создать глобальный редирект в файле .htaccess в корне шаблона.

  • Что бы убрать сегмент shop/product вам необходимо добавить строку
RewriteRule ^shop/product/(.+)$ /$1 [R=301,L]
  • Что бы убрать сегмент shop/product вам необходимо добавить строку
RewriteRule ^shop/category/(.+)$ /$1 [R=301,L]

К началу

5. Частые вопросы

Этот URL-адрес уже используется! Запросов к базе: 30

Данная ошибка возникает при создании нового товара или категории. Это значит, что url, который генерируется автоматически из названия товара (название товара переводится в транслит), уже занят другим товаром.

Подобная ошибка возникнет, если вы попытаетесь создать несколько товаров или категорий с одинаковым названием, например 2 разные подкатегории "Кросовки" в 2 разних категориях первого уровня - "Обувь мужская" и "Обувь женская".

При этом привязка товара к категории или местоположение категории в общем дереве категорий роли не играют (в системе ImageCMS Shop 4.12 учитывается только название)

Для решения проблемы вам необходимо уникализировать url в разделе настроек товара/категории в поле "URL":

%20 в URL после настроек.

Скорее всего, при указании префикса к URL страницы товара или категории, вы поместили в поле пробел (кодируется как %20).

Проблема не критична, но мы рекомендуем избегать пробелов (заменять их дефисами)

Вам необходимо проверить настройки и удалить пробелы.

К началу

Ссылки в исходном коде меню в категории, все еще с shop/category...

Если после осуществления всех необходимых настроек URL, в фильтре, в исходном коде на странице категории, у вас все еще подтягиваются старые URL категорий с сегментом shop/category

То вам необходимо в файле /templates/ваш_шаблон/shop/includes/category/category_subnav.tpl вам необходимо:

Строку кода:

<a class="sidebar-nav__link" href="{shop_url('category/' . $item->getFullPath())}">{echo $item->getName()}</a>

Заменить на:

<a class="sidebar-nav__link" href="{site_url($item->getRouteUrl())}">{echo $item->getName()}</a>

После правки - очистите кеш из админ панели.

К началу

Ссылки с shop/category в исходном коде товаров в категории

В файле product_snippet.tpl в папке /templates/ваш_шаблон/shop/includes/product - необходимо найти строку кода:

      <div class="product-snippet__title">
        <a class="product-snippet__title-link"
           href="{shop_url('product/'.$model->getUrl())}">{echo $model->getName()}</a>
      </div>

И заменить на

      <div class="product-snippet__title">
        <a class="product-snippet__title-link"
           href="{site_url($model->getRouteUrl())}">{echo $model->getName()}</a>
      </div>