тема вижу реально больная для битрикса.
напишу мои соображения - вообще я думаю сделать через большой костыль
- вместо того, чтобы во всех компонентах менять урлы разделов и товаров ( а ведь кто знает, какие ещё компоненты будут кидать на сайт) я думаю сделать такую шляпу :
завести таблицу с полем OLD_URL и NEW_URL
с помощью обработчиков перехватываю все события по изменению, удалению, добавлению [B]разделов - [/B]поддерживаю обработчиками эту таблицу в актуальном состоянии короче
например
OLD_URL /catalog/razdel5/ ; NEW_URL /catalog/razdel1/razdel2/razdel3/razdel4/razdel5/
теперь костыль)) - во всех шаблонах - в футере в самом конце я подключаю мой файлик (впринципе можно и событиями главного модуля - которое там срабатывает в самом конце - ещё не смотрел -не суть)
суть в том что этим куском кода, который всегда отрабатывает в самом конце на каждой странице получить значение всего буфера
[B]$r = $APPLICATION->EndBufferContentMan();[/B]
и строковой функцией заменить все совпадения которые у меня в OLD_URL на NEW_URL
всё!
плюсы - не нужно кастомизировать ни одного компонента - всё будет работать с моим чпу
минусы - конечно же скорость - я сейчас тестирую варианты как производить эту автозамену - или тащить сразу все значения из базы и str_replace(массив OLD_URL , NEW_URL, [B]$r [/B] ) , либо регулярным выражением сразу найти все ссылки на каталог и затем тащить с таблицы значнния только для них и менять
понимаю конечно же что через задницу, но это самый [B]простой[/B] вариант в битриксе, который я вижу....
отпишусь ещё по результатам..