Pull to refresh

sjFilemanager — Reloaded. AJAX + PHP файловый менеджер версия 1.0 бета

JavaScript
Много воды утекло с тех пор когда я сел за написания своего файлового менеджера. В то время поддержка ИЕ6 считалась обычным делом, а про фичи HTML5 можно было только мечтать. В общем вот ссылка на версию 0.1.0 альфа. В конце первого топика, я написал, что планирую сделать в будущем, можно сказать я сдержал свое обещание и хочу представить Вам версию 1.0b. Из того, что планировалось, была отброшена идея внедрения авторизации в менеджер, потому что, как говорили здесь, это пятое колесо. Рассмотрим, что изменилось и что улучшилось, но для начала скрин


Эволюция


Вот список изменений:
  • исправлен дизайн-баг в IE связан с окном загрузки
  • сделана полная локализация на русский язык
  • добавлен вывод ошибок в попапе
  • добавлен целый ряд событий в менеджер, также устанавливаются callback-ы по-умолчанию
  • файловый менеджер и объект uploader, в данном случае SWFUpload, связаны между собой Dependency Injection паттерном
  • упрощена инициализация менеджера
  • добавлен вывод текущего пути и возможность переходить по открытым директориям из него
  • изменено UI при создании директории
  • добавлен ридер/редактор медиа файлов, в данном случае картинок, является полноценным приложением, подключается к файловому менеджеру посредством событий
  • изменены иконки

Известные баги и минусы


  • выделяющая рамка в Опере и контекстное меню при двойном клике
  • в IE7, медиа менеджер, не растягивается подложка под элементы управления
  • JavaScript код не документирован

Сравнение


На данный момент самым популярным я считаю elFinder файловый менеджер. Будем сравнивать именно с ним.
По размеру почти идентичен, имеет уже написанный драйвер для работы с файлами, которые хранятся в MySQL. Основан на jQuery, имеет хорошую поддержку (javascript код документирован при помощи чего-то похожего на PHPDoc), недавно вышла 2.0 бета версия. Красивый UI, возможность перетаскивать папки и файлы, имеет ридер для картинок, есть возможность редактировать файлы на сервере (это я считаю минусом, хотя для shared hosting наверно полезная вещь). Сам код я не анализировал, но на первый взгляд его много и написан он грамотно.
Наглости тестировать скорость работы у меня не хватило, но медлительность при открытии директории заметна, так что давайте поговорим о минусах.
  • первое, что бросилось в глаза — это строка показывающая текущий путь, если кликнуть на родительский каталог, то все дочерние каталоги из него исчезают, как-то не хорошо, если нужно изменить структуру директорий и часть файл перенести из парента в чайлд
  • не очень хорошо реализованы попапы. Например, возьмем попап для загрузки файлов, при нажатии на крестик DOM элемент (и все его дочерние элементы) удаляются, а потом если нажать еще раз загрузить файл, то вновь создается тоже самое. Не понятно зачем это.
  • ошибка появляется в попап окне… и чтобы закрыть его нужно навести мышку и тыцнуть закрыть. Почему бы просто не показать сообщение на 5 секунд и не мучить пользователя?
  • все реализовано в виде одной целостной программы. Нет разделения на основную часть — манипуляция файловой структурой, дополнительную — менеджер всплывающих окон, редактора файлов (сюда же можно отнести — архиватор и превью рисунков), дерево каталога и их перетаскивание

Полный список багов можно посмотреть здесь.
Выскажу свое мнение на счет drag & drop в файловых менеджерах — это PAIN IN THE ASS. Очень часто работая с ним в спешке можно случайно перетянуть какую-то директорию куда-то, и хорошо если есть история и можно нажать CTRL + Z, а если нельзя? Тогда я Вам не завидую. Со мной это случалось несколько раз, с тех пор я не пользуюсь древом каталогов.
В целом файловый менеджер очень хороший, уже много где интегрирован и т.д. и т.п.

Теперь скажу, что на мой взгляд в моем менеджере лучше:
  • функционал полностью разделенный. Относительно серверной части, то Вы можете взять любой из классов и использовать где-то у себя для работы с файловой системой, созданием тамбнейлов для рисунков, обрабатывать загрузку файла, копировать целые каталоги, работать с множеством файлов с помощью одного объекта
  • части функционала взаимодействуют между собой благодаря Dependency Injection или событиям
  • четкое разделение структуры файлов на: серверную часть (директория lib) и клиентскую (директория web), что уменьшает вероятность уязвимости, так как серверная часть не доступна через http протокол, за исключением index.php файла
  • наличие простого редактора рисунков, с помощью которого их можно рисайзить и кропать. Редактор является полностью независимым от файлового менеджера


Примеры и Источники


Посмотреть работу менеджера можно
  • здесь, только файловый менеджер на странице
  • здесь, только редактор изображений на странице
  • здесь, только файловый менеджер в попапе
  • здесь, файловый менеджер и редактор изображений в попапе

Скачать можно здесь или с GIT репозитория git://github.com/stalniy/sjFilemanager.git

Будущее медиа менеджера


  • добавить возможность поставить водяной знак на изображении
  • добавить возможность применить проведенные действия ко всем открытым рисункам
  • добавить возможность чтения flv видео
  • добавить кнопочку Fit On Screen

Будущее файлового менеджера


  • добавить возможность конфигурировать загрузку файлов, например, создание тамбнейлов для рисунков
  • сделать возможность установки нескольких listener-ов на событие

Более детально о менеджере можно почитать здесь.

P.S.: о найденных багах, пожеланиях и Вашу критику прошу писать здесь или в комментариях
P.P.S.: над проектом я работаю один, так что не будьте слишком строги

UPD: Если не можете посмотреть примеры на сайте, качайте исходники с github. Там примеры есть. Большое спасибо хаброюзерам JiLiZART и Mavim за подсказку
Tags:ajaxphpфайловый менеджерsjFilemanager
Hubs: JavaScript
Total votes 80: ↑67 and ↓13 +54
Views6.4K

Popular right now