Проста реалізація 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>