На фрилансе попалась одна интересная задача, сутью которой было:
У элементов инфоблока имеется свойство тип список, typeProds.
Над списком товаров выводится это свойство с такими урлами:
/catalog/motors/jonson/regul/ – регулируемый
/catalog/motors/jonson/servise/ – сервисный
где requl и service — это значения свойства.
Нужно было это сделать, решение кажется подсказала статья: https://dev.1c-bitrix.ru/support/forum/forum6/topic91373/
В перспективе с помощью этого можно делать красивые урлы для чего-либо.
Обобщаю:
Оба варианта идут до инициализации bitrix. У меня вопрос как произвести манипуляции с url перед вызовом компонента bitrix:catalog?
Опишу ситуацию. В инфоблоке настроены url:
#SITE_DIR#/catalog/#SECTION_CODE#/
#SITE_DIR#/catalog/#SECTION_CODE#/#ID#/
Но на сайте есть еще и URL вида:
#SITE_DIR#/catalog/#SECTION_CODE#/#FILTER_NAME#/
Мне необходимо перед вызовом компонента bitrix:catalog определять что находится в url ID или FILTER_NAME. Если FILTER_NAME, то я заношу его в arrFilter и убираю из url последнюю секцию. В 13 версии битрикса я заменял url в $APPLICATION->sDocPath2
РЕШЕНИЕ:
в php.ini или .haccess
прописать
auto_prepend_file = «скрипт в котором заменяется урл в $_SERVER»
в этом файле:
1 2 3 4 5 6 7 8 9 10 11 |
$application = \Bitrix\Main\Application::getInstance(); $context = $application->getContext(); $request = $context->getRequest(); $Response = $context->getResponse(); $Server = $context->getServer(); $server_get = $Server->toArray(); $server_get["REQUEST_URI"] = $_SERVER["REQUEST_URI"]; $Server->set($server_get); $context->initialize(new Bitrix\Main\HttpRequest($Server, array(), array(), array(), $_COOKIE), $Response, $Server); $_SERVER["REQUEST_URI"] = "/catalog/new-collection/?code={$curPath[3]}"; $APPLICATION->reinitPath(); |
Береш url сохраняешь что тебе надо удалить, в $server_get[«REQUEST_URI»] ставишь туда нужную ссылку, а тут пишешь ($_SERVER[«REQUEST_URI»] = «/catalog/new-collection/?code={$curPath[3]}»; ) оригинал ссылки с параметрами.
Примерно как то так. По идее должно помочь.
данный код преобразовывал /catalog/new-collection/odezda/ в /catalog/new-collection/?code=odezda