Please wait!
Please wait!

ALEXEYWORLD.COM

alexeyworld.com

Формирование DETAIL_PAGE_URL в bitrix, когда товар в нескольких группах

bitrix

Работая с bitrix столкнулся с одной проблемой, точнее с тем, как формируется DETAIL_PAGE_URL у элементов. В целом все хорошо и работает. Но в случае, когда товар находится в нескольких группах, то может возникнуть проблема.

Итак, как же формируется DETAIL_PAGE_URL? Для формирования пути используется функция ReplaceDetailUrl, кторая находится в файле bitrix/modules/iblock/classes/general/iblock.php. Вторым параметром функция принимает элемент, для которого необходимо построить url. И в этом же элементе есть поле IBLOCK_SECTION_ID, по которому и получаем url раздела. Вся проблема в том, что товар в нескольких группах, то это поле всегда заполняется разделом с наименьшим ID. Я же столкнулся с задачей, когда для работающего проекта строились неверные url для товара из-за того, что первым разделом был тот, который указывать не нужно. Таково требование было. Как же быть в данной ситуации?

Варианта решения этой проблемы два: модифицировать функцию ReplaceDetailUrl или во всех местах вывода товара в файле result_modifier.php переписывать значение DETAIL_PAGE_URL.

В обоих случаях нужно будет получить списко разделов, в которых находится элемент, при помощи функции CIBlockElement::GetElementGroups, выбрать нужный раздел из списка и записать его в IBLOCK_SECTION_ID. Если мы это сделали в result_modifier.php, то теперь можем вызывать функцию ReplaceDetailUrl и присваивать полученное значение в поле DETAIL_PAGE_URL.

Если это было сделано в начала функции ReplaceDetailUrl, тобольше никаких действий делать не нужно.

Какой вариант является более приемлемым решать лично каждому.

опубликовано: 11.11.2015, 11:12 | просмотров: 12802 |