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 начнет поддерживать встраивание мультимедийных файлов.