• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/model/entity.php
  • Класс: BitrixCatalogModelEntity
  • Вызов: Entity::initEntityCache
private function initEntityCache(): void
{
	$this->clearEntityCache();

	$this->aliases = [];
	$this->fieldMask = [];
	$fieldList = static::getDefaultCachedFieldList();
	if (Event::existEventHandlers($this, self::EVENT_ON_BUILD_CACHED_FIELD_LIST))
	{
		$event = new Event(
			$this,
			self::EVENT_ON_BUILD_CACHED_FIELD_LIST
		);
		$event->send();

		foreach($event->getResults() as $eventResult)
		{
			if ($eventResult->getType() == MainEventResult::SUCCESS)
			{
				$addFields = $eventResult->getParameters();
				if (!empty($addFields) && is_array($addFields))
				{
					foreach ($addFields as $alias => $field)
					{
						if (!isset($this->tabletFields[$field]))
						{
							continue;
						}
						$index = array_search($field, $fieldList);
						if (is_int($alias))
						{
							if ($index === false || !is_int($index))
							{
								$fieldList[] = $field;
							}
						}
						else
						{
							if ($index !== $alias)
							{
								$fieldList[$alias] = $field;
							}
						}
					}
				}
			}
		}
		unset($eventResult, $event);
	}

	$this->fields = $fieldList;
	unset($fieldList);
	if (!empty($this->fields))
	{
		foreach ($this->fields as $alias => $field)
		{
			if (is_int($alias))
			{
				$this->fieldMask[$field] = true;
			}
			else
			{
				$this->fieldMask[$alias] = true;
				$this->aliases[$alias] = $field;
			}
		}
		unset($alias, $field);
	}
	$this->fieldsCount = count($this->fields);
}