Возможность просмотра оригинального загруженного изображения в теме

В том или ином виде неплохо иметь возможность доступа к оригиналу загруженного изображения в теме. Идея не нова, есть даже плагин (не совместимый с последней версией) и схожая тема с решением.

Моё решение:
* в Topic.class.php в методе UploadTopicImageFile — загрузка с компьютера
меняем
@unlink($sFileTmp);
return $this->Image_GetWebPath($sFileImage);
на
$aPathInfo=pathinfo($sFileImage);
@rename($sFileTmp, $aPathInfo['dirname'].'/'.$aPathInfo['filename'].'_full.'.$aPathInfo['extension']);
return $this->Image_GetWebPath($sFileImage);
т.е. не удаляем оригинальное изображение, а переименовываем на имя конечного, но с приставкой _full
* добавляем автоматическое оборачивание <_img_> в <_a_> (ActionAjax.class.php метод EventUploadImage)
меняем
$this->Viewer_AssignAjax('sText',$sText);
на
$aPathInfo=pathinfo($sFile);
$sFileFull=$aPathInfo['dirname'].'/'.$aPathInfo['filename'].'_full.'.$aPathInfo['extension'];
if( file_exists( $this->Image_GetServerPath( $sFileFull ) ) )
 $sText='<a href="'.$sFileFull.'">'.$sText.'</a>';
$this->Viewer_AssignAjax('sText',$sText);


Как-то так :)

Критика и улучшения приветствуются!

9 комментариев

avatar
А можно посмотреть что получилось? тоже хочется такую фишку на сайт, ну и еще прикручу строчку «скачать оригинал», ну или что то типа того.
avatar
Вот такой вот код вставляется автоматом

Очевидно, что это не совсем элегантно, но весьма просто :)
avatar
Спасибо, будем пробовать
avatar
если хотим ставить watermark на 'оригинал', то меняем
@unlink($sFileTmp);
return $this->Image_GetWebPath($sFileImage);
на
$aPathInfo=pathinfo($sFileImage);
$this->Image_Resize($sFileTmp,$sDirUpload,$aPathInfo['filename'].'_full',Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),2*Config::Get('view.img_max_width'),null,true,$this->Image_BuildParams('real'));
@unlink($sFileTmp);
return $this->Image_GetWebPath($sFileImage);

и в config.local.php перекрываем параметры для watermark по аналогии с основным конфигом, но для 'real'
$config['module']['image']['real']['watermark_use'] = true;
$config['module']['image']['real']['watermark_type'] = 'text';
$config['module']['image']['real']['watermark_position'] = '-10,-10';
$config['module']['image']['real']['watermark_text'] = 'watermark';
  • SVK
  • 0
avatar
если использовать Image_Resize только для watermark (наш случай), то лучше в Image.class.php в функцию Resize для строки
$oImage->resize($iWidthDest,$iHeightDest,(!$iHeightDest),(!$aParams['watermark_use']));
добавить условие
if( $iWidthDest != $oImage->get_image_params('width' ) or
 $iHeightDest != $oImage->get_image_params('height') and $iHeightDest
)
avatar
Ещё, вероятно не всем следует давать эту возможность…
В метод UploadTopicImageFile добавляем условие для объекта $oUser, к примеру:
if( $oUser->getId() == 2 )

или getSkill(), getRating(), isAdministrator()

Признак модератора вычисляется относительно темы, и по этому не является свойством пользователя.
  • SVK
  • 0
avatar
Чтобы не открывать в отдельном окне, можно открывать в модальном. Для этого делаем все по инструкции автора топика, но в формировани ссылки делаем так
$sText='<a rel="facebox" href="'.$sFileFull.'">'.$sText.'</a>';

затем в файле config.php меняем
$config['view']['noindex'] = false;
если стоит aceAdmin, то в настройках убираем галочку
«Прятать» ссылки от поисковиков:
. Идем сюда Скачиваем исходники. Закидываем их в папку с шаблоном. Там же есть файлик header.tpl, прописываем туда все то, что описанно в руководстве.
avatar
Если в топике будет несколько картинок, подцепятся ли они в одну галерею в вашем варианте?
avatar
К сожалению такой возможности нет у этого скрипта, но думаю можно воспользовавшись аналогичным методом можно зацепить скрипт поддерживающий галерею.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.