+7 495 008 8452 пн.-пт. 10:00 – 17:00
Загрузка...
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Программная настройка столбцов списка элементов ИБ в админке инфоблоков для bitrix

Мне потребовалось программно создавать инфоблоки и для них сразу выставлять какие столбцы будут видимыми при просмотре списка элементов в админке.
Вот результаты работы скрипта: новый ИБ, для которого настроен показ определённых свойств в списке.
list.png

Вся работа скрипта сводится к вызову

CUserOptions::SetOptionsFromArray($arOptions);
Ключи массива
["c"] - указывает на категорию
["n"] - на имя
["v"] - значение
["d"] - указывает, значение будет для всех, или для пользователя



Для любого ИБ можно рассчитать название, по которому хранятся эти настройки:
'n' => "tbl_iblock_list_".md5($IBlockType.".".$IBlockID),
/**
* Настройка столбцов списка элементов ИБ в админке инфоблоков
*
* @param integer $IBlockID — ID инфоблока
* @param string $arIBlockListAdminColumns — символьные коды полей и свойств для показа в списке элементов ИБ
* @param string $orderByColumnName — наименования поля или свойства по которому нудно отсортировать
* @param string $orderDirection - направление сортировки
* @param integer $pageSize - количество элементов на страницу
* @param boolean $isToAllUsers - значение будет для всех, или для текущего пользователя
* @return boolean
*/
function SetIBlockAdminListDisplaySettings($IBlockID, $arIBlockListAdminColumns, $orderByColumnName, $orderDirection, $pageSize, $isToAllUsers = TRUE)
{
   // по ID инфоблока получить его тип
   $IBlockType = CIBlock::GetArrayByID($IBlockID, 'IBLOCK_TYPE_ID');
   if(FALSE == $IBlockType)
   {
      return FALSE;
   }
   // и все его свойства
   $arPropertyCode = array();
   $obProperties = CIBlockProperty::GetList(array("sort"=>"asc"), array("IBLOCK_ID"=>$IBlockID));
   while($arProp = $obProperties->GetNext(true, false)) {
      $arPropertyCode[$arProp['CODE']] = $arProp['ID'];
   }
   // пройти по массиву для показа и заменить CODE на PROPERTY_ID свойства
   $arColumnList = array();
   foreach($arIBlockListAdminColumns as $columnCode)
   {
      if(TRUE == array_key_exists($columnCode, $arPropertyCode))
      {
         $arColumnList[] = 'PROPERTY_'.$arPropertyCode[$columnCode];
      }
      else
      {
         $arColumnList[] = $columnCode;
      }
   }
   $columnSettings = implode(',',$arColumnList);

   // выставляем поля в списке
   $arOptions[] = array(
      'c' => 'list',
      'n' => "tbl_iblock_list_".md5($IBlockType.".".$IBlockID),
      'v' => array(
         'columns'=> strtoupper($columnSettings),
         'by'=> strtoupper($orderByColumnName),
         'order'=> strtoupper($orderDirection),
         'page_size' => $pageSize
      ),
   );
   if(TRUE == $isToAllUsers)
   {
      $arOptions[0]['d']='Y';
   }
   CUserOptions::SetOptionsFromArray($arOptions);
}// end of SetIBlockAdminListDisplaySettings


Назад в раздел

Подписаться на новые материалы раздела:
Загрузка...