Получить ID Youtube - amel-post/bitrix.help GitHub Wiki

AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", 'prepareYoutubeId');
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", 'prepareYoutubeId');

function prepareYoutubeId(&$arFields)
{
    if ($arFields['IBLOCK_ID'] == 24)
    {
        $propId = getPropertyId(24, 'YOUTUBE_ID');
        foreach ($arFields['PROPERTY_VALUES'][$propId] as &$youtubeProp)
        {
            preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#", $youtubeProp['VALUE'], $matches);
            if (!empty($matches[0])) {
                $youtubeProp['VALUE'] = $matches[0];
            }
        }
    }
}

function getPropertyId($iblockId, $code)
{
    $result = false;
    $propList = CIBlockProperty::GetList([], ['IBLOCK_ID' => $iblockId, 'CODE' => $code]);
    if ($prop = $propList->Fetch())
    {
        $result = $prop['ID'];
    }
    return $result;
}