1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-16 23:00:51 +03:00

Новый формат именования файлов изображений в медиа в зависимости от размеров. Позволяет более гибко указывать размер изображений при выводе.

This commit is contained in:
Mzhelskiy Maxim 2014-02-17 14:13:47 +07:00
parent b8c68f545a
commit c80b959e7d
4 changed files with 27 additions and 6 deletions

View file

@ -176,7 +176,10 @@ class ModuleBlog_EntityBlog extends Entity {
*/
public function getAvatarPath($iSize=48) {
if ($sPath=$this->getAvatar()) {
return $this->Media_GetImageWebPath($sPath,$iSize.'crop');
if (is_numeric($iSize)) {
$iSize.='crop';
}
return $this->Media_GetImageWebPath($sPath,$iSize);
} else {
return Config::Get('path.skin.assets.web').'/images/avatars/avatar_blog_'.$iSize.'x'.$iSize.'.png';
}

View file

@ -298,6 +298,11 @@ class ModuleMedia extends ModuleORM {
}
/**
* Создает набор отресайзанных изображений
* Варианты наименований результирующих файлов в зависимости от размеров:
* file_100x150 - w=100 h=150 crop=false
* file_100x150crop - w=100 h=150 crop=true
* file_x150 - w=null h=150 crop=false
* file_100x - w=100 h=null crop=false
*
* @param $sFileSource
* @param $sDirDist
@ -326,7 +331,7 @@ class ModuleMedia extends ModuleORM {
/**
* Для каждого указанного в конфиге размера генерируем картинку
*/
$sNewFileName = $sFileName.'_'.$aSize['w'];
$sNewFileName = $sFileName.'_'.$aSize['w'].'x'.$aSize['h'];
if($oImage=$this->Image_Open($sFileSource,$aParams)) {
if ($aSize['crop']) {
$oImage->cropProportion($aSize['w']/$aSize['h'],'center');
@ -353,7 +358,7 @@ class ModuleMedia extends ModuleORM {
}
}
foreach($aSizes as $aSize) {
$sSize = $aSize['w'];
$sSize = $aSize['w'].'x'.$aSize['h'];
if ($aSize['crop']) {
$sSize.='crop';
}
@ -391,7 +396,7 @@ class ModuleMedia extends ModuleORM {
* Проверяем корректность размера
*/
foreach($aSizes as $aSizeAllow) {
$sSizeKey=$aSizeAllow['w'].($aSizeAllow['crop'] ? 'crop' : '');
$sSizeKey=$aSizeAllow['w'].'x'.$aSizeAllow['h'].($aSizeAllow['crop'] ? 'crop' : '');
if ($sSizeKey==$sSizeParam) {
$sSize=$sSizeKey;
/**
@ -625,6 +630,13 @@ class ModuleMedia extends ModuleORM {
}
/**
* Возвращает путь до изображения конкретного размера
* Варианты преобразования размеров в имя файла:
* 100 - file_100x100
* 100crop - file_100x100crop
* 100x150 - file_100x150
* 100x150crop - file_100x150crop
* x150 - file_x150
* 100x - file_100x
*
* @param string $sPath
* @param string $sSize
@ -633,6 +645,12 @@ class ModuleMedia extends ModuleORM {
*/
public function GetImagePathBySize($sPath,$sSize) {
$aPathInfo=pathinfo($sPath);
if (preg_match('#^(\d+)([a-z]{2,10})?$#i',$sSize,$aMatch)) {
$sSize=$aMatch[1].'x'.$aMatch[1];
if (isset($aMatch[2])) {
$sSize.=strtolower($aMatch[2]);
}
}
return $aPathInfo['dirname'].'/'.$aPathInfo['filename'].'_'.$sSize.'.'.$aPathInfo['extension'];
}

View file

@ -363,7 +363,7 @@ ls.media = (function ($) {
/* Расчитываем пропорциональную высоту изображения */
var height = v.h || parseInt(v.w * item.data('mediaHeight') / item.data('mediaWidth'));
return '<option value="'+ v.w + (v.crop ? 'crop' : '') + '">' + v.w + ' × ' + height + '</option>';
return '<option value="'+ v.w + 'x' + (v.h ? v.h : '') + (v.crop ? 'crop' : '') + '">' + v.w + ' × ' + height + '</option>';
}).join(''));
}
};

View file

@ -56,7 +56,7 @@
{foreach $aImageSizes as $aSize}
{$aSelectImageSizes[] = [
'value' => "{$aSize.w}{if $aSize.crop}crop{/if}",
'value' => "{$aSize.w}x{$aSize.h}{if $aSize.crop}crop{/if}",
'text' => "{$aSize.w} × {if $aSize.h}{$aSize.h}{else}*{/if}"
]}
{/foreach}