- Модуль: 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;
}