Наши заметки о MODx
В этом разделе мы будем собирать небольшую копилку секретов по работе с системой управления контентом сайта (CMS) MODx. Эти заметки ни в коем случае не претендуют на лавры документации. На нашем сайте тема MODx вообще занимает небольшой уголок, и эти материалы мы размещаем только потому, что по роду основной работы нам приходится оказывать техническую поддержку нескольким десяткам организаций, использующих наши прототипы сайтов. В то же время кое-что может пригодиться и другим людям.
Мы не претендуем на изложение "истины в последней инстанции". Наверняка в этих заметках гуру MODx найдут неточности и ошибки. Мы будем очень благодарны, если на это нам укажут в комментариях.
В заметках мы стараемся не просто сразу приводить готовое правильное решение, но и показываем, как мы набивали шишки в процессе поиска.

Упрощенная версия плагина DirectResize


Несколько лет мы используем замечательный плагин DirectResize. Этому плагину мы посвятили несколько заметок, опубликованных на нашем сайте.

Замечание
Первоначальную версию разработал Arnaud, версию 0.8 разработал Metaller а затем она была значительно переработана, доведена до directresize_0.9.0 rev 6 и проект был закрыт автором.

То, что проект закрыт - это не беда. Беда в том, что постепенно в DirectResize выявилось множество глюков, особенно в линейке 0.9.

Плагин пожирает много памяти, конфликтует с другими элементами MODx. Да и постепенно многие картинки, раньше прекрасно показывавшиеся, иногда перестают отображаться.

Когда мне все это надоело, я занялся обратным процессом - не развитием, а "деградацией" DR. Попытался сделать его простым и надежным, как лом.

Чтобы не путаться, назвал плагин DirectResizeLite.

Как использовать плагин с точки зрения редактора сайта:

1.Редактор сайта в обычном порядке загружает на сайт (обычно в каталог assets/images) оригинальные изображения.

"Обычный порядок" - это использование FTP-клиента, файлового менеджера MODx или файлового менеджера "вижуального" редактора TinyMCE (или любого другого).

2. При необходимости вставить в контент страницы изображение редактор сайта любым способом вставляет в код страницы тег img, например

<img src="assets/images/demo/test.jpg" width="1200" height="800" title="" alt=""/>

Такой тег обычно формируется в "вижуальном" редакторе, но может быть написан и вручную.

Допустим, оригинальное изображение имеет размеры 1200х800 пикселей и оно не вписывается в дизайна сайта.

В этом случае редактор может изменить атрибуты width и height, например:

<img src="assets/images/demo/test.jpg" width="300" height="200" title="" alt=""/>

Размеры лучше изменять пропорционально (это удобно делать в редакторе картинки TinyMCE). Если размеры заданы не пропорционально, например width="300" height="800", то уменьшенное изображение будет с измененными пропорциями.

3. При просмотре страницы во время редактирования (BackEnd), например в TinyMCE, на странице будет показываться уменьшенное изображение, но это будет просто сжатый оригинал.

4. При просмотре страницы пользователем (FrontEnd) для изображений с измененными width и height будут показываться превьювы (миниатюра, thumbhail).

При щелчке по миниатюре в зависимости от используемого эффекта просмотра, будет показываться с каким-то "эффектом" увеличенное или полное изображение.

Вид в этот момент полностью определяется заданным эффектом. Например, highslide выводит в рамке изображение такого размера, чтобы оно полностью вписалось в окно браузера, а потом его можно дополнительно распахнуть до оригинальной величины.

Как работает плагин внутри:

1. Код тега img, введенный редактором, плагин никак не изменяет.

2. Во время события OnWebPagePrerender для изображений, находящихся на допустимых путях сравниваются размеры оригинального изображения и заданные в атрибутах width и height. Допускается обработка изображений в форматах JPG, PNG и GIF.

3. Если заданные атрибуты отличаются от оригинальных размеров, то:

а) Определяется имя файла превьюва с учетом ID документа, полного имени файла оригинала и значений атрибутов width и height

б) Если такой файл не найден, автоматически генерируется превьюв с размерами, заданными в атрибутах width и height.

в) В HTML-код, выдаваемый в браузер посетителя вставляется код изображения, соответсвующий заданному в конфигурации шаблону.

Например, для highslide код будет наподобие:

<a href="assets/images/demo/test.jpg" class="highslide" onclick="return hs.expand(this, {captionId: 'caption12'})">
<img src="assets/cache/drlite/1627/thm_assets--images--demo--test_jpg-300_200.jpg" width="300" height="200" /></a>
<div class="highslide-caption" id="caption12">

а для slimbox:

<a href="assets/images/demo/test.jpg" rel="lightbox">
<img src="assets/cache/drlite/1627/thm_assets--images--demo--test_jpg-300_200.jpg" width="300" height="200" /></a>

4. Если превьюв исчез (например, после очистки кэша) он создается заново.

5. В head страницы автоматически вставляется загрузка требуемых скриптов и таблиц стилей.

Установка

1. Скопировать в аssеts/plugins/ содержимое каталога drlite из дистрибутива.

2. Создать в аssеts/cache/ каталог drlite c правами на запись.

3. Отключить плагины DirectResize версий 0.8 или 0.9 если они использовались.

4. Создать плагин DirectResizeLite.

5. Скопировать в код плагина содержимое файла drlite.plugin.txt.

6. На вкладке "Конфигурация" в поле "Конфигурация плагина" вставить

&config=Конфигурация;string;highslide&clearCache=Очистка кеша;list;0,1,2;0

7. На вкладке "Системные события" отметить

OnWebPagePrerender

OnCacheUpdate

8. При необходимости выполнить тонкую конфигурацию плагина.

Файлы конфигураций

На вкладке "Конфигурация" возможно указание имени конфигурации плагина. Для настройки параметров используется файл конфигурации. Все файлы конфигурации расположены в папке плагина по адресу assets/plugins/drlite/configs/.

Вы можете создавать свои собственные файлы конфигурации. Название файла конфигурации обязательно должно соответствовать шаблону имя_конфигурации.config.php.

Для примера поставляются конфигурации

  • floatbox.config.php
  • highslide.config.php
  • slimbox-2.04.config.php

Они соответствуют "эффектам просмотров" floatbox, highslide и slimbox-2.04.

В конфигурационном файле указаны (и могут быть изменены) следующие параметры:

а) $tpl - шаблон для кода, "оборачивающего" каждое обработанное изображение

б) $header - шаблон кода, загружающего требуемые скрипты и таблицы стилей

в) $allow_from - список разрешенных для обработки каталогов. Изображения, находящиеся в других каталогах плагином не обрабатываются.

Сами "эффекты" являются самостоятельными библиотеками и с DirectResizeLite не поставляются.  Во избежание, так сказать....

Те, которые мы использовали для примеров, поставляются в составе EasyGallery 1.4 и располагаются в каталоге assets/libs/. При желании можно подключить любые другие "эффекты".

 

Подстановщики для использования в шаблонах

Использовано несколько подстановщиков, совместимых по смыслу с DirectResize.

[ +dr.id+ ] цифровой идентификатор изображения, уникальный в рамках данного документа
[ +dr.bigPath+ ] относительная ссылка на оригинальное изображение, например
assets/images/demo/test.jpg
[ +dr.thumbPath+ ] относительная ссылка на превьюв, например
assets/cache/drlite/1627/thm_assets--images--demo--test_jpg-300_200.jpg
[ +dr.thumbWidth+ ] ширина превьюва, например 300
[ +dr.thumbHeight+ ] высота превьюва, например 200
[ +dr.title+ ] значение атрибута title
[ +dr.alt+ ] значение атрибута alt
[ +dr.class+ ] значение атрибута class
[ +dr.style+ ] значение атрибута style
[ +dr.vspace+ ] значение атрибута vspace
[ +dr.hspace+ ] значение атрибута hspace

 

Плагин обновлен 18.04.2011. Изменения:

1. Код переделан для использования PHP 5.3.3 с дополнительной оптимизацией.

2. Добавлена возможность использования атрибутов alt,  class, style, vspace, hspace  в теге img и плейсхолдерах.

3. Устранена порча кодировки русских символов в атрибутах alt и tittle после обработки плагином.

Об различиях между DirectResizeLite и DirectResize мы напишем в следующей заметке.

28-02-2011 11:13:01



    Содержание раздела «Плагин DirectResizeLite»:
Комментарии любых посетителей

Написать комментарий


 
никита
Комментарий
Re: Упрощенная версия плагина DirectResize
Реплика №6: 07.02.2012, 04:58:32
Есть баг.
при выполнении такого запроса
/image.php?src=assets/images/111.jpg&fltr[]=crop|5%20-quality%2075%20-interlace%20line%20%22assets/images/111.jpg%22%20jpeg:%22assets/images/111.jpg%22;%20ls%20-l%20;&phpThumbDebug=8
то выводится содержимое пхптамба

у меня на одном сайте так злоумышленник смог получить доступ к сайту - загрузил свои файлы в папку manager.

В общем, это серьезная недоработка, требующая исправления.

Публиковать комментарий необязательно, но дать знать, что мой комментарий получен - очень желательно. Напишите в тексте новости, что исправление будет сделано и я буду спокоен! Это очень важно!

Спасибо!
Dmi3yy
Комментарий
неработает на 5.3.2
Реплика №5: 09.01.2012, 22:45:25
пишет 500еррор :(
Zoxon
Комментарий
Re: Упрощенная версия плагина DirectResize
Реплика №4: 24.10.2011, 21:53:10
Спасибо огромное, перерыл пол интернетов в поисках чего то подобного. Прекрасный плагин, то что нужно, и очень маленький :)

Надеюсь он будет дальше развиваться, ошибки будут исправляться и т.д.

Да и допишите в инструкцию по установке что нужно создать папку assets/cache/drlite т.к. mkdir() не у всех работает ;)
a.tuzhilkin
Комментарий
Re: Упрощенная версия плагина DirectResize
Реплика №3: 22.04.2011, 14:10:21
Во-во. Та же самая ошибка.
Ждем от автора фикс.
ShaggyDoc
Комментарий
Error: Function eregi_replace() is deprecated
Реплика №2: 18.04.2011, 08:59:56
Это связано с тем, что у вас PHP 5.3.3. Видимо, самую последнию версию Денвер поставили.

Да, функция eregi_replace устаревшая, её надо заменять.

Собственно это я сделал, вообще код еще раз переработал (и другие недостатки нашлись).

Исправленный плагин выложу, надо ещё денек потестировать.
grvit
Комментарий
Re: Упрощенная версия плагина DirectResize
Реплика №1: 12.04.2011, 15:44:21
пытаюсь разобраться с плагином, все время выдает :

PHP error debug
Error: Function eregi_replace() is deprecated
Error type/ Nr.: - 8192
File: M:\home\test\www\assets\plugins\drlite\drlite.php
Line: 143
Line 143 source: $img_attrib_src = eregi_replace("^.+src=('|\")","",$imgs[0][$n]);

Denwer + evo 1.0.5

(((