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