Небольшая альтернатива sgThumbs

Небольшая альтернатива sgThumbs - Liber.pro - личный сайт Алексея Либера Картинка  1

То ли у меня уже башка не варила, толи я хрен его знает, но не удалось мне запустить плагин sgThumbs так, как мне нужно было, а именно: при загрузке фотографий нужны были различные миниатюрки, которые клались бы в различные папочки. Для тех кто не в теме: это для того, чтобы ресайз происходил сразу при загрузке, а не после первой генерации страницы.  В итоге из нескольких плагинчиков собрал один. Из минусов - обычный велосипед, из небольших плюсов: все в админке, без файлов. Выкладываю код в бОльшей степени для себя, но, мало ли кому еще пригодится.

Плагин: Watermarker - название важно! События: OnFileManagerUpload, OnFileBrowserUpload 

//<?php
$e = &$modx->Event;
$config = array();

// Конфиг. Folder папка вида /assets/cache/images/assets/galleries/номер_галерии/$folder, Опции - как нужно ресайзить
$config[] = array(
	'source' => 'assets/galleries',
	'processing' => array(
		array(
			'options' => 'w=540,h=280,zc=1,fltr=wmi|/img/watermark540.png|C|80|5|5',
			'folder' => '540/'
		),
		array(
			'options' => 'w=280,h=280,zc=1,fltr=wmi|/img/watermark280.png|C|80|5|5',
			'folder' => '280/'
		),
		array(
			'options' => 'w=660,h=660,zc=1,fltr=wmi|/img/watermark660.png|C|80|5|5',
			'folder' => '660/'
		),
		array(
			'options' => 'fltr=wmi|/img/watermark.png|C|80|5|5',
			'folder' => 'natural/'
		)
	)
);

if ($e->name == 'OnFileBrowserUpload' || $e->name == 'OnFileManagerUpload') {	
	$path = $filepath . '/' . $filename;
	$filepath_cache = str_replace('/assets/galleries/','/assets/cache/images/assets/galleries/',$filepath);
	if(!is_dir($filepath_cache)) mkdir($filepath_cache);
	
	$path_parts = pathinfo($path);
	if (in_array($path_parts['extension'],explode(',',$modx->config['upload_images']))) {
		if (!class_exists('phpthumb')) include_once(MODX_BASE_PATH.'assets/snippets/phpthumb/phpthumb.class.php');        
        foreach ($config as $cfg) 
		{
        	if (strpos($filepath,$cfg['source'])) 
			{
        		foreach ($cfg['processing'] as $processing) 
				{
        			$phpThumb = new phpthumb();
        			$options = strtr($processing['options'], Array("," => "&", "_" => "=", '{' => '[', '}' => ']'));
					parse_str($options, $params);
					$params['f'] = $path_parts['extension'];
					foreach ($params as $key => $value) {
	  					$phpThumb->setParameter($key, $value);
					}
  					$phpThumb->setSourceFilename($path);
					if ($phpThumb->GenerateThumbnail()) {
						if (empty($processing['folder'])) {
							$phpThumb->RenderToFile($path);
						}
						else 
						{
							$folder = $filepath_cache.'/'.$processing['folder'];
							if(!is_dir($folder)) mkdir($folder);
							$phpThumb->RenderToFile($folder.'/'.$filename);	
						}
					}
					else {
						$modx->logEvent(0, 3, implode('<br/>', $phpThumb->debugmessages), 'phpthumb');
					}
        		}
        	}
        }
	}
};

Ну и сниппет для вывода этих самых картинок. Называем libThumbs, код:

<?php
$pt = $modx->getFullTableName('site_plugins');
$code = $modx->db->getValue('Select plugincode from '.$pt.' where name="Watermarker"');
eval($code);

if (count($config[0][processing]))
{
	foreach ($config[0][processing] as $conf)
	{
		if ($conf['folder']==$opt.'/')
		{
			$options = $conf['options'];
			$folder = $opt;			
		}
	}
}

	
$i = explode('/',$img);
$image = str_replace(end($i),$folder.'/'.end($i),$img);
$file_name = MODX_BASE_PATH.str_replace('assets/galleries/','assets/cache/images/assets/galleries/',$image);
if (file_exists($file_name)) $thumb = str_replace('assets/galleries/','assets/cache/images/assets/galleries/',$image);
else $thumb = $modx->runSnippet('phpthumb',array('input'=>$img,'options'=>$options));

return $thumb;

Параметра три: &img - картинка, &opt - название папки откуда брать кэшированную картинку, &options - аналогично phpThumb для тех картинок, которые не найдены в папке.

Следующая работа

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