• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblocksection.php
  • Класс: CAllIBlockSection
  • Вызов: CAllIBlockSection::createMnemonicCode
public function createMnemonicCode(array $section, array $options = []): ?string
{
	if (!isset($section['NAME']) || $section['NAME'] === '')
	{
		return null;
	}
	$iblockId = $section['IBLOCK_ID'] ?? 0;
	if ($iblockId !== null)
	{
		$iblockId = (int)$iblockId;
	}
	if ($iblockId <= 0)
	{
		return null;
	}

	if ($this->iblock !== null && $this->iblock['ID'] === $iblockId)
	{
		$iblock = $this->iblock;
	}
	else
	{
		$iblock = CIBlock::GetArrayByID($iblockId);
	}

	if (empty($iblock))
	{
		return null;
	}

	$code = null;
	if (isset($iblock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']))
	{
		$code = $this->generateMnemonicCode($section['NAME'], $iblockId, $options);
		if ($code === null)
		{
			return null;
		}

		if ($iblock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']['TRANSLITERATION'] === 'Y'
			&& (
				$iblock['FIELDS']['SECTION_CODE']['DEFAULT_VALUE']['UNIQUE'] === 'Y'
				|| ($options['CHECK_UNIQUE'] ?? 'N') === 'Y'
			)
		)
		{
			$id = (int)$section['ID'] ?? null;
			if (!$this->isExistsMnemonicCode($code, $id, $iblockId))
			{
				return $code;
			}

			$checkSimilar = ($options['CHECK_SIMILAR'] ?? 'N') === 'Y';

			$list = [];
			$iterator = IblockSectionTable::getList([
				'select' => ['ID', 'CODE'],
				'filter' => [
					'=IBLOCK_ID' => $iblockId,
					'%=CODE' => $code . '%',
				],
			]);
			while ($row = $iterator->fetch())
			{
				if ($checkSimilar && $id === (int)$row['ID'])
				{
					return null;
				}
				$list[$row['CODE']] = true;
			}
			unset($iterator, $row);

			if (isset($list[$code]))
			{
				$code .= '_';
				$i = 1;
				while (isset($list[$code . $i]))
				{
					$i++;
				}

				$code .= $i;
			}
			unset($list);
		}
	}

	return $code;
}