Передо мной встала проблемка, точнее задача, которую хочется красиво решить. Например, при выборе элемента каталога на 3 уровне сейчас комплексный компонент выдает URL вида /catalogue/section_level3/element.html а хочется иметь URL вида /catalogue/section_level1/section_level2/section_level3/element.html После поиска по сайту нашел, что этот вопрос интересует не меня одного http://dev.1c-bitrix.ru/community/for...opic22765/ здесь предлагается в компоненте разбирать $_SERVER["REQUEST_URI"] и строить нужный URL Вот здесь обсуждается этот же вопрос http://dev.1c-bitrix.ru/community/for...age125898/ и высказываются минусы такого подхода, с которыми я согласен - потеря производительности мне не нужна, ведь всегда ожидается, что новый разрабатываемый проект будет очень популярным и суперпосещаемым
Нашелся также второй вариант решения http://dev.1c-bitrix.ru/community/for...sage45737/ в котором я пока не до конца понял как это реализовать. С БОТом вроде бы все понятно, а вот с mod_rewrite не очень. Пока не пойму как можно составить правила, которые подставляют символьные коды разделов всех уровней вложенности (в URL у меня используются не ID разделов и элементов, а их символьные коды, сделать это мне помогла документация http://dev.1c-bitrix.ru/api_help/iblo...entadd.php ).
В основном все это я пишу для себя, чтобы привести в порядок мысли, записать ссылки на источники, но и слегка надеюсь, что когда-нибудь это кто-нибудь прочитает. Буду признателен за советы, помощь, и просто рад пообщаться на эту тему.
Может быть использовать поле CODE и в него обработчиком писать полный адрес в публичной части. Кстати, тогда можно в настройках инфоблоках указать чтобы урл элемента строился по полю CODE.
Была такая мысль, но тут сложность - один элемент может принадлежать нескольким разделам каталога, поэтому писать полный путь к нему проблемно (будет массив значений) - над этим я думал и отбросил эту идею. а вот писать полный путь к разделу в поле CODE это идея, которую попробую на досуге осуществить. Спасибо Эльдар!
сделал обработчик, который пишет полный путь к разделу в поле CODE, но вылезла проблема: раздел 3 уровня, пишу путь level1/level2/level3 а хранится это в виде level1%2Flevel2%2Flevel3 даже если в компоненте применить urldecode, то ЧПУ работать не будет, плюс нужно править поиск, карту сайта... в общем кучу всяких компонентов судя по всему данный метод не самый хороший
Пришла в голову случайная мысль - можно добавить свойство элемента "адрес ссылки", и настроить события OnBeforeIblockElemenUpdate чтобы эта ссылка каждый раз заново строилась (на основе символьных кодов раздлов). Тогда не нужно будет в компонент кажрый раз дергать всю цепочку родительских разделов.
В настройках инфоблока нет возможности использовать значение свойства элемента для построения пути К тому же для элемента не нужно хранить весь путь от корня, для него достаточно символьного кода элемента во-первых элемент может принадлежать к нескольким разделам одновременно, следовательно значений свойства может быть несколько во-вторых нужна еще навигация и по разделам, а данный вариант пути к разделам не обрабатывает, следовательно путь к разделу будет не /catalogue/section_level1/section_level2/section_level3/ (как требуется) а просто /catalogue/section_level3/ (как сейчас)
В настройках инфоблока нет возможности использовать значение свойства элемента для построения пути
А он там и не нужен. Нжуную ссылку можно формировать прямо в компоненте (компонент ведь в любом случае прийдется писать для такой задачи свой).
Единственное для чего может пригодиться такой путь в свойстве инфоблока - так это для поиска. Тут можно либо использоват внешний поиск (например, Google Search) либо сделать специальную страницу, с которой редиректить на нужный товар при поиске.
К тому же для элемента не нужно хранить весь путь от корня, для него достаточно символьного кода элемента
Это уже на любителя. Можно хранить либо весь путь в свойстве элемента, либо путь цепочки разделов хранить в свойстве раздела.
во-вторых нужна еще навигация и по разделам, а данный вариант пути к разделам не обрабатывает, следовательно путь к разделу будет не /catalogue/section_level1/section_level2/section_level3/ (как требуется) а просто /catalogue/section_level3/ (как сейчас)
Навигацию по разделом можно построить аналогично - сделать пользовательское свойство и заполнять его при событии OnBeforeIBlockSectionUpdate.
Способ с формированием ссылки с помощью прогонки и анализа текста перед выводом http://dev.1c-bitrix.ru/community/for...ssage45737 никуда не годится на нагруженных проектах, так как в нем нельзя использовать кеширование (по крайней мере я себе пока не могу представить как это может выглядеть).
Иван, спасибо. Буду думать дальше. На данный момент ниодин из этих вариантов не устраивает полностью, но Ваш вариант, пожалуй, нравится мне больше других (который здесь http://dev.1c-bitrix.ru/community/for...pic22765/). Последний Ваш вариант (с путями в свойствах) нравится меньше всех - очень много доработок необходимо, лучше уж тогда вариант по идее от Эльдара Рахимбердина (см. выше) - там в компонентах нужно только urldecode добавить перед выводом ссылок и с ЧПУ разобраться.
Валентин, приветствую Вас. У меня возникла та же проблема, как и у Вас, столько всего перепробовал, а результата как такового не получил вообще... Хотел бы спросить, у Вас что то получилось? И как им образом Вы это смогли сделать?
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».