• Модуль: highloadblock
  • Путь к файлу: ~/bitrix/modules/highloadblock/classes/general/prop_directory.php
  • Класс: CIBlockPropertyDirectory
  • Вызов: CIBlockPropertyDirectory::getEntityFieldsByFilter
static function getEntityFieldsByFilter($tableName, $listDescr = array()): array
{
	$arResult = array();
	$tableName = (string)$tableName;
	if (!is_array($listDescr))
		$listDescr = array();
	if (!empty($tableName))
	{
		if (!isset(self::$hlblockCache[$tableName]))
		{
			self::$hlblockCache[$tableName] = HLHighloadBlockTable::getList(
				array(
					'select' => array('TABLE_NAME', 'NAME', 'ID'),
					'filter' => array('=TABLE_NAME' => $tableName)
				)
			)->fetch();
		}
		if (!empty(self::$hlblockCache[$tableName]))
		{
			if (!isset(self::$directoryMap[$tableName]))
			{
				$entity = HLHighloadBlockTable::compileEntity(self::$hlblockCache[$tableName]);
				self::$hlblockClassNameCache[$tableName] = $entity->getDataClass();
				self::$directoryMap[$tableName] = $entity->getFields();
				unset($entity);
			}
			if (!isset(self::$directoryMap[$tableName]['UF_XML_ID']))
				return $arResult;
			$entityDataClass = self::$hlblockClassNameCache[$tableName];

			$nameExist = isset(self::$directoryMap[$tableName]['UF_NAME']);
			if (!$nameExist)
				$listDescr['select'] = array('UF_XML_ID', 'ID');
			$fileExists = isset(self::$directoryMap[$tableName]['UF_FILE']);
			if ($fileExists)
				$listDescr['select'][] = 'UF_FILE';

			$sortExist = isset(self::$directoryMap[$tableName]['UF_SORT']);
			$listDescr['order'] = array();
			if ($sortExist)
			{
				$listDescr['order']['UF_SORT'] = 'ASC';
				$listDescr['select'][] = 'UF_SORT';
			}
			if ($nameExist)
				$listDescr['order']['UF_NAME'] = 'ASC';
			else
				$listDescr['order']['UF_XML_ID'] = 'ASC';
			$listDescr['order']['ID'] = 'ASC';
			/** @var BitrixMainDBResult $rsData */
			$rsData = $entityDataClass::getList($listDescr);
			while($arData = $rsData->fetch())
			{
				if (!$nameExist)
					$arData['UF_NAME'] = $arData['UF_XML_ID'];
				$arData['SORT'] = ($sortExist ? $arData['UF_SORT'] : $arData['ID']);
				$arResult[] = $arData;
			}
			unset($arData, $rsData);
		}
	}
	return $arResult;
}