В данном примере проблема решена путем протаскивания необязательного параметра $adaptive через код вызываемых функций. Хотя, возможно, есть более аккуратное решение.
1. Открываем \protected\modules\apartments\views\widgetApartments_list_item.php:
- Код: Выделить всё
$res = Images::getMainThumb(150,100, $item->images);
добавляем 2 параметра:
- Код: Выделить всё
$res = Images::getMainThumb(150,105, $item->images, null, true);
Четвертый параметр - необязательный $id для getMainThumb. Его мы оставляем равным null.
Пятый параметр - $adaptive.
Теперь протаскиваем $adaptive через функции.
2. Открываем \protected\modules\images\models\Images.php:
- Код: Выделить всё
public static function getMainThumb($width, $height, $images, $id = null){
.......................
$return['thumbUrl'] = self::getThumbUrl($image, $width, $height);
меняем на:
- Код: Выделить всё
public static function getMainThumb($width, $height, $images, $id = null, $adaptive=false){
.......................
$return['thumbUrl'] = self::getThumbUrl($image, $width, $height, $adaptive);
Затем в том же файле.
- Код: Выделить всё
public static function getThumbUrl($image, $width=0, $height=0){
if($image['file_name_modified']){
$modifiedFile = self::returnModifiedThumbPath($image, $width, $height);
if(file_exists($modifiedFile)){
return self::returnThumbUrl($image, $width, $height);
} else {
return self::createThumb($image, $width, $height);
}
} else {
$image['file_name_modified'] = self::updateModifiedName($image);
return self::createThumb($image, $width, $height);
}
}
меняем на:
- Код: Выделить всё
public static function getThumbUrl($image, $width=0, $height=0, $adaptive=false){ //------------ cornil - thumbs in blocks
if($image['file_name_modified']){
$modifiedFile = self::returnModifiedThumbPath($image, $width, $height);
if(file_exists($modifiedFile)){
return self::returnThumbUrl($image, $width, $height);
} else {
return self::createThumb($image, $width, $height, $adaptive); //------------ cornil - thumbs in blocks
}
} else {
$image['file_name_modified'] = self::updateModifiedName($image);
return self::createThumb($image, $width, $height, $adaptive); //------------ cornil - thumbs in blocks
}
}
И наконец.
- Код: Выделить всё
public static function createThumb($image, $width, $height){
$newPath = self::returnModifiedThumbPath($image, $width, $height);
$originalPath = self::returnOrigPath($image);
if(!file_exists($originalPath)){
return '';
}
$thumb = new CImageHandler();
if($thumb->load($originalPath)){
$thumb->thumb($width, $height, self::KEEP_THUMB_PROPORTIONAL)
->save($newPath);
return self::returnThumbUrl($image, $width, $height);
} else {
return '';
}
}
меняем на:
- Код: Выделить всё
public static function createThumb($image, $width, $height, $adaptive=false){
$newPath = self::returnModifiedThumbPath($image, $width, $height);
$originalPath = self::returnOrigPath($image);
if(!file_exists($originalPath)){
return '';
}
$thumb = new CImageHandler();
if($thumb->load($originalPath)){
if($adaptive){
$thumb->adaptiveThumb($width, $height)
->save($newPath);
} else {
$thumb->thumb($width, $height, self::KEEP_THUMB_PROPORTIONAL)
->save($newPath);
}
return self::returnThumbUrl($image, $width, $height);
} else {
return '';
}
}
Теперь мы можем вызывать getMainThumb в адаптивном режиме.
Чтобы увидеть эффект, нужно очистить папки \uploads\objects\<номер_объекта>\modified для каждого объекта или на время поправить функцию getThumbUrl, чтобы она перегенерировала картинки при просмотре. Но первый вариант предпочтительнее.