AttachMan[ager]
Attachman[ager] предоставляет более удобный интерфейс для работы с аттачами (загруженными файлами).
Attachman позволяет:
- сделать
(:attachlist:)
более информативным и приятным глазу; - видеть превью изображений;
- смотреть код разметки, подходящий для данного расширения файла;
- удалять загруженные файлы;
- исключить некоторые служебные файлы из списка аттачей;
- создавать собственные JavaScript-обработчики для загруженных файлов;
- загружать список аттачей посредством AJAX.
Описание
Этот рецепт предоставляет дополнительный синтаксис для создания расширенной таблицы аттачей.
После установки рецепта вы можете заменить (:attachlist:)
на (:attachman:)
и получить таблицу прикрепленных файлов, которая выглядит следующим образом:
Attach:Attachman.png Δ
… и имеет следующие особенности:
- сортировка по каждому столбцу;
- показывает N превью изображений, размер которых меньше M килобайт (N и M настраиваются, см. ниже),
- остальные изображения могут быть загружены кликом мыши;
- показывает разметку для определенных типов файлов (можно изменить, см. ниже);
- показывает размер и время модификации файла;
- показывает кнопку «удалить», которая действительно удаляет вложенный файл.
Результат выполнения команды (:attachman:)
также может быть достигнут через ?action=phAttachman
в URL, поэтому можно сгенерировать эту таблицу в любом месте через AJAX.
Установка
- скачайте phAttachman.php и поместите его в директорию /cookbook;
- добавить
include_once("$FarmD/cookbook/phAttachman.php");
в (farm)config.php; - замените
(:attachlist:)
на(:attachman:)
в вашем Site.UploadQuickReference или интегрируйте его другим способом (см. «Идеи» ниже).
Настройки
Рецепт настраивается через (farm)config.php. Все доступные параметры представлены ниже ( указаны значения по умолчанию):
- $phAttachman ['EnableDelete'] = false; - разрешает операцию удаления;
- $phAttachman ['TableClass'] = 'sortable simpletable'; - классы таблиц по умолчанию, стили ядра PmWiki;
- $phAttachman ['ImgsExentions'] = 'gif, jpg, jpeg, png, svg, svgz'; - только с этим расширением файла будут генерироваться превью;
- $phAttachman ['MaxImgsCountAutoPreview'] = 10; - ограничивает количество изображений для автоматической генерации превью. Каждое превью является полноразмерным изображением, просто смасштабированным до небольшого размера ячейки таблицы. Таким образом, если у вас есть 1000 прикрепленных фотографий, это может требовать больших ресурсов. Вот почему эта опция была добавлена. Вы должны сами решить, сколько фотографий можно загрузить в зависимости от вашего стиля использования PmWiki.
- $phAttachman ['MaxImgSizeAutoPreview'] = 1024; - максимальный размер изображения (КБ) для автоматического предварительного просмотра;
- $phAttachman ['IgnoredFilenamesPatterns'] = array ("th [0-9] {2} ---",); - массив имен файлов, которые следует игнорировать (шаблоны регулярных выражений). Значение по умолчанию исключает служебные файлы Cookbook:Mini (сгенерированные превью).
- $phAttachman ['TextareaInsertCommands'] и $phAttachman ['TextareaInsertTemplate'] предназначены для создания подсказок по разметке или JS-действий и описаны ниже.
Значения по умолчанию для TextareaInsertCommands и TextareaInsertTemplate генерируют столбец Markup в простой форме Attach:filename.ext
. Используя эти опции, вы можете:
- создавать новые примеры разметки, например, добавить
Mini:image.jpg
для всех файлов с расширением JPG; - полностью переопределять шаблон и создайвать другие элементы HTML (например, кнопки) с нужными действиями.
Пример:
$phAttachman['TextareaInsertCommands']['jpg'] = 'Mini:%filename%'; $phAttachman['TextareaInsertTemplate'] = "<a href='#' class='button'><span>%TextareaInsertCommand%</span></a><br>";
Данный пример сгенерит такой HTML-код в каждой ячейке столбца Markup:
<a href="#" class="button"><span>Mini:sad_girl.jpg</span></a><br> <a href="#" class="button"><span>Attach:sad_girl.jpg</span></a><br>
С помощью этого HTML-кода вы можете дополнительно запрограммировать собственную реакцию на переход по ссылкам. В моем примере, я сделал автоматическую вставку кода внутри области текста в EditMode с помощью мыши:
Перевод
Перевод предусмотрен, но не реализован. В данный момент рецепт существует только на английском, но все фразы вынесены php-переменные. Таким образом, будет не очень сложно реализовать корректный перевод с использованием принципов PmWiki.
Идеи применения
Вот несколько идей, как можно использовать рецепт:
- просто замените оригинал
(:attachlist:)
на(:attachman:)
в Site.UploadQuickReference; - добавьте
(:attachman:)
к вашему Site.EditForm, и чтобы видеть вложения и разметку во время редактирования; - используйте вызов через AJAX (?action=phAttachman) и генерируйте таблицу вложений в любом месте, где вам нужно.
Служебная информация
- Status
- stable
- Core
- yes
- PHPcookbook
- phAttachman.php
Version
20200522
Todo:someday
- (важно) сделать правильную многоязычную поддержку. Сделать перевод для работы через интернационализацию(?), но не внутренние переменные;
- добавить системное логирование операций удаления (в Последние изменения);
- добавить поддержку всего оригинального синтаксиса
(:attachlist:)
и после этого ликвидировать IgnoredFilenamesPatterns, реализующий тот же функционал на уровне PHP; - добавить поддержку разметки аудио и видео файлов, используя в качестве примера реализацию ImgsExention. Это стоит делать, если ядро PmWiki начнет поддерживать встраивание мультимедийных файлов.