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>
Mem: 3.5 mb, MySQL: 0.0027 s, 2 req., PHP: 0.0369 s, all: 0.0396 s, cache.