Как стать автором
Обновить

Самый простой thumb

Время на прочтение2 мин
Количество просмотров12K
Казалось бы, типовая задача, заполнить каталог изображений, подготовить для каждого несколько размеров и наложить произвольные фильтры, однако не нахожу в modx подходящего, простого и удобного инструмента.

Простая реализация phpThumb генератора на основе единственного tv и заданных параметров.


Пример вызова
[!thumb?path=`[+thumb+]`&size=`320x240`&tpl=`thumb`!]

Исходное изображение задается переменной шаблона [+thumb+]. Сниппет [[thumb]] из имени исходного файла (например image.jpg) и параметров (320x240) формирует единое имя нового файла (image.320x240.jpg). При обращении к каталогу картинок, в соответсвии с правилом RewriteRule apache перенаправляет запрос обработчику index.php, который разбивает имя файла обратно на параметры и при помощи phpThumb формирует требуемое изображение.

Сниппет [[thumb]]
Принимает один обязательный и два опциональных параметра
path путь к файлу картинки
[size] размер генерируемой картинки
[tpl] шаблон офромления

В зависимости от шаблона, сниппет либо возвращает оформленный в соответствии с шаблоном результат, либо строку с итоговым путем path

<?php
if (!empty($path)) {
	$size = (empty($size)) ? $size : '320x240';

	$path = explode('.', $path);
	array_splice($path, -1, 0, $size);
	$output = $path = implode('.', $path);

	if (!empty($tpl)) {
		$params['path'] = $path;
		$output = $modx->parseChunk($tpl, $params, '[+', '+]');
	}
}
return $output;
?>

Чанк {{thumb}}
Принимает один едиственный плейсхолдер [+path+]

<img src="[+path+]">

Обработчик запросов index.php
Принимает адрес изображения, разбивает адрес на аргументы и в соответствии с заданными параметрами генерирует и возвращает результат.

<?php
if (!empty($_GET['path'])) {
	if (!file_exists($path = $_GET['path'])) {
		$image = explode('.', $path);
		$size = end(array_splice($image, -2, 1));
		if (in_array($size, array('100x50', '200x100', '300x150'))) {
			$image = implode('.', $image);
			if (file_exists($image)) {
				list($width, $height) = explode('x', $size);
				require('phpthumb.class.php');
				$phpThumb = new phpThumb();
				$phpThumb->setSourceFilename($image);
				$phpThumb->setParameter('w', $width);
				$phpThumb->setParameter('h', $height);
				$phpThumb->setParameter('zc', '1');
				$phpThumb->setParameter('q', '100');

				if ($phpThumb->GenerateThumbnail()) {
					if ($phpThumb->RenderToFile($path)) {
						return header('Location: '.$path);
					}
				}
			}
		}
	}
}
return header("HTTP/1.0 404 Not Found");
?>

Правило перенаправления apache .htaccess
Запускает процедуру обработки изображения

<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php?path=$1 [L,QSA]
</IfModule>
Теги:
Хабы:
+3
Комментарии9

Публикации

Изменить настройки темы

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн