Битрикс — Как убрать в ссылках на товар /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.

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

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

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