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