Поддержать Проект

USDT TRC20

TBGKTYDs4yzU17vQbobbUB8epFFtFb6PKh

Обратная связь

[MODX] Guru
  • Информация
  • Разработчикам
  • Дополнения
    • DocLister
    • DLMenu
    • DLCrumbs
    • DLBuildMenu
    • DLLastViews
    • DLSiblings
    • DLRequest
    • DLglossary
    • DLSitemap
    • DocInfo
    • FormLister
    • Wayfinder
    • phpthumb
    • LikeDislike
    • eForm
    • Ditto
    • multiTV
    • AjaxMegaSearch
    • AjaxSearch
    • WebLoginPE
    • Breadcrumbs
    • CodeMirror
    • AnythingRating
    • Easy Newsletter
    • FirstChildRedirect
    • OpenGraphTags
    • ddTypograph
    • TagSaver
    • BlackList
    • CfgTv
    • ModxAccount
    • Forgot Manager Login
    • GetField
    • if
    • Jot
    • ListChild
    • ListIndexer
    • ManagerManager
    • ddMMEditor
    • MaxiGallery
    • MemberCheck
    • ddGetMultipleField
    • MetaX
    • MODxBB и phpBB
    • Yams
    • Personalize
    • PHx
    • Reflect
    • tagLinks
    • TransAlias
    • TvTagCloud
    • UltimateParent
    • WebSignup
    • WebLogin
    • countViews
    • thumb
    • imageCaptor
    • optimizeJPG
    • Preview Next
    • Shopkeeper
    • SiteMap
    • Sass
    • Selector
    • SimpleGallery
    • SimpleTube
    • SimpleFiles
    • Star Rating
    • MinifyX
    • adminNav
    • SimplePolls
    • CResource
    • MODxAPI
    • customTables
    • HtmlInLine
    • HtmlMinModxEvo
    • SHKUserProfile
    • PickDocsInTree
    • evoSearch
    • editDocs
    • PageBuilder
    • HybridAuth
    • Compare
    • alterTitle
  • Виджеты
  • Уроки
  • Разработчики
  • Готовые примеры
  • Блог
  • Конфиги
  • HTML коды
© [MODX] Guru
  • Дополнения

thumb Создание эскизов изображений

  • Дополнения
  • thumb
Поддержать: USDT TRC20: TBGKTYDs4yzU17vQbobbUB8epFFtFb6PKh
4348

thumb Создание эскизов изображений

Казалось бы, типовая задача, заполнить каталог изображений, подготовить для каждого несколько размеров и наложить произвольные фильтры, однако не нахожу в 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>