thumb

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

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