Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

ЧПУ для комплексного компонета catalog - HOWTO

00 голосов
7
Не знаю решена ли эта проблема в поздних версиях, поэтому решил поделится.

Задача:
Создать для комплексного компонента bitrix:catalog систему ЧПУ опирающуюся только на Символические коды как секций, так и элементов - /#SECTION_CODE#/ELEMENT_CODE#/. В стандарте компонент предлагает такой вариант: (папка rent - физическая в ней лежит index.php с вызовом bitrix:catalog) /rent/1/2/ где 1 - SECTION_ID, а 2 - ELEMENT_ID. Хочется же сделать /rent/magnus/about/

Проблема:
Повторюсь в версии 8.0.5 - предусмотрена возможность пользоваться не SECTION_ID и ELEMENT_ID, а SECTION_CODE и ELEMENT_CODE. Ссылки рисуются правильно, но есть одна проблема. если символические коды элементов одинаковые (/rent/magnus/about/ /rent/oskar/about/) - выбирается первый попавшийся элемент с таким кодом и дополнительной проверки на принадлежность к секции с SECTION_CODE - не проверяется.
То есть при обращении и к /rent/magnus/about/, и к /rent/oskar/about/ - выдается один и тот же элемент.

Решение:
1. Откройте файл /bitrix/components/bitrix/catalog.element/component.php
2. Найдите строку содержащую
Код
$arParams["ELEMENT_ID"] = CIBlockFindTools::GetElementID(

3. Весь интересующий нас кусок кода выглядит так
Код
      $arParams["ELEMENT_ID"] = CIBlockFindTools::GetElementID(
         $arParams["ELEMENT_ID"],
         $arParams["ELEMENT_CODE"],
         false,
         false,
         array(
            "IBLOCK_ID" => $arParams["IBLOCK_ID"],
            "IBLOCK_LID" => SITE_ID,
            "IBLOCK_ACTIVE" => "Y",
            "ACTIVE_DATE" => "Y",
            "ACTIVE" => "Y",
            "CHECK_PERMISSIONS" => "Y",
         )
      );


после
Код
            "CHECK_PERMISSIONS" => "Y",

добавьте
Код
            "SECTION_CODE" => $arParams["SECTION_CODE"],


вот и все
спросил 01 Сен, 13 от luc (140 баллов)

7 Ответы

00 голосов
Этот вариант будет плохо работать в случае множественной привязки к разделам.
НЕ лучше ли использовать уникальные коды для каждого элемента?
ответил 01 Сен, 13 от Merigold (460 баллов)
00 голосов
Извините, Роберт, но Вам не кажется странным использовать уникальные коды? Ведь это же вопрос структуры - а структура тем и структура, что содержит единообразные элементы разбитые в дерево. Я не очень понимаю, почему при заявленной возможности, мне приходится пилить ядро системы, чтобы заставить ее работать. Заплатив за нее немалые деньги. Согласитесь, если бы мы все шли на компромиссы - не было бы битрикса и все сидели на вордпрессе.
ответил 21 Ноя, 13 от luc (140 баллов)
00 голосов
Здравствуйте! Сейчас занимаюсь разработкой интернет-магазина на версии Битрикс 8.5.1, редакция "Бизнес". В этом деле я новичок, потихоньку пытаюсь разобраться в структуре Вашего движка. При составлении каталога столкнулся с такой же проблемой, как и товарищ Александр Морозов. Пока еще лицензия не куплена, работаю на демке, соответственно возможности ввести предложенные изменения в исходник - нет. Может, есть альтернативные способы решения проблемы?
ЧПУ не работает правильно: В инфоблоке А есть 2 большие категории. В этих двух категорях есть еще подкатегории с одинаковыми именами и символьными кодами. Соответственно при публикации каталога ЧПУ не привязывает каждую подкатегорию к материнской верхней категории.
Другими словами: вместо того, чтобы получить разделение на http://site/men/spain/#brand_name#/#element_name.html, мы получаем http://site/spain/#brand_name#/#element_name.html
Раздел Испания с символьным кодом spain существует в двух соседних разделах men и women, поэтому получаем ссылку совсем не на то, что ожидали.
Подскажите, что я неправильно делаю и как решить этот вопрос. Заранее спасибо.
ответил 02 Март, 14 от Krestof (170 баллов)
00 голосов
Отличная техподдержка!
ответил 22 Июнь, 14 от Krestof (170 баллов)
00 голосов
Это не техподдержка, это форум разработчиков на битриксе 8)
ответил 21 Окт, 14 от Yago (360 баллов)
00 голосов
Цитата
Дмитрий Белоконь пишет:
Здравствуйте! Сейчас занимаюсь разработкой интернет-магазина на версии Битрикс 8.5.1, редакция "Бизнес". В этом деле я новичок, потихоньку пытаюсь разобраться в структуре Вашего движка. При составлении каталога столкнулся с такой же проблемой, как и товарищ Александр Морозов. Пока еще лицензия не куплена, работаю на демке, соответственно возможности ввести предложенные изменения в исходник - нет. Может, есть альтернативные способы решения проблемы?
ЧПУ не работает правильно: В инфоблоке А есть 2 большие категории. В этих двух категорях есть еще подкатегории с одинаковыми именами и символьными кодами. Соответственно при публикации каталога ЧПУ не привязывает каждую подкатегорию к материнской верхней категории.
Другими словами: вместо того, чтобы получить разделение на http://site/men/spain/#brand_name#/#element_name.html, мы получаем http://site/spain/#brand_name#/#element_name.html
Раздел Испания с символьным кодом spain существует в двух соседних разделах men и women, поэтому получаем ссылку совсем не на то, что ожидали.
Подскажите, что я неправильно делаю и как решить этот вопрос. Заранее спасибо.

Вероятно как вариант можно создать 2 папки
http://site/men/ и http://site/women/ - и в обе разместить один и тот же компонент, а потом его настраивать

А вообще можно кастомизировать компонент и в него прописать условие основанное на текущем УРЛ, и в зависимости от результата накладывать те или иные условия фильтра для вывода результата
ответил 20 Фев, 15 от Grimmi (2,560 баллов)
00 голосов
Предупреждение небольшое для тех кто будет делать по данной инструкции:
Цитата
Откройте файл /bitrix/components/bitrix/catalog.element/component.php

не советую делать изменения в коде компонента, находящегося в пространстве имён - bitrix. Для кастомизации нужно создать своё пространство имён, чтобы при обновлении модулей битрикса все изменения не "испарились".
ответил 30 Май, 15 от Crush777 (100 баллов)

Похожие вопросы

0 голосов
6 ответов
спросил 04 Авг, 13 от Plasma50 (360 баллов)
0 голосов
6 ответов
спросил 12 Май, 13 от Plare666 (720 баллов)
0 голосов
6 ответов
спросил 09 Фев, 13 от Oggi (520 баллов)
0 голосов
2 ответов