Добро пожаловать на сайт Bitrix Q&A, где вы можете задавать вопросы о программировании и разработке на Битрикс и получать быстрые и квалифицированные ответы от профессионалов!


Свойство ИБ в УРЛ

0 голосов

Добрый день!

имеется инфоблок с пользовательским свойством TYPE(Тип), нужно чтобы оно отображалось в урл. Т.е. например есть инфоблок Новости, в нем есть типы - экономика, спорт, региональные. URL строится по правилу /content/regional/123 
/content/ - папка в которой лежит компонента 
regional/ - сам тип новости 
123/ id новости 
Хочу сделать что-то вроде /#SECTION_ID#/ только /#TYPE#/ 
много всего перерыл и сделал вот что: 
В news.list/component.php 
 

Код
if(strlen($arParams["FILTER_NAME"])<=0 || !preg_match("/^[A-Za-z_][A-Za-z01-9_]*$/", $arParams["FILTER_NAME"]))
{
   $arrFilter = array();
}
else
{
   $arrFilter = $GLOBALS[$arParams["FILTER_NAME"]];
   if(!is_array($arrFilter))
      $arrFilter = array();
}
 

Изменил на: 
 

Код
if(strlen($arParams["FILTER_NAME"])<=0 || !preg_match("/^[A-Za-z_][A-Za-z01-9_]*$/", $arParams["FILTER_NAME"]))
{
   $arrFilter = array( 
          "TYPE" = $arItem["PROPERTIES"]["TYPE"]["VALUE"],
      );
}
else
{
   $arrFilter = $GLOBALS[$arParams["FILTER_NAME"]];
   if(!is_array($arrFilter))
      $arrFilter = array();
}
 

В bitrix\components\test\news\templates\.default\news.php перед вызовом компонента test:news.list добавил: 
 

Код
GLOBAL $arrFilter = array( 
         "#TYPE#" = $_REQUEST["TYPE"], 
   );
 

В urlrewrite.php: 
 

Код
array(
      "CONDITION"   =>   "#^/content/([0-9a-zA-z]+)/([0-9]+)/.*#",
      "RULE"   =>   "TYPE=$1&ELEMENT_ID=$2",
      "ID"   =>   "test:news",
      "PATH"   =>   "/content/index.php",
   ),

Объясните пожалуйста где ошибка? И правильно ли делаю?

спросил 26 Окт от аноним

2 Ответы

0 голосов
1. Неправильно модифицировать код штатного битриксовского компонента. Хотя бы потому, что битрикс, как-бы, надо обновлять - и он при обновлении затрёт все ваши изменения в /bitrix/components/bitrix.

Надо - скопировать необходимые вам компоненты в "свой" раздел - /bitrix/components/MY_SITE/...

Их и подключать, и шаблонизировать, и курочить по мере необходимости...

2. Есть 2 момента при работе со ссылками - первое, это разбор ссылки при отработке компонента. Это, действительно, сначала urlrewrite, потом - код компонента и модуля инфоблоков, который считывает настройки ссылок инфоблока. Второе - это генерация ссылок на элементы ( и разделы ) инфоблока -- и тут не только модуль инфоблоков, но и модуль поиска может возникать. Но, опять же, настройки генерации ссылок берутся из свойств инфоблока.

3. Исходя из этого, по идее - связываться с $aarFilter вообще не нужно, urlrewrite оставить до штатного для этого компонента, а все настройки сделать в свойствах инфоблока - и проверить, на сколько оно работоспособно в таком виде. Докрутить в коде компонента - уже по необходимости.
ответил 28 Окт от root (20,920 баллов)
поможете сделать такое за донат?
0 голосов
Друзья, помогите такое сделать за донат. Неделю без сна. все перерыл в интернете, ответа не нашел.

Донат с меня.

пытаюсь сделать URL страницы детального просмотра, что бы передовался код свойства. Код и ID раздела передаются, Код и ID элемента, передаются, как в УРЛ сделать передачу еще и сода свойства.

Куда смотреть, что править...
ответил 09 Ноя от аноним

Похожие вопросы

0 голосов
5 ответов
спросил 06 Ноя, 13 от SicknezZz (200 баллов)
0 голосов
4 ответов
0 голосов
6 ответов
0 голосов
4 ответов
спросил 04 Сен, 13 от sergey911 (120 баллов)
0 голосов
1 ответ
спросил 17 Авг, 13 от Laleniel (160 баллов)
Управление продуктом: аналитика, разработка, продвижение