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>