• Модуль: documentgenerator
  • Путь к файлу: ~/bitrix/modules/documentgenerator/lib/controller/dataprovider.php
  • Класс: BitrixDocumentGeneratorControllerDataProvider
  • Вызов: DataProvider::getPlaceholderAction
public function getPlaceholderAction($provider, $value)
{
	$originalValue = $value;
	$aliases = [$value];
	$value = str_replace(Document::THIS_PLACEHOLDER.'.'.Template::MAIN_PROVIDER_PLACEHOLDER.'.', '', $value);
	$value = str_replace(Document::THIS_PLACEHOLDER.'.', '', $value);
	$providers = explode('.', $value);
	while(count($providers) > 1)
	{
		$aliases[] = implode('.', $providers);
		array_shift($providers);
	}
	$fieldsQuery = FieldTable::getList([
		'filter' => [
			'@VALUE' => $aliases
		]
	]);
	$result = [];
	while($field = $fieldsQuery->fetch())
	{
		if(isset($result[$field['PLACEHOLDER']]))
		{
			if($field['PROVIDER'] == mb_strtolower($provider))
			{
				$result[$field['PLACEHOLDER']] = $field;
			}
		}
		else
		{
			$result[$field['PLACEHOLDER']] = $field;
		}
	}
	$selectedPlaceholder = false;
	foreach($result as $placeholder => $field)
	{
		if($field['VALUE'] == $value || $field['VALUE'] == $originalValue)
		{
			$selectedPlaceholder = $placeholder;
			break;
		}
		if($selectedPlaceholder)
		{
			if(mb_strlen($result[$selectedPlaceholder]['VALUE']) < mb_strlen($field['VALUE']))
			{
				$selectedPlaceholder = $placeholder;
			}
		}
	}
	if($selectedPlaceholder)
	{
		$result[$selectedPlaceholder]['SELECTED'] = 'y';
	}
	$placeholder = DataProviderManager::getInstance()->valueToPlaceholder($value);
	if(!isset($result[$placeholder]))
	{
		$field = ['PLACEHOLDER' => $placeholder];
		if(!$selectedPlaceholder)
		{
			$field['SELECTED'] = 'y';
		}
		$result[] = $field;
	}

	return $result;
}