Не знаю решена ли эта проблема в поздних версиях, поэтому решил поделится.
Задача:
Создать для комплексного компонента 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. Найдите строку содержащую
3. Весь интересующий нас кусок кода выглядит так
после
добавьте
вот и все
Задача:
Создать для комплексного компонента 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"], |
вот и все