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

Как настроить плагин для миниатюр


Настройка плагина для создания миниатюр подробно разобрана в документации, в том числе на русском языке. Здесь мы уделим внимание наиболее интересным моментам.

Общий обзор плагина DirectResize (далее DR) мы сделали в предыдущей заметке. Там мы разобрались, что же он делает. Теперь разберемся с тем, как заставить его делать это правильно. Однако упомянем и про установку плагина.

  Установка DR версии 0.8

1. Распаковать из архива плагина все файлы в папку assets.

2. Выставить права на запись  на папку assets/drgalleries/ .

3. Создать новый плагин DirecrResize и скопировать в него содержимое файла directResize.plugin.txt

4. Открыть вкладку Конфигурация в окне создания плагина и в поле Конфигурация плагина вставить


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

Замечание:
Так рекомендуется в документации.
Мы у себя настроили
&config=Конфигурация;string;slimbox &clearCache=Очистка кеша;list;0,1,2;0

5. Открыть вкладку Системные события и выставить галочки на события OnWebPagePrerender, OnCacheUpdate, OnBeforeDocFormSave, OnDocFormPrerender.

6. Сохранить плагин

Это всё просто, штатно и элементарно. Далее выполняем конфигурацию. Конфигурирование плагина достаточно подробно описано в документации, в том числе на русском языке. Мы будем обращать внимание на замеченные нами, гм, особенности.

Всё, что здесь написано - относится в DirectResize версии 0.8. Только мы установили и настроили плагин, как появилась версия 0.9, в которой радикальным образом изменен плагин, его установка и настройка.

  Установка DR версии 0.9

Здесь уже  совсем иначе. Фактически это новый плагин (хотя и отталкивающийся от DR 0.8) - другой автор,  иная концепция. Для работы DirectResize 0.9 непременно требуется PHP 5. А установка выполняется так:

1. Распаковать архив и скопировать содержимое папки root из архива в корневую папку вашего сайта, все файлы скопируются в предназначенные им места:

а) Папка directresize в папку assets/plugins/

б) Папка phpthumb в папку assets/snippets/

в) Файл image.php в корень сайта


2. Установить права на запись на папку assets/snippets/phpthumb/cache/, если вы использовать настройки PHPThumb по-умолчанию. 

Мы потом эту папку перенесем в более подходящее место.

3. Создать новый плагин DirectResize и скопировать в него содержимое файла directResize.plugin.txt


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

&config=Configuration;string;thickbox

Мы установим не thickbox, а highslide


5. В закладке "Системные события" отметить

  • OnWebPagePrerender
  • OnBeforeDocFormSave
  • OnDocFormPrerender

  Если ставить вместо DR 0.8, особо проверьте события - там были другие

6. Настроить дружественные URL в файле .htaccess (опционально но очень важно)

7. Настроить PHPThumb

  Настройка .htaccess

  Хоть это считается опциональным, для нас это обязательно, так как на сайте мы дружественные URL используем. Вставляем правила

# DirectResize  Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^images/([a-z0-9]{32})/.*\.(png|gif|jpe{0,1}g)$ assets/plugins/directresize/furl.php?q=$1 [NC,L,QSA]

непременно перед этими правилами, которые уже есть:

# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

 

  Настройка PHPThumb

Картинки, генерируемые DirectResize, складываются в подпапки папки

assets/snippets/phpthumb/cache/

На нее должны быть установлены права на запись. Это неудобное место - лучше мы переправим кэш в папку

assets/cache/phpthumb/

Заменим в файле assets/snippets/phpthumb/phpThumb.config.php

$PHPTHUMB_CONFIG['cache_directory'] = dirname(__FILE__).'/cache/';  

на

$PHPTHUMB_CONFIG['cache_directory'] = $PHPTHUMB_CONFIG['document_root'].'/assets/cache/phpthumb/';

И не забываем создать подпапку phpthumb!

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

Русификация

 А что там русифицировать? Сам DR ничего не говорит, несколько строк выдают подключаемые эффекты. Мы будем работать с HIghSlide и присть про особенности этой конфигурации. Строки сообщений там находятся в JS-файлах. JS-файлы поставляются в разных вариантах, в зависимости от того, как именно будет использоваться библиотека. Каждый файл имеет два варианта - исходный (например, highslide.js) и упакованный для ускорения загрузки (например, highslide-packed.js).

Чтобы русифицировать highslide, можно сделать перевод нескольких строк в  highslide.js и подключить именно его.  Делаем перевод, сохраняем в UTF-8, а в файле  assets/plugins/directresize/configs/highslide.config.php вместо

<script type="text/javascript" src="'.DIRECTRESIZE_PATH.'libs/highslide/highslide-packed.js">

записываем

<script type="text/javascript" src="'.DIRECTRESIZE_PATH.'libs/highslide/highslide.js">

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

Текстовые строки содержатся  в переменной hs.lang. Она определена в highslide*.js. Можем мы переопределить её, загрузив дополнительный файл скрипта после highslide.js? Конечно!  В файле  assets/plugins/directresize/configs/highslide.config.php не вместо, а после

<script type="text/javascript" src="'.DIRECTRESIZE_PATH.'libs/highslide/highslide-packed.js">

записываем

<script type="text/javascript" src="'.DIRECTRESIZE_PATH.'libs/highslide/highslide-ru.js">

А highslide-ru.js  будет такой:

hs.lang = {
cssDirection: 'ltr',
loadingText : 'Загружаю...',
loadingTitle : 'Щелкни для отмены',
focusTitle : 'Щелкни для переноса вперед',
fullExpandTitle : 'Распахнуть в полный размер (f)',
creditsText : 'Powered by Highslide JS',
creditsTitle : 'Go to the Highslide JS homepage',
restoreTitle : 'Щелкни для закрытия, тащи мышкой для перемещения, клавиши со стрелками для перехода Вперед - Назад.'
};
hs.showCredits  = false; 

 Всё! Имеем языковый файл и можно смело обновлять с авторского сайта все скрипты. Заметим, что подобным образом мы можем переопределять и другие настройки. Например, чтобы отключить появление надписи Powered by Highslide JS и ссылки с переходом на сайт мы дописали hs.showCredits  = false;

  Показ больших изображений

Это еще одна критическая точка. О проблемах, связанных с большими изображениями мы упомянули в обзорной заметке об эффектах просмотров. Там же есть и решение.

Проблема маленьких изображений

Пока мы решали проблему больших изображений, в DR 0.9 обнаружилась другая - еще хуже. Вдруг замечаем, что байрики и маленькие картинки в боковых колонках стали "ресайзиться", и у них заметна серая рамка. Байрик вставляется в чанке. Размер картинки прописан без уменьшения, но делается превьюв. И байрик сам был ссылкой, но теперь она не отрабатывает, так как раскрывается эффект. После очень многих экспериментов выяснилось, что надо просто не указывать width и height в теге img. Вообще-то это как-то неправильно, хоть и работает.

На страницах сайта встречаются тысячи мелких картинок, для которых эффекты категорически противопоказаны. Кроме того, для каждой такой картинки будут генерироваться по два дополнительных файла. Мы просто захлебнемся в таких ненужных картиночках. Удалять из кода сотен существующих страниц width и height немыслимо. Это в чанках мы легко сделали, а страниц слишком много.

Пока штатное решение - превьюв не делается, если размер не уменьшен - не работает. А другие возможные - например, запись в конфигурации папок, в которых DR вообще не будет трогать изображения, нам не очень подходит для основных изображений.

Однако часть картинок не должны обрабатываться при любых обстоятельствах. Это:

1. Элементы дизайна. Они у нас находятся где-то в недрах assets/templates. В этой папке картинки не обрабатываются DR.

2. Смайлики. Пока они у нас живут в assets/images/smiles и, после установки DR 0.9, стали обрабатываться. Эту папку, пока не наплодили много смайликов, стоит и перенести в assets/images/smiles. Однако попробуем исключить путь к смайликам из обработки.

В directResize.php вместо

$global_parms = array("path"                                 => "assets/images",    

добавим исключаемый подкаталог (знак !) smiley:

$global_parms = array(           "path"                                 => "assets/images

           !/smiley            ",    

В результате действительно картинки из assets/image/smiley/ и его подкаталогов перестали обрабатываться! Однако на ранее вставленные смайлики это не подействовало - у них уже была прописана в html  ссылка не на исходное изображение, а на image.php с аргументами. Пришлось редактировать. Страшно подумать, что уже во множестве ненужных мест такое могло прописаться.

Нехорошо это, как-то неуклюже. Когда мы будем добавлять новые картинки, мы их хоть куда можем размещать. Например, для больших вообще сделать папку assets/big_images/ и только туда складывай "ресайзируемые" изображения. При этом именно это и запишем в path.

В highslide.config.php впишем

$dr_global["path"] = "assets/big_images/"; 

  

3. Галереи от MaxiGallery. Они находятся в assets/galleries. Не обрабатываются.

Остается ждать исправления этого глюка.  Автор эту ошибку признал, интенсивно работает над плагином и обновления появляются очень часто.

  Наконец-то! После общения на форуме уважаемый автор оперативно исправил эту ошибку. Исправления внесены в directResize.php rev. 6. Вот теперь всё работает как надо - картинки, у которых размеры в атрибутах width и height не уменьшены по сравнению с физическими размерами файла, плагином не обрабатываются. Следовательно, мы можем оставить $dr_global["path"] = "assets/images/"; и не беспокоиться за судьбу старых изображений.

Проблема решена, но мы оставляем в заметке часть Проблема маленьких изображений на память - как пример того, с чем приходится сталкиваться при подготовке сайта на MODx к эксплуатации. Заодно пусть это останется и как пример психологии программиста. Автор, несомненно многократно тестировал плагин, но тестировал в режиме обработки - "шоб усё путём было". А вот от противного, чтобы плагин не работал, когда не требуется - просто не испытал. У нас тоже так бывает...Подмигнуть

Рамка вокруг картинки

С рамочкой-то кстати оказалось, давно хотелось, чтобы вокруг превьювов рамка была, но строгая, черная однопиксельная. Это сделать проще всего - поправить в highslide.css:

.highslide img {border: 1px solid #000;}

Но этого мало - теперь рамка будет везде, но только не в контенте, так как у нашего сайта есть и свои стили для col3_content. Нам ещё нужно в своем файл записать:

#col3_content .highslide img {border: 1px solid #000;}

26-01-2009 16:38:39



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

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


 
Роман
Комментарий
Re: Как настроить плагин для миниатюр
Реплика №3: 24.10.2011, 03:37:29
Ссылка на скачивание: http://code.google.com/p/directresize-modx/downloads/list

Большое спасибо за статью, а то в дистрибутиве ни каких объястений. В связи с этим я дядечке сайт новым директ ресайзом положил на 3 часа, обновил называется. :(
Костя
Комментарий
Re: Как настроить плагин для миниатюр
Реплика №2: 25.09.2011, 22:32:05
Спасибо, помогло руссифицировать highslide)
Anonymous
Комментарий
Re: Как настроить плагин для миниатюр
Реплика №1: 13.05.2009, 18:10:42
еще бы ссылку разместили откуда можно было сказать плагин, было бы супер