• Модуль: documentgenerator
  • Путь к файлу: ~/bitrix/modules/documentgenerator/lib/document.php
  • Класс: BitrixDocumentGeneratorDocument
  • Вызов: Document::handleMultipleProviderValue
protected function handleMultipleProviderValue(
	array $value,
	DataProvider $dataProvider,
	string $placeholder,
	string $providerName
)
{
	$fullPlaceholder = $placeholder;
	$placeholderParts = explode('.', $placeholder);
	$placeholder = '';
	foreach($placeholderParts as $part)
	{
		if($part === Template::MAIN_PROVIDER_PLACEHOLDER)
		{
			continue;
		}
		if($placeholder !== '')
		{
			$placeholder .= '.';
		}
		$placeholder .= $part;
		if($part === $providerName)
		{
			break;
		}
	}
	if(!$placeholder)
	{
		$this->result->addError(new Error('Multiple values for root provider are not allowed'));
		return false;
	}
	if(isset($this->selectFields[$placeholder]))
	{
		return DataProviderManager::getInstance()->getValueFromList($value);
	}
	if($dataProvider === null)
	{
		$fields = $this->getProvider()->getFields();
	}
	else
	{
		$fields = $dataProvider->getFields();
	}
	if(isset($fields[$providerName]))
	{
		$group = [];
		foreach($this->fields as $field)
		{
			if(is_string($field['VALUE']) && mb_strpos($field['VALUE'], $fullPlaceholder) !== false)
			{
				$group = $field['GROUP'];
				break;
			}
		}
		if(is_array($group))
		{
			// 3 = 1 (document) + 1(minimum) + 1(will be popped)
			$group = array_slice($group, 0, (3 + substr_count($placeholder, '.')));
		}
		$title = $providerName;
		if(isset($fields[$providerName]['TITLE']))
		{
			$title = $fields[$providerName]['TITLE'];
		}
		$this->selectFields[$placeholder] = [
			'TITLE' => $title,
			'VALUE' => $value,
			'GROUP' => $group,
		];
	}

	return DataProviderManager::getInstance()->getValueFromList($value);
}