Простая реализация phpThumb генератора на основе единственного tv и заданных параметров.
Казалось бы, типовая задача, заполнить каталог изображений, подготовить для каждого несколько размеров и наложить произвольные фильтры, однако не нахожу в modx подходящего, простого и удобного инструмента.
Простая реализация phpThumb генератора на основе единственного tv и заданных параметров.
[!thumb? &path=`` &size=`320x240` &tpl=`thumb`!]
Исходное изображение задается переменной шаблона . Сниппет из имени исходного файла (например image.jpg) и параметров (320x240) формирует единое имя нового файла (image.320x240.jpg). При обращении к каталогу картинок, в соответсвии с правилом RewriteRule apache перенаправляет запрос обработчику index.php, который разбивает имя файла обратно на параметры и при помощи phpThumb формирует требуемое изображение.
Сниппет
Принимает один обязательный и два опциональных параметра
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;
?>
Чанк
Принимает один едиственный плейсхолдер
<img src="">
Обработчик запросов 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>