• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/template/functions/fabric.php
  • Класс: BitrixIblockTemplateFunctionsFabric
  • Вызов: Fabric::createInstance
static function createInstance($functionName, $data = null) //todo rename createInstance
{
	if (!is_string($functionName))
	{
		return new FunctionBase($data);
	}
	if (isset(self::$defaultFunctionMap[$functionName]))
	{
		/** @var FunctionBase $functionClass */
		$functionClass = self::$defaultFunctionMap[$functionName];
		return new $functionClass($data);
	}
	elseif (isset(self::$functionMap[$functionName]))
	{
		/** @var FunctionBase $functionClass */
		$functionClass = self::$functionMap[$functionName];
		return new $functionClass($data);
	}
	else
	{
		$event = new BitrixMainEvent("iblock", "OnTemplateGetFunctionClass", array($functionName));
		$event->send();
		if ($event->getResults())
		{
			foreach($event->getResults() as $evenResult)
			{
				if($evenResult->getType() == BitrixMainEventResult::SUCCESS)
				{
					$functionClass = $evenResult->getParameters();
					if (is_string($functionClass) && class_exists($functionClass))
					{
						self::$functionMap[$functionName] = $functionClass;
					}
					break;
				}
			}
		}
		if (isset(self::$functionMap[$functionName]))
		{
			$functionClass = self::$functionMap[$functionName];
			return new $functionClass($data);
		}
	}

	return new FunctionBase($data);
}