Модификация фотосета, правильное использование размеров
На днях столкнулся с проблемой в путях к изображениям в фотосетов при изменении размеров для фотосета в конфиге. Видел не раз и ранее топики на LS по данной тематике, но решение никто вроде не приводил, а разбираться с чужими проблемами было лень ;). Ну так как теперь проблема коснулась и меня решил поделиться с другими. Возможно команда LS внесет данные (либо похожие) изменения в будущие релизы, так что актуальность данной модификации будет равняться только на версию 1.0.1.
Начнем с конфига:
идем в \config\config.php находим параметр устанавливающий размеры изображений фотосетов — $config['module']['topic']['photoset']['size'] и добавляем ему ключи. Я не стал заморачиваться и сделал Код
Конечно можно все это вынести в config.local.php принципиального значения на данном этапе это не имеет.
Идем дальше:
открываем модуль топика \classes\modules\topic\Topic.class.php находим метод загрузки изображений в топик UploadTopicPhoto и в ней делаем небольшие изменения, а именно код
Ну вот почти и все, осталось отредактировать 2 файла шаблона.
Открываем шаблон добавления фотосета \templates\skin\synio\actions\ActionPhotoset\add.tpl, находим строку
Открываем файл шаблона \templates\skin\synio\topic_photoset.tpl
и меняем строки:
строку
строку
Вот собственно и все. Теперь при изменении размеров фотосета ваши фото остануться видимыми на сайте.
Данное решение не претендует на панацею, от всех бед и не отменяет надобность конвертации при изменении размеров. Но если уВ ас изображений очень много которые конвертировать Вы не хотите — то оно вполне подойдет для решения некотрых проблем.
Итак начнемс.
Начнем с конфига:
идем в \config\config.php находим параметр устанавливающий размеры изображений фотосетов — $config['module']['topic']['photoset']['size'] и добавляем ему ключи. Я не стал заморачиваться и сделал Код
$config['module']['topic']['photoset']['size'] = array( // список размеров превью, которые необходимо делать при загрузке фото
array(
'w' => 1000,
'h' => null,
'crop' => false,
),
array(
'w' => 500,
'h' => null,
'crop' => false,
),
array(
'w' => 100,
'h' => 65,
'crop' => true,
),
array(
'w' => 50,
'h' => 50,
'crop' => true,
)
);
заменяем на $config['module']['topic']['photoset']['size'] = array( // список размеров превью, которые необходимо делать при загрузке фото
'large'=>array(
'w' => 1000,
'h' => null,
'crop' => false,
),
'medium'=>array(
'w' => 500,
'h' => null,
'crop' => false,
),
'small'=>array(
'w' => 100,
'h' => 65,
'crop' => true,
),
'mini'=>array(
'w' => 50,
'h' => 50,
'crop' => true,
)
);
Конечно можно все это вынести в config.local.php принципиального значения на данном этапе это не имеет.
Идем дальше:
открываем модуль топика \classes\modules\topic\Topic.class.php находим метод загрузки изображений в топик UploadTopicPhoto и в ней делаем небольшие изменения, а именно код
foreach ($aSizes as $aSize) {
/**
* Для каждого указанного в конфиге размера генерируем картинку
*/
$sNewFileName = $sFileName.'_'.$aSize['w'];
$oImage = $this->Image_CreateImageObject($sFile);
if ($aSize['crop']) {
$this->Image_CropProportion($oImage, $aSize['w'], $aSize['h'], true);
$sNewFileName .= 'crop';
}
$this->Image_Resize($sFile,$sPath,$sNewFileName,Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),$aSize['w'],$aSize['h'],true,$aParams,$oImage);
}
правим так чтобы получилось foreach ($aSizes as $key=>$aSize) {
/**
* Для каждого указанного в конфиге размера генерируем картинку
*/
$sNewFileName = $sFileName.'_'.$key;
$oImage = $this->Image_CreateImageObject($sFile);
if ($aSize['crop']) {
$this->Image_CropProportion($oImage, $aSize['w'], $aSize['h'], true);
}
$this->Image_Resize($sFile,$sPath,$sNewFileName,Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),$aSize['w'],$aSize['h'],true,$aParams,$oImage);
}
Далее еще небольшая правка в этом файле, а именно удаления изображений фотосета — в методе deleteTopicPhoto: код foreach ($aSizes as $aSize) {
$sSize = $aSize['w'];
if ($aSize['crop']) {
$sSize .= 'crop';
}
$this->Image_RemoveFile($this->Image_GetServerPath($oPhoto->getWebPath($sSize)));
}
делаем такимforeach ($aSizes as $key=>$aSize) {
$this->Image_RemoveFile($this->Image_GetServerPath($oPhoto->getWebPath($key)));
}
Далее ищем файл экшена фотосета \classes\actions\ActionPhotoset.class.php, а в нем метод EventUpload и в нем строку $this->Viewer_AssignAjax('file', $oPhoto->getWebPath('100crop'));
меняем на$this->Viewer_AssignAjax('file', $oPhoto->getWebPath('small'));
и в методе EventGetMore изменить в строке $aResult[] = array('id' => $oPhoto->getId(), 'path_thumb' => $oPhoto->getWebPath('50crop'), 'path' => $oPhoto->getWebPath(), 'description' => $oPhoto->getDescription());
снова изменить ключ чтобы получилась такая строка$aResult[] = array('id' => $oPhoto->getId(), 'path_thumb' => $oPhoto->getWebPath('mini'), 'path' => $oPhoto->getWebPath(), 'description' => $oPhoto->getDescription());
Ну вот почти и все, осталось отредактировать 2 файла шаблона.
Открываем шаблон добавления фотосета \templates\skin\synio\actions\ActionPhotoset\add.tpl, находим строку
<img src="{$oPhoto->getWebPath('100crop')}" alt="image" />
и меняем на <img src="{$oPhoto->getWebPath('small')}" alt="image" />
.Открываем файл шаблона \templates\skin\synio\topic_photoset.tpl
и меняем строки:
строку
<img src="{$oMainPhoto->getWebPath(500)}" alt="image" id="photoset-main-image-{$oTopic->getId()}" />
меняем на<img src="{$oMainPhoto->getWebPath('medium')}" alt="image" id="photoset-main-image-{$oTopic->getId()}" />
строку
<li><a class="photoset-image" href="{$oPhoto->getWebPath(1000)}" rel="[photoset]" title="{$oPhoto->getDescription()}"><img src="{$oPhoto->getWebPath('50crop')}" alt="{$oPhoto->getDescription()}" /></a></li>
меняем на <li><a class="photoset-image" href="{$oPhoto->getWebPath('large')}" rel="[photoset]" title="{$oPhoto->getDescription()}"><img src="{$oPhoto->getWebPath('small')}" alt="{$oPhoto->getDescription()}" /></a></li>
Вот собственно и все. Теперь при изменении размеров фотосета ваши фото остануться видимыми на сайте.
Данное решение не претендует на панацею, от всех бед и не отменяет надобность конвертации при изменении размеров. Но если уВ ас изображений очень много которые конвертировать Вы не хотите — то оно вполне подойдет для решения некотрых проблем.