Модификация фотосета, правильное использование размеров

На днях столкнулся с проблемой в путях к изображениям в фотосетов при изменении размеров для фотосета в конфиге. Видел не раз и ранее топики на LS по данной тематике, но решение никто вроде не приводил, а разбираться с чужими проблемами было лень ;). Ну так как теперь проблема коснулась и меня решил поделиться с другими. Возможно команда LS внесет данные (либо похожие) изменения в будущие релизы, так что актуальность данной модификации будет равняться только на версию 1.0.1.

Итак начнемс.

Начнем с конфига:
идем в \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>


Вот собственно и все. Теперь при изменении размеров фотосета ваши фото остануться видимыми на сайте.

Данное решение не претендует на панацею, от всех бед и не отменяет надобность конвертации при изменении размеров. Но если уВ ас изображений очень много которые конвертировать Вы не хотите — то оно вполне подойдет для решения некотрых проблем.

ВНИМАНИЕ: при обновлении версии движка, данные изменения скорее всего будут затеры.

Оставить комментарий

Чтобы оставить комментарий или зарегистрируйтесь на сайте×

3 комментария

avatar
Спасибо, зачетно!
avatar
Круто! Очень актуально, спасибо.
avatar
Как же здорово, а то сейчас часто приходится играть с настройками и постоянно проблема с размерами фотосета… а тут Ваша статья :) Спасибо
еще