Данные типа file

Данные типа file - это любые файлы: картинки, аудио и видео файлы, дистрибутивы программ, документы, в том числе html-документы. Как они используются на страничке (отображаются, проигрываются или скачиваются) задается в шаблоне. В дескрипторе же просто задется тип - file, а пользователь просто закачивает файл на сайт.

Приведем пример шаблона, с помощью которого пользователь может закачивать файлы на сервер, а посетитель скачивать их:

file.tpl
<?php echo "
    {$dat['edit']}
    <a href='datafiles/$dat[1]'>Скачать файл: $dat[1]</a>
";?>

file.tdd
<?php
    $types[1]='file';
?>

Значением file-данного является имя файла. Файлы закачиваются из окна редактирования и автоматически помещаются в папку ./datafiles на сервере. Если в этой папке уже имеются файлы с таким же именем, то к имени файла приписывается последовательный номер. Таким образом, имя файла пользователем непосредственно не редактируется.

Параметры, применяемые для всех типов файлов

  Имя параметра  Назначение параметраЗначения (аргументы) параметраПримечания
allowedFormatsФорматы (типы) файлов, разрешенные для закачки Перечень расширений имен файлов, через запятую.

allowedFormats(gif,png) forbiddenFormats(exe)

По умолчанию для изображений применяется список: 'bmp', 'gif', 'jpg', 'jpeg', 'png', 'svg', 'webp'.
forbiddenFormatsФорматы (типы) файлов, запрещенные для закачки
renameFileByFieldПереименовать закачанный файл, используя в качестве имени текст из указанного поля.
  1. Номер поля-источника.
  2. Максимальное число символов (необязательный аргумент)

  3. Номер дополнительного страховочного поля, на случай, если основное поле окажется пустым (необязательный аргумент)

renameFileByField(1, 300, 2)

  • Этот параметр желательно применять для поискового продвижения.
  • Этот параметр не будет действовать, если для данного задан параметр sourceField.
  • Можно для нескольких file-данных задать одно и то же поле в качестве источника имени — накладок не будет, так как к имени файла будет приписан числовой суффикс.
destinationАльтернативная папка назначения для закачиваемых файловПуть относительно корневой папки сайта.

destination
('datafiles/catalog')

  • Создавать альтернативную п папку специально не нужно — это произойдет автоматически.
  • По умолчанию, когда не указан параметр destination, закачиваемые файлы помещаются в папку сайта datafiles.
  • Альтернативную папку можно назначить в любом месте на сайте, однако лучше это сделать внутри папки datafiles. Подробнее
chunkЗакачивать файл по частямРазмер одной части в байтах

Закачивать по 10 МБ:
chunk(10485760)

  • Применяется для закачки больших файлов. При закачке большого файла целиком, времени может не хватить, так как сервер дает ограниченное время (около 1 мин) на один запрос.

Пример:

.tdd
<?php
$types[4] = "file allowedFormats('zip','rar','arj') destination('datafiles/archive')";
$types[5] = "file forbiddenFormats('exe','com')";
?>

Параметры, применяемые только для файлов-изображений

  Имя параметра  Назначение параметраЗначения (аргументы) параметраПримечания
maxWidthМаксимальная ширина изображения Целое положительное число (пиксель).

maxWidth(800) maxHeight(800)

  • Преобразование к новому размеру произойдет автоматически во время закачки
  • Если вам нужны точные значения ширины и высоты, то задавайте их в атрибутах width и height элемента img в шаблоне. Однако это может привести к непропорциональной деформации изображения.
  • Параметр thumbnail отменяет действие параметров maxWidth и maxHeight.
maxHeightМаксимальная высота изображения
thumbnailСоздание миниатюры заданных размеров Способ создания, ширина, высота, выравнивание, цвет фона.

thumbnail(crop, 160)

thumbnail(crop, 160, 120, top)

thumbnail(fit, 160, 120, bottom, #fff)

  • Обязательными параметрами является только первые два — способ и ширина миниатюры. Если не указывать третий параметр (высоту), то он по умолчанию будет равен второму параметру, то есть, получается квадратная миниатюра.
  • При использовании какого-либо из параметров, обязательны все параметры, стоящие левее него.
  • Способ создания миниатюры:
    • crop — отсечение у изображения невмещающихся областей (кадрирование).
    • fit — оптимальное вписывание изображения без удаления каких-либо его частей в заданные рамки.
  • Ширина и высота миниатюры задается в пикселях.
  • Выравнивание изображения относительно посадочного места, заданного габаритами миниатюры, задается с помощью одного из выражений: top-left, top, top-right, left, center, right, bottom-left, bottom, bottom-right (по умолчанию — center).
  • Цвет фона добавленных областей задается в формате CSS-цвета (для способа fit). По умолчанию цвет фона прозрачный (transparent), при этом, создается файл в формате png. Если вам нужен другой формат, укажите его в параметре format().
formatПреобразовать файл к новому формату (типу)Одно из слов: 'bmp', 'gif', 'jpg', 'jpeg', 'png', 'svg', 'webp'.

format(jpg)

Если формат не задан, изображение будет преобразовано в webp.
widthFieldНомер поля, в которое автоматически будет записываться значение ширины закачанного изображения Целое положительное число (номер поля).

widthField(3) heightField(4)

  • Эти параметры можно применять в элементе img для атрибутов width и height, так как их указание ускоряет отображение страницы.
  • Эти параметры полезны при показе изображения в новом окне с помощью JavaScript функции window.open, так как они позволяют задать размер нового окна, равный размеру изображения.
  • Размеры изображения редактировать не рекомендуется, поэтому указанные поля лучше сделать скрытыми.

    Размеры изображения можно не хранить, а узнать их прямо в шаблоне с помощью php-функции getimagesize(). Это избавит нас от необходимости заводить дополнительные поля в базе данных, но замедлит вывод страницы.

    Размеры изображения можно узнать и на стороне клиента, взяв с помощью JavaScript стандартные свойства width и height у DOM-объекта img. Однако, изображение при этом должно быть уже загруженным на страницу.

heightFieldНомер поля, в которое автоматически будет записываться значение высоты закачанного изображения
qualityКачество изображенияЧисло от 0 до 100.

quality(50)

По умолчанию установлено значение 30%, что дает удовлетворительное качество при наименьшем размере файла. Формат WEBP для растровых изображений
sourceFieldВ качестве источника будет использоваться файл, который находится в поле, номер которого записан в этот параметр.Целое положительное число (номер поля источника).

sourceField(1)

  • Данное источника в дескрипторе должен быть объявлено раньше, чем текущее данное ($types[]=...)
  • Параметр действует, если непосредсвенно в текущее поле файл не закачивается.
  • Этот параметр обычно используется для автоматического создания миниатюрного варианта изображения
  • Так как закачка файла происходит автоматически, то данное поле рекомендуется делать скрытым.
stampШтамп
(водяной знак, watermark)
URL изображения.

stamp
('templates/stamp.png')

Пример:

.tdd

<?php
$types[1] = 'file widthField(2)';
$types[2] = 'int(4)';
$types[3] = 'file maxWidth(100) maxHeight(100) sourceField(1)';
$types[6] = "file stamp('templates/stamp.png')";

# Поле 3 можно скрыть 
$fields['hidden'] = [3];
?>

Закачанный файл будет подвергается преобразованию согласно параметрам и сохраняется на сервере в папке datafiles. Изображения рекомендуется преобразовывать к формату .gif, .jpg, .png или webp.


Ниже приводятся нетривиальные примеры использования file-данных:

Для оптимальной компрессии изображений рекомендуется на сервер установить Imagick (ImageMagick).


См. также