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>