))заранее извините за синтаксические и граматические ошибки) пишу на скорую руку)
идея в том чтобы получить на сайте нормальные чпу с полным адресом элементов и разделов каталога
ну тоесть site.com/catalog/razdel1/podrazdel1_1/podpodrazdel1_1_1/tovar.html а не site.com/catalog/podpodrazdel1_1_1/tovar.html
тема больная для битрикса - пару раз поднималась на форуме, окончательного решения никто не предложил. были предожения обработчиками сохранять урл в пользовательское свойство раздела и свойство элемента... но в таком потходе куча нюансов - прийдётся допустим переписывать все штатные компоненты, которые выводят элемент каталога... поиск, всякие менюшки, карту сайта и тд т и.п. вобщем везде вместо DETAIL_PAGE_URL прийдётся вставлять правльный путь
я не претендую на нормальное решение - я хочу показать свой костыль, которым я быстро решил эту задачу, и просто начать небольшое обсуждение как можно правильнее решить эту задачу
минусы моего решения - костыль - работает через задницу
плюсы - абсолютно простое решение, придумал и сделал за час, все штатные компоненты, которые выводят DETAIL_PAGE_URL или SECTION_PAGE_URL будут выводить совершенно верный урл c любым уровнем вложенности! ))
итак сначала я создал таблицу с 2мя полями - real_section_url и rewrite_url для реального урла радела (тот самый который#SITE_DIR#/catalog/#SECTION_CODE#/) и для того, который мы хотим получить на сайте
далее всё просто )) 1) обработчиками действий с разделами OnAfterIBlockSectionAdd и OnAfterIBlockSectionUpdate мы поддерживаем эту таблицу в актуальном состоянии - для каждого изменения или добавления мы записываем в поле rewrite_url верный урл
2) сам костыль вешаем обработчик на завершение страницы OnEpilog в нём $r=$APPLICATION->EndBufferContentMan(); получаю всю буферизованую страницу в переменную))) затем тяну с моей таблицы в 2 массива значения 2х столбцов и $r = str_replace($arrFrom,$arrTo,$r);
ну и вывожу то что получилось после замены ) echo $r;
работает по всему сайту) везде урлы как надо) тоесть происходит замена для разделов и для товаров соответтсвенно тоже адреса становятся правильными
(кстати есть ещё неотдокументированое событие OnEndBufferContent - потом на досуге поэксперементирую с ним - ато не очень красиво наверное делать так $r=$APPLICATION->EndBufferContentMan(); )))) - не в этом суть) я просто хотел описать принцип)
а приходилось ли вам решать эту же проблему с урлами в каталоге и как вы её решали или как идите решение?
Алексей Котов буду рад если в двух словах объясните почему или дадите почитать - просто сейчас снова проект делаю, и там ещё подлиннее и похлеще чпу требуют сделать изз соображений сео наверное а меня так ломает всю эту муть делать, если объясню что это вредно - думаю откажутся....
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».