Рассмотрим один из вариантов как сделать ссылки без папки 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/.
Друзья, вот и все 🙂 Надеюсь у вас всё получилось. Возможно у вас есть способ реализовать это более красивее, если это так – жду в комментариях. Конструктивная критика приветствуется 😉
Спасибо) помогло
Рад помочь)
Круто, давно искал
А если комплексный компонент новостей имеет корневой раздел /news/, адрес деталки начинается от корня сайта, тогда ссылки будут конфликтовать и детальная страница новости будет недоступна. Как быть?
Если вы имеете ввиду что у вас и каталог и новости работают по принципу “адрес деталки начинается от корня сайта” – то такого рода задачу к сожалению не решал, и да – будет конфликт. В таком случае рекомендую перевести новости на страницы от раздела /news/ или /blog/
Сделал все по инструкции, все заработало , но отвалилась 404 страница, на любую кашу в урле кидает на файл каталога и еще к сожалению пропадает из хлебных крошек ссылка на каталог
Если есть способ решить это подскажите.
спасибо.