Битрикс — Как убрать в ссылках на товар /catalog/

Рассмотрим один из вариантов как сделать ссылки без папки catalog.

Как в Битриксе создать url без указания папки каталога

В случае когда нам нужно просто переименовать папку, вся работа состоит из таких шагов:

1. Переименовать папку, например, заходим на FTP и переименовываем store на catalog.

2. Заходим в инфоблок и в его настройках меняем 3 правила формирования #SITE_DIR#/store/ на #SITE_DIR#/catalog/

3. Открываем настройки компонента каталога и также само прописываем вместо /store/ — /catalog/. Правила формирования остаются такими же — #SECTION_CODE#/#ELEMENT_CODE#/. При сохранении компонента происходит перезапись файла urlrewrite.php. Если вы меняете папку через код файла /catalog/index.php — то вам также нужно изменить правило в urlrewrite.php.

Для чего вам вся эта информация?) Теперь вы лучше понимаете стандартную процедуру переименования и формирования ссылок в Битриксе.

А сейчас перейдем непосредственно к решению задачи — убираем /catalog/ из ссылок. Открываем urlrewrite:

array (
    'CONDITION' => '#^/#',
    'RULE' => '',
    'ID' => 'bitrix:catalog',
    'PATH' => '/catalog/index.php',
    'SORT' => 20,
  ),

Если у вас есть многосайтовость, то правило будет таким:

  array (
    'CONDITION' => '#^/ru/#',
    'RULE' => '',
    'ID' => 'bitrix:catalog',
    'PATH' => '/ru/catalog/index.php',
    'SORT' => 100,
  ),

В инфоблоке оставляем такие настройки:
URL страницы информационного блока: #SITE_DIR#/catalog/
URL страницы раздела: #SITE_DIR#/#SECTION_CODE#/
URL страницы детального просмотра: #SITE_DIR#/#SECTION_CODE#/#ELEMENT_CODE#/

Если вы используете SECTION_CODE_PATH — учитывайте это в настройках, т.к. на примере SECTION_CODE.

И последнее что нам необходимо сделать, переделать файл /catalog/index.php. Рассмотрим код:

<?if (CSite::InDir('/catalog/')) :?>
..bitrix:catalog.section..
<?else:?>
..bitrix:catalog..
<?endif;?>

При помощи такой проверки мы всё же оставляем папку /catalog/ — на ней будет компонент bitrix:catalog.section — в котором вы можете выводить либо список разделов, либо общий список товаров без привязки к ID раздела. Или же просто возьмите код из sections.php вашего компонента, и добавьте параметры из bitrix:catalog — он выполняется в блоке между else -> endif. По сути блок между else -> endif уже был на странице, и, в некоторых случаях, мы копируем полностью все параметры в блок if -> else.

Какие есть минусы у такого способа? Если у вас есть другие динамические компоненты, например новости, вам придется разместить код компонента на странице /catalog/index.php, например так:

<?if (CSite::InDir('/catalog/')) :?>
<?elseif(CSite::InDir('/blog/')):?>
<?else:?>
<?endif;?>

Без этого на сайте будет ошибка 404. Для блога используем bitrix:news. При многосайтовости указываем /ru/catalog/ и /ru/blog/.

Друзья, вот и все 🙂 Надеюсь у вас всё получилось. Возможно у вас есть способ реализовать это более красивее, если это так — жду в комментариях. Конструктивная критика приветствуется 😉

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

- Создание сайтов на 1С-Битрикс любой сложности
- Вёрстка макетов Figma, Photoshop, Zeplin
- Поддержка проектов на Битриксе
- Разработка нового функционала для сайта
- Парсинг данных
- Выгрузка из файлов в формате XML, YML, XLS, XLSX, CSV, JSON
- Интеграция по API со сторонними сервисами
и многое другое

E-mail: dmitriyribka@gmail.com

5 комментария

  1. А если комплексный компонент новостей имеет корневой раздел /news/, адрес деталки начинается от корня сайта, тогда ссылки будут конфликтовать и детальная страница новости будет недоступна. Как быть?

    1. Если вы имеете ввиду что у вас и каталог и новости работают по принципу «адрес деталки начинается от корня сайта» — то такого рода задачу к сожалению не решал, и да — будет конфликт. В таком случае рекомендую перевести новости на страницы от раздела /news/ или /blog/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *