Цитата |
---|
kolandr пишет: Для того чтобы не заморачиваться с изминением размера изображений перед тем как добавлять их через админку, проще будет добавить код в init.php который будет уменьшать размеры картинок автоматически.
Код |
---|
Код
// **************************************************************************
// События которые срабатывают при создании или изминении элемента инфоблока
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("VANES_class", "ResizeMORE_PHOTO");
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("VANES_class", "ResizeMORE_PHOTO");
// **************************************************************************
class VANES_class {
function ResizeMORE_PHOTO(&$arFields) {
global $APPLICATION;
$IBLOCK_ID = array(2, 3, 4, 5, 6, 7); //ID инфоблоков свойство каторых нуждается в масштабировании
$PROPERTY_CODE = "MORE_PHOTO"; // код свойства
$imageMaxWidth = 1000; //Максимальная ширина картинки
$imageMaxHeight = 850; //Максимальная высота картинки
if(in_array(intval($arFields["IBLOCK_ID"], $IBLOCK_ID)) {
$VALUES = array();
$VALUES_OLD = array();
//Получаем свойство значение сво-ва MOREPHOTO
$res
= CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"],
"sort", "asc", array("CODE" => "MORE_PHOTO");
while ($ob = $res->GetNext()) {
$file_path = CFile::GetPath($ob['VALUE'] // Получаем путь к файлу
if($file_path) {
$imsize = getimagesize($_SERVER["DOCUMENT_ROOT"].$file_path); //Узнаём размер файла
// Если размер больше установленного минимума
if($imsize[0] > $imageMaxWidth or $imsize[1] > $imageMaxHeight) {
// Уменьшаем размер картинки
$file
= CFile::ResizeImageGet($ob['VALUE'], array('width'=>$imageMaxWidth,
'height'=>$imageMaxHeight), BX_RESIZE_IMAGE_PROPORTIONAL, true);
// добавляем в массив VALUES новую уменьшенную картинку
$VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file["src"]
} else {
// добавляем в массив VALUES старую картинку
$VALUES[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$file_path);
}
// Собираем в массив ID старых файлов для их удаления (чтобы не занимали место)
$VALUES_OLD[] = $ob['VALUE'];
}
}
// Если в массиве есть информация о новых файлах
if(count($VALUES) > 0) {
$ELEMENT_ID = $arFields["ID"]; // код элемента
$PROPERTY_VALUE = $VALUES; // значение свойства
// Установим новое значение для данного свойства данного элемента
CIBlockElement::SetPropertyValuesEx($ELEMENT_ID,
$arFields["IBLOCK_ID"], array($PROPERTY_CODE => $PROPERTY_VALUE));
// Удаляем старые большие изображения
foreach ($VALUES_OLD as $key=>$val) {
CFile:elete($val);
}
}
}
}
} |
Единственный минус в последних версиях битрикса перестало работать описание для дополнительных картинок! |
А код специально с ошибками?