Простая реализация phpThumb генератора на основе единственного tv и заданных параметров.
Казалось бы, типовая задача, заполнить каталог изображений, подготовить для каждого несколько размеров и наложить произвольные фильтры, однако не нахожу в 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; ?>
Чанк
Принимает один едиственный плейсхолдер [+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>