Разумеется, это наше субъективное мнение.
Медленная загрузка AFM объясняется тем, что он включает в себя много лишних, не очень-то нужных функций. Например, в AFM встроен графический редактор, позволяющий прямо на сервере отредактировать картинку. Есть и редактор текстовых файлов.
А действительно ли нужно редактирование картинок на сервере? Может быть и нужно, но редко. И профессионалам. Но этот код наверняка замедляет работу. Пусть будет кандидатом на удаление. Наверное всё-таки проще доводить картинки до "товарного" вида до загрузки на сервер, чем ради такой возможности постоянно мучиться с длительной загрузкой.
Нужен ли нам такой редактор:
Нам - нет.
А надо ли редактировать текстовые файлы прямо на сервере? Некоторые да, надо. Например, CSS-файлы поправить. Конечно, можно воспользоваться и внешним редактором, если есть доступ по FTP. А если нет, то можно тем же AFM скачать к себе, поправить и обратно загрузить. Отключить возможность редактирования вообще можно — в настройке define('CONFIG_OPTIONS_EDITABLE', true) исправить true на false и редакторы не будут доступны. Даст ли это выигрыш в скорости? Однозначного ответа нет. Попробуем разрешить редактирование текстов, но запретить (удалить редактор) правку картинок.
Однозначно, на наш взгляд не нужен Поиск файлов. Может быть и нужен был бы, но он ещё и не работает толком. Во всяком случае, нам ничего найти не удалось. Вы как хотите, а мы как знаем — код, относящийся к поиску, удалим.
Не нужен поиск – не нужен и календарь. Удалим всё, что с ним связано.
Посмотрим на внешний вид "штатного" AFM:
Душераздирающее зрелище!
Обратите внимание на бокс Поиск. Вообще-то найти хоть один файл нам не удалось, несмотря на многократные попытки, но сейчас не об этом. В этом боксе есть кнопка Закрыть. По всем законам юзабилити она относится к этому боксу, может быть этой кнопкой Поиск можно закрывать. На самом деле эта кнопка закрывает весь диалог!
Бокс Поиск мы вообще убрали, как бесполезный. Кнопку Закрыть поместили вне боксов, чтобы она относилась ко всему окну. При этом её выровняли по вертикали с кнопкой Выбрать, которая появлятся при отметке файла и скрывается при фокусе на папке. Левый бокс Информация мы сделали шире, так как если выводилось длинное имя файла, ширина была недостаточной. Ну и везде внесли мелкие улучшения подобного типа:
Как это сделано
Рассмотрим конкретные изменения в коды AFM.
Русификация
Для русификации необходимо иметь файл assets/plugins/ajaxfilemanager/langs/ru.php. Честно говоря, не помню, где я его взял. Один раз точно редактировал сам (чуть-чуть не хватило терпения до самого конца), а потом где-то нашел другой. Заметим, что кодировка этого файла должна быть utf-8.
Мы поправили также thickbox.js — там всего пару слов надо изменить, Close и of. Пусть уж и они будут по-русски, хотя и не обязательно.
Редактирование config.base.php
Основные настройки именно в этом файле - assets/plugins/ajaxfilemanager/inc/config.base.php. Приведём наши изменения с комментариями, выделяя особенно важные («родные» комментарии удаляем для экономии места). Приведены только измененные строки:
define('CONFIG_SYS_DEFAULT_PATH', '../../');
define('CONFIG_SYS_ROOT_PATH', '../../');
define("CONFIG_SYS_PATTERN_FORMAT", 'reg');
define('CONFIG_SYS_EXC_FILE_PATTERN', '/index\.htm|\.thumb/');
define('CONFIG_UPLOAD_MAXSIZE', 8 * 1024 * 1024); //by bytes
define('CONFIG_TEXT_EDITOR_VALID_EXTS', 'gif,jpg,png,tif,zip,css,htm,html,rtf,pdf,txt,xml');
define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,png,tif,zip,css,htm,html,rtf,pdf,txt,xml');
define("CONFIG_VIEWABLE_VALID_EXTS", 'gif,txt,jpg,png,tif,html,htm,js,css,xml');
/*
switch($which_editor){
case "TinyMCE":
$fmeditor = 'tinymce';
break;
case "FCKEditor":
$fmeditor = 'fckeditor';
break;
default:
$fmeditor = 'stand_alone';
}
*/
$fmeditor = 'tinymce';
define('CONFIG_EDITOR_NAME', (CONFIG_QUERY_STRING_ENABLE && !empty($_GET['editor'])?secureFileName($_GET['editor']):$fmeditor));
define('CONFIG_DEFAULT_PAGINATION_LIMIT', 30);
define('CONFIG_LANG_DEFAULT', (CONFIG_QUERY_STRING_ENABLE && !empty($_GET['language'])?secureFileName($_GET['language']):'ru'));
Редактирование assets/plugins/ajaxfilemanager/inc/config.php
В этом файле закрываем комментариями строки:
// define('CONFIG_URL_IMAGE_EDITOR', 'ajax_image_editor.php');
// define('CONFIG_URL_IMAGE_SAVE', 'ajax_image_save.php');
// define('CONFIG_URL_IMAGE_UNDO', 'ajax_image_undo.php');
Удаление файлов
Удаляем файлы
- ajaxfilemanager/ajax_image_editor.php
- ajaxfilemanager/ajax_image_save.php
- ajaxfilemanager/ajax_image_undo.php
- ajaxfilemanager/inc/class.search.php
- ajaxfilemanager/jscripts/calendar.js
- ajaxfilemanager/jscripts/media.js
- ajaxfilemanager/jscripts/rotate.js
Редактирование assets/plugins/ajaxfilemanager/ajaxfilemanager.php
В этом файле закрываем комментариями строки
//<script type="text/javascript" src="jscripts/calendar.js"></script>
//<script type="text/javascript" src="jscripts/contextmenu.js"></script>
//<script type="text/javascript" src="jscripts/media.js"></script>
// 'image_editor':'<?php echo CONFIG_URL_IMAGE_EDITOR; ?>',
// popUpCal.clearText = '<?php echo CALENDAR_CLEAR; ?>';
// popUpCal.closeText = '<?php echo CALENDAR_CLOSE; ?>';
// popUpCal.prevText = '<?php echo CALENDAR_PREVIOUS; ?>';
// popUpCal.nextText = '<?php echo CALENDAR_NEXT; ?>';
// popUpCal.currentText = '<?php echo CALENDAR_CURRENT; ?>';
// popUpCal.buttonImageOnly = true;
// popUpCal.dayNames = new Array('<?php echo CALENDAR_SUN; ?>','<?php echo CALENDAR_MON; ?>','<?php echo CALENDAR_TUE; ?>','<?php echo CALENDAR_WED; ?>','<?php echo CALENDAR_THU; ?>','<?php echo CALENDAR_FRI; ?>','<?php echo CALENDAR_SAT; ?>');
// popUpCal.monthNames = new Array('<?php echo CALENDAR_JAN; ?>','<?php echo CALENDAR_FEB; ?>','<?php echo CALENDAR_MAR; ?>','<?php echo CALENDAR_APR; ?>','<?php echo CALENDAR_MAY; ?>','<?php echo CALENDAR_JUN; ?>','<?php echo CALENDAR_JUL; ?>','<?php echo CALENDAR_AUG; ?>','<?php echo CALENDAR_SEP; ?>','<?php echo CALENDAR_OCT; ?>','<?php echo CALENDAR_NOV; ?>','<?php echo CALENDAR_DEC; ?>');
// popUpCal.dateFormat = 'YMD-';
// $('.inputMtime').calendar({autoPopUp:'both', buttonImage:'theme/<?php echo CONFIG_THEME_NAME; ?>/images/date_picker.png'});
// <link rel="stylesheet" type="text/css" href="theme/<?php echo CONFIG_THEME_NAME; ?>/css/jquery-calendar.css" />
Кроме того, в этом же файле удаляем часть строк и вносим изменения, связанные с корректировкой внешнего вида. Здесь мы их не приводим - слишком много и принципиального значения эти изменения не имеют.
Некоторые очевидные изменения вносим и в файлы
- assets/plugins/ajaxfilemanager/theme/default/css/form.css
- assets/plugins/ajaxfilemanager/theme/default/css/tinymce.css
Результаты
В результате скорость загрузки AFM увеличилась в 6-10 раз! Теперь он загружается практически мгновенно.
Мы имеем быстрый и функциональный файловый менеджер, позволяющий:
- Просматривать папки и файлы в разных режимах с просмотром миниатюр картинок
- Переименовывать, удалять, вырезать, копировать и вставлять папки и файлы
- Создавать новые папки
- Загружать файлы на сервер с компьютера
- Скачивать файлы с сервера
- Просматривать и редактировать текстовые файлы
- Видеть даты создания и изменения файлов их размер и доступность для записи и чтения
Фактически это всё, что нам нужно.
Естественно, возникает вопрос - не стоит ли заменить MCPUK, используемый в качестве штатного файлового менеджера в MODx?
Для себя мы решаем - безусловно стоит. Но делать этого пока не будем. Всё-таки не хочется влезать в ядро MODx и потом отслеживать изменения во всех версиях. Своих редакторов мы просто научили работать с файлами через AFM в TinyMCE, то есть в момент, когда "чисто конкретно" нужно загружать файлы на сервер.
Написать комментарий