Пример обработчика текста, вставляемого в поле "Описание" - ссылки на изображения заменяем на локальные изображения:
| Код |
|---|
$eventManager = \Bitrix\Main\EventManager::getInstance();$eventManager->addEventHandler('iblock', 'OnBeforeIBlockSectionAdd', array('clInit', 'OnBeforeIBlockSectionAddHandler'));
$eventManager->addEventHandler('iblock', 'OnBeforeIBlockSectionUpdate', array('clInit', 'OnBeforeIBlockSectionAddHandler'));
class clInit{
function OnBeforeIBlockSectionAddHandler(&$arFields) {
if(strlen($arFields["DESCRIPTION"])>0
&& strpos($arFields["DESCRIPTION"],"<img")!==false
)
{
$pattern2="/(alt|src|title|width|height|align)=(\"|')(.+?)(\"|')/si";
$pattern="/<img([^>]*)\/?>/si";
preg_match_all($pattern,$arFields["DESCRIPTION"],$matches);
foreach($matches[1] as $k=>$image){
preg_match_all($pattern2,$image,$Attrmatches);
$attributes=array();
foreach($Attrmatches[1] as $kT=>$Tmp){
$attributes[$Tmp]=$Attrmatches[3][$kT];
}
$modifiedImages[$matches[0][$k]]=$attributes;
}
if(!empty($modifiedImages)){
foreach ($modifiedImages as $image=>$attributes) {
if(strpos($attributes['src'],"://")!==false){
$arFile = \CFile::MakeFileArray($attributes['src']);
if(!empty($arFile)){
$fid = \CFile::SaveFile(array_merge($arFile,['MODULE_ID'=>'iblock']),'iblock');
if(intval($fid)>0){
$src = \CFile::GetPath($fid);
if(file_exists($_SERVER['DOCUMENT_ROOT'].$src)){
$arFields['DESCRIPTION'] = str_replace($attributes['src'],$src,$arFields['DESCRIPTION']);
}
}
}
}
}
}
}
}
} |
Также можно не просто заменять ссылки на изображения, но и обрабатывать все атрибуты изображений: