Наткнулся на несправедливость, в пылу разработки облачной версии, забывают про коробку. Так например забыли про вывод в фильтре полей типа hlblock, выводится оно в таком виде, и никак нельзя установить в нём значение:
Или так (в этом случае кстати можно хотя бы ID записи ввести для отбора):
Решение и причина проблемы просты, для элементов инфоблока адаптацию поля под ui сделали, а для HL нет, поэтому надо её доделать, пока это не появится в обновлении.
Маскируемся под разработчика битрикс и лезем в код модуля crm:
/bitrix/modules/crm/lib/filter/userfielddataprovider.php
В строке 145 добавляем тип hlblock в условие, что бы он определялся как список (list):
Далее в этом же файле чуть ниже, в строке 261 (может отличаться смотрите ориентир), добавляем формирование списка значений:
Теперь поле выглядит как обычное поле списка с мультивыбором:
Однако это не всё, мне по этому полю нужно было отбирать участников рассылки в модуле CRM-Маркетинг. А там как оказалось поля формируются совсем другим методом. Поэтому открываем файл:
/bitrix/modules/crm/classes/general/crm_usertype.php
В строке 338 вставляем код формирования поля с элементами списка:
Теперь и при формировании сегмента рассылки поле фильтра выводится корректно:
![Screenshot_14.jpg](https://site-cloud-files.bitrix.info/main/e91/e91bb50be18690f496d54db970e13eec/Screenshot_14.jpg)
Или так (в этом случае кстати можно хотя бы ID записи ввести для отбора):
![Screenshot_16.jpg](https://site-cloud-files.bitrix.info/main/ca3/ca3de78deb935f632f2582fd0156a2a2/Screenshot_16.jpg)
Решение и причина проблемы просты, для элементов инфоблока адаптацию поля под ui сделали, а для HL нет, поэтому надо её доделать, пока это не появится в обновлении.
Маскируемся под разработчика битрикс и лезем в код модуля crm:
/bitrix/modules/crm/lib/filter/userfielddataprovider.php
В строке 145 добавляем тип hlblock в условие, что бы он определялся как список (list):
|| $typeID === 'hlblock' |
![Bezymyannyy2.jpg](https://site-cloud-files.bitrix.info/main/326/3265f95e56dded7f44e3e20cdd9c2b58/Bezymyannyy2.jpg)
Далее в этом же файле чуть ниже, в строке 261 (может отличаться смотрите ориентир), добавляем формирование списка значений:
elseif($typeID === 'hlblock') { $entity = new \CUserTypeHlblock(); $dbResult = $entity->GetList($userField); $items = array(); if(is_object($dbResult)) { $count = 0; while($ary = $dbResult->Fetch()) { $items[$ary['ID']] = $ary["VALUE"]; if(++$count > 500) { break; } } } return array( 'params' => array('multiple' => 'Y'), 'items' => $items ); } |
Примечание. Обратите внимание, что в формировании списка стоит лимит на 500 записей, такой же лимит выставлен и для iblock_element, и для iblock_section. Это не есть хорошо, конечно же в идеале поле с большим количеством элементов, должно получать список элементов динамически с фильтрацией, но думаю и этого дождёмся. |
![Bezymyannyy.jpg](https://site-cloud-files.bitrix.info/main/c75/c7582b0892a48866ca835a105c5a96da/Bezymyannyy.jpg)
Теперь поле выглядит как обычное поле списка с мультивыбором:
![Bezymyannyy3.jpg](https://site-cloud-files.bitrix.info/main/34a/34a5e9c92c4c0db9f20db460d219f6a6/Bezymyannyy3.jpg)
Однако это не всё, мне по этому полю нужно было отбирать участников рассылки в модуле CRM-Маркетинг. А там как оказалось поля формируются совсем другим методом. Поэтому открываем файл:
/bitrix/modules/crm/classes/general/crm_usertype.php
В строке 338 вставляем код формирования поля с элементами списка:
elseif($typeID === 'hlblock') { $entity = new \CUserTypeHlblock(); $dbResult = $entity->GetList($arUserField); $items = array(); if(is_object($dbResult)) { $count = 0; while($ary = $dbResult->Fetch()) { $items[$ary['ID']] = $ary["VALUE"]; if(++$count > 500) { break; } } } $arFilterFields[] = array( 'id' => $FIELD_NAME, 'name' => $fieldLabel, 'type' => 'list', 'params' => array('multiple' => 'Y'), 'items' => $items ); continue; } |
Примечание. В этом файле также ставится лимит на количество записей для iblock_element и iblock_section, только теперь 200, но я оставил 500. |
![Bezymyannyy4.jpg](https://site-cloud-files.bitrix.info/main/4a5/4a5e4841a054bab8514ebbe021b51240/Bezymyannyy4.jpg)
Теперь и при формировании сегмента рассылки поле фильтра выводится корректно:
![Screenshot_15.jpg](https://site-cloud-files.bitrix.info/main/497/4978263427aac093c9630e3b03d3f3c1/Screenshot_15.jpg)