Здравствуйте! Сегодня я хотел бы поговорить о наболевшей проблеме — организации репозитариев (они же: файловые хранилища, файловые галереи, файловые архивы).
Я уже рассказывал о сниппете FileDownload, который вполне приемлем для выполнения некоторых задач, но и то, для людей разбирающихся. Как показала практика, даже плагин, который я делал под FileDownload, не спасает людей не посвященных и у них возникают серьезные трудности.
Что ж, поразмыслив, я подумал, что легче всего организовать файловый архив так, как реализуется практически все на MODx — через дерево ресурсов.
Для этого было решено использовать Ditto.
Итак, версия MODx Evo 1.0.4, Ditto стандартный, из дистрибутива.
Задача:
Дать возможность простому персоналу легко и не принужденно добавлять файлы, писать к ним описания, делать папки.
Идя:
В том, что бы использовать Ditto примерно так же, как, например, с выводом новостей, только вместо страниц — файлы.
Реализация:
Вообщем-то, я думаю, нужно пропустить размышления и тупиковые попытки и перейти сразу к окончательному варианту.
Структура файлового архива:
--Начальная страница архива
|---Папка 1
| |------Файл 1
| |------Файл 2
|---Файл 1
|---Файл 2
|---Файл 3
Т.е. примерно так:
Итак, для того, что бы отличать документы-файлы от документов-папок было решено сделать два дополнительных шаблона: один — для файлов, другой — для папок.
Шаблон файла — пустой (не удивляйтесь, Вы потом поймете для чего он нужен)
Шаблон для папки — содержит вызов Ditto.
В начальную страницу, Файловый архив, добавим вызов Ditto:
Пояснения:
1. Почему два вызова?
Два вызова тут потому, что с помощью одного вызова не получится сортировать раздельно папки и файлы (а ведь мы хотим, что бы папки были всегда первыми в списке).
2. Почему &id=`archiv`?
Это сделано на всякий случай, ведь на странице могут быть и другие вызовы Diito, например, Новости.
3. Зачем &noResults=` `?
А это для того, что бы вместо сообщения «Записей не найдено.» ничего не выводилось. Почему в одном вызове? Просто мы не хотим, что бы на странице не было этой надписи, если нет папок в поддиректории, а вот если не будет файлов — это надпись вполне уместна.
4. &filter=`template,15,8` и &filter=`template,16,8`
Вот тут выводим только то, что нужно: в первом файле выводим только те документы, которые с шаблоном id=15 (Шаблон папок), во втором только с шаблоном id=16 (Шаблон файлов).
Все остальное, я думаю, понятно.
Теперь те самые шаблоны: как я уже говорил, шаблон файлов может быть полностью пустым, а вот шаблон папок должен содержать вызов Ditto:
Как Вы могли заметить, отличие только в том, что мы добавили ссылку Назад. И еще: к шаблону для Папок необходимо сделать TV параметр, я его назвал tvfile, а тип ввода сделал File.
Далее, что у нас содержит чанк &tpl=`repository`:
Т.е. в чанке у нас только вызов простого рукописного сниппета repome.
Что делает сниппет:
1. Ассоциирует различные расширения файлов с их иконками
2. Происходит подсчет размера файла, выделение имени файла
3. Распознавание шаблонов и формирование вывода
Сниппет RepoMe
Поясню основные параметры:
Сам код сниппета я приводить не буду, я постарался его максимально прокомментировать и положил его в архив в конце статьи.
И, наконец, по стилям: те, кто используют FileDowload, наверное, заметили, что я использовал здесь его стили из примера — было лень переделывать (в архиве я приложил их).
Что должно получится:
И если войти в папку Вихревые генераторы:
О, и чуть не забыл: можно же ведь использовать ManagerManager. Убрав лишние поля (напомню, это делается через добавление иструкции mm_hideFields('список_полей_через_запятую', 'id_роли_пользователя', 'id_шаблона') в чанк mm_rules, если Вы держите правила там либо же в одноименный файл в директории managermanager).
Тогда, для менеджера, вид административной части будет такой:
Оцениваем:
+ Колоссальная простота использования, можно один раз объяснить принцип добавления новостей — а потом его же использовать при объяснении работы с файловым архивом
+ Реализуется на Ditto, а значит, теоретически, можно прикручивать всякие ditto примочки, например рейтинг
+ Реализуется в виде документов — а значит можно, имея фантазию, наделать кучу наворотов
+ Независимость названий файлов и папок от их имен
+ Независимость от физического расположения файлов
+ Поддержка иконок
+ В принципе, универсальность
+ Простой код: возможность допиливать как угодно
— Неудобная настройка вывода (отсутствие шаблонов и плейсхолдеров для них)
— Для максимальной адаптации для Вашего ресурса, возможно, придется много допиливать
— Все-таки до профессионального инструмента далековато
На что нужно обратить внимание:
Не забываем про
Не забываем разрешать менеджерам пользоваться FCKeditor'ом и загружать различные типы файлов
Скачать:
Архив со сниппетом и всем необходимым
На этом все. Возможно, если данная версия будет в ходу, будем ее улучшать, добавив шаблоны и прочие полезности.
Я уже рассказывал о сниппете FileDownload, который вполне приемлем для выполнения некоторых задач, но и то, для людей разбирающихся. Как показала практика, даже плагин, который я делал под FileDownload, не спасает людей не посвященных и у них возникают серьезные трудности.
Что ж, поразмыслив, я подумал, что легче всего организовать файловый архив так, как реализуется практически все на MODx — через дерево ресурсов.
Для этого было решено использовать Ditto.
Итак, версия MODx Evo 1.0.4, Ditto стандартный, из дистрибутива.
Задача:
Дать возможность простому персоналу легко и не принужденно добавлять файлы, писать к ним описания, делать папки.
Идя:
В том, что бы использовать Ditto примерно так же, как, например, с выводом новостей, только вместо страниц — файлы.
Реализация:
Вообщем-то, я думаю, нужно пропустить размышления и тупиковые попытки и перейти сразу к окончательному варианту.
Структура файлового архива:
--Начальная страница архива
|---Папка 1
| |------Файл 1
| |------Файл 2
|---Файл 1
|---Файл 2
|---Файл 3
Т.е. примерно так:
Итак, для того, что бы отличать документы-файлы от документов-папок было решено сделать два дополнительных шаблона: один — для файлов, другой — для папок.
Шаблон файла — пустой (не удивляйтесь, Вы потом поймете для чего он нужен)
Шаблон для папки — содержит вызов Ditto.
В начальную страницу, Файловый архив, добавим вызов Ditto:
<h2>Файловый архив:</h2>
[!Ditto? &id=`archiv` &parents=`[*id*]` &noResults=` ` &filter=`template,15,8` &tpl=`repository` &sortBy=`createdon` &summarize=`30` &dateFormat=`%d.%m.%Y` &paginate=1 !]
[!Ditto? &id=`archiv` &parents=`[*id*]` &filter=`template,16,8` &tpl=`repository` &sortBy=`createdon` &summarize=`30` &dateFormat=`%d.%m.%Y` &paginate=1 !]
</div>
<div id="pagination">
[+archiv_previous+] - Стр.: [+archiv_pages+] - [+archiv_next+]
</div>
Пояснения:
1. Почему два вызова?
Два вызова тут потому, что с помощью одного вызова не получится сортировать раздельно папки и файлы (а ведь мы хотим, что бы папки были всегда первыми в списке).
2. Почему &id=`archiv`?
Это сделано на всякий случай, ведь на странице могут быть и другие вызовы Diito, например, Новости.
3. Зачем &noResults=` `?
А это для того, что бы вместо сообщения «Записей не найдено.» ничего не выводилось. Почему в одном вызове? Просто мы не хотим, что бы на странице не было этой надписи, если нет папок в поддиректории, а вот если не будет файлов — это надпись вполне уместна.
4. &filter=`template,15,8` и &filter=`template,16,8`
Вот тут выводим только то, что нужно: в первом файле выводим только те документы, которые с шаблоном id=15 (Шаблон папок), во втором только с шаблоном id=16 (Шаблон файлов).
Все остальное, я думаю, понятно.
Теперь те самые шаблоны: как я уже говорил, шаблон файлов может быть полностью пустым, а вот шаблон папок должен содержать вызов Ditto:
<h2>Файловый архив:</h2>
<div class="fd-example4">
<img src="assets/images/filetype/arrow_up.png"><a href="javascript:history.back()">Назад</a><hr>
[!Ditto? &id=`archiv` &parents=`[*id*]` &noResults=` ` &filter=`template,15,8` &tpl=`repository` &sortBy=`createdon` &summarize=`30` &dateFormat=`%d.%m.%Y` &paginate=1 !]
[!Ditto? &id=`archiv` &parents=`[*id*]` &filter=`template,16,8` &tpl=`repository` &sortBy=`createdon` &summarize=`30` &dateFormat=`%d.%m.%Y` &paginate=1 !]
</div>
<div id="pagination">
[+archiv_previous+] - Стр.: [+archiv_pages+] - [+archiv_next+]
</div>
Как Вы могли заметить, отличие только в том, что мы добавили ссылку Назад. И еще: к шаблону для Папок необходимо сделать TV параметр, я его назвал tvfile, а тип ввода сделал File.
Далее, что у нас содержит чанк &tpl=`repository`:
[[repome? &docId=`[+id+]` ]]
Т.е. в чанке у нас только вызов простого рукописного сниппета repome.
Что делает сниппет:
1. Ассоциирует различные расширения файлов с их иконками
2. Происходит подсчет размера файла, выделение имени файла
3. Распознавание шаблонов и формирование вывода
Сниппет RepoMe
Поясню основные параметры:
$idTemplateFolder - ID шаблона для Папки
$folderTitle - Какое поле использовать в качестве заголовка для папки
$folderDescription - Какое поле использовать для описания папки
$idTemplateFile - ID шаблона для Файла
$fileTitle - Какое поле использовать в качестве заголовка для файла
$fileDescription - Какое поле использовать для описания файла
$fileFile - Какое поле использовать для ссылки на файл
$fileDate - Какое поле использовать для показа время загрузки файла
$imgset - Ассоциация типов файлов с иконками
$imgPath - Путь к иконкам
Сам код сниппета я приводить не буду, я постарался его максимально прокомментировать и положил его в архив в конце статьи.
И, наконец, по стилям: те, кто используют FileDowload, наверное, заметили, что я использовал здесь его стили из примера — было лень переделывать (в архиве я приложил их).
Что должно получится:
И если войти в папку Вихревые генераторы:
О, и чуть не забыл: можно же ведь использовать ManagerManager. Убрав лишние поля (напомню, это делается через добавление иструкции mm_hideFields('список_полей_через_запятую', 'id_роли_пользователя', 'id_шаблона') в чанк mm_rules, если Вы держите правила там либо же в одноименный файл в директории managermanager).
Тогда, для менеджера, вид административной части будет такой:
Оцениваем:
+ Колоссальная простота использования, можно один раз объяснить принцип добавления новостей — а потом его же использовать при объяснении работы с файловым архивом
+ Реализуется на Ditto, а значит, теоретически, можно прикручивать всякие ditto примочки, например рейтинг
+ Реализуется в виде документов — а значит можно, имея фантазию, наделать кучу наворотов
+ Независимость названий файлов и папок от их имен
+ Независимость от физического расположения файлов
+ Поддержка иконок
+ В принципе, универсальность
+ Простой код: возможность допиливать как угодно
— Неудобная настройка вывода (отсутствие шаблонов и плейсхолдеров для них)
— Для максимальной адаптации для Вашего ресурса, возможно, придется много допиливать
— Все-таки до профессионального инструмента далековато
На что нужно обратить внимание:
Не забываем про
<base href='[(site_url)]'>
Не забываем разрешать менеджерам пользоваться FCKeditor'ом и загружать различные типы файлов
Скачать:
Архив со сниппетом и всем необходимым
На этом все. Возможно, если данная версия будет в ходу, будем ее улучшать, добавив шаблоны и прочие полезности.