<?xml version='1.0' encoding='UTF-8'?>
<rss version='2.0'>
	<channel>
		<title>Cotonti - Files</title>
		<link>https://lily-software.com</link>
		<description>Лента комментариев страницы</description>
		<generator>Cotonti</generator>
		<language>ru</language>
		<pubDate>Sun, 19 Apr 2026 18:55:24 +0300</pubDate>

		<item>
			<title>Комментарий пользователя CrazyFreeMan</title>
			<description><![CDATA[<p>Кто-то пробовал прикрутить croper до загрузки изображения? На сколько это реально?  </p>
]]></description>
			<pubDate>ср, 01 фев 2017 15:36:50 +0300</pubDate>
			<link><![CDATA[https://lily-software.com/free-scripts/cotonti-files#c947]]></link>
		</item>
		<item>
			<title>Комментарий пользователя Alex</title>
			<description><![CDATA[<p>Да,  конечно будет. Вот примерный "Roadmap": https://github.com/Alex300/files/issues</p>
]]></description>
			<pubDate>чт, 08 сен 2016 09:36:39 +0300</pubDate>
			<link><![CDATA[https://lily-software.com/free-scripts/cotonti-files#c942]]></link>
		</item>
		<item>
			<title>Комментарий пользователя goldwizard13</title>
			<description><![CDATA[<p>Зравствуйте Алексей, будет ли далее поддерживатся вами этот отличный модуль? спасибо.</p>
]]></description>
			<pubDate>ср, 07 сен 2016 18:29:01 +0300</pubDate>
			<link><![CDATA[https://lily-software.com/free-scripts/cotonti-files#c941]]></link>
		</item>
		<item>
			<title>Комментарий пользователя Alex</title>
			<description><![CDATA[<p>Не могу воспроизвести у себя эту ситуацию.</p>

<p><em>* Просьба все технические вопросы, которые могут потребовать обсуждения, <a href="https://lily-software.com/forums">задавать на форуме</a>. (спасибо за понимание)</em></p>
]]></description>
			<pubDate>ср, 13 янв 2016 15:12:56 +0300</pubDate>
			<link><![CDATA[https://lily-software.com/free-scripts/cotonti-files#c928]]></link>
		</item>
		<item>
			<title>Комментарий пользователя </title>
			<description><![CDATA[<p>Шаблон на Bootstrap 3, все работает отлично и красиво, файлы закачиваются, редактируются и т.д в  в корневом каталоге в настройках размер файла файлов поставил 0 может есть какой ньюанс в настройках, потому немогу создать новый каталог.</p>
]]></description>
			<pubDate>ср, 13 янв 2016 11:22:30 +0300</pubDate>
			<link><![CDATA[https://lily-software.com/free-scripts/cotonti-files#c927]]></link>
		</item>
		<item>
			<title>Комментарий пользователя Alex</title>
			<description><![CDATA[<p>Шаблоны "в коробке" расчитаны на использование темы, реализованной на фреймворке <a href="https://lily-software.com/go.php?getbootstrap.com/" target="_blank">Bootstrap</a>. Если Вы его не используете, Вам нужно в своем шаблоне определить свою функцию вывода формы создания каталога.</p>
]]></description>
			<pubDate>ср, 13 янв 2016 11:05:28 +0300</pubDate>
			<link><![CDATA[https://lily-software.com/free-scripts/cotonti-files#c926]]></link>
		</item>
		<item>
			<title>Комментарий пользователя </title>
			<description><![CDATA[<p>Здравствуйте, отличный плагин, но есть проблемка не могу по ссылке index.php?e=files&amp;m=pfs&amp;uid=1&amp;c1=pageform&amp;c2=rpagetext&amp;parser=html создать новый каталог, нажимаю на ссылку она нефункционирует, в чем может быть причина, спасибо</p>
]]></description>
			<pubDate>ср, 13 янв 2016 10:23:45 +0300</pubDate>
			<link><![CDATA[https://lily-software.com/free-scripts/cotonti-files#c925]]></link>
		</item>
		<item>
			<title>Комментарий пользователя Roffun</title>
			<description><![CDATA[<p>Алексей, отличный модуль получился. Я долго присматривался к нему, так как привык к attach2 , но похоже что можно его использовать еще комфортнее чем аттач2.</p>
]]></description>
			<pubDate>пн, 16 мар 2015 21:04:43 +0300</pubDate>
			<link><![CDATA[https://lily-software.com/free-scripts/cotonti-files#c906]]></link>
		</item>
		<item>
			<title>Комментируемая страница</title>
			<description><![CDATA[<p style="text-align:justify;">Модуль для <a href="https://lily-software.com/go.php?cotonti.com" target="_blank" rel="noreferrer noopener">CMF Cotonti</a>.</p>

<p style="text-align:justify;"><em>тип:</em> <strong>модуль</strong><br />
<em>Версия модуля</em>: <strong>2.1.0</strong><br />
<em>Совместимость</em>: <strong>Siena</strong></p>

<p style="text-align:justify;">GitHub: <a href="https://lily-software.com/go.php?https://github.com/Alex300/files" target="_blank" rel="noreferrer noopener">https://github.com/Alex300/files</a></p>

<p style="text-align:justify;"><br />
Модуль организует управление вложениями к страницам, постам и любым другим объектам, создание фотогалерей на страницах и постах. А также совмещает в себе персональное файловое хранилище пользователей, файловое хранилище сайта для администраторов, управление аватарами и альбомами пользователей.<br />
Он является заменой модуля PFS, плагина «User images», входящих в «коробку» Cotonti и плагина «Attach2».</p>

<p> </p>

<p style="text-align:justify;"><strong>1. Особенности</strong></p>

<ul>
	<li style="text-align:justify;">Хранение файлов как в локальной файловой системе на сервере, так и в удаленных файловых хранилищах, таких как Amazon AWS S3, Azure Blob Storage, Yandex Objet Storage, BunnyCdn, Google Cloud Storage, WebDav, FTP, SFTP и др.</li>
	<li style="text-align:justify;">Современный механизм загрузки основанный на <a href="https://lily-software.com/go.php?https://github.com/blueimp/jQuery-File-Upload" target="_blank" rel="noreferrer noopener">jQuery File Upload</a></li>
	<li style="text-align:justify;">Поддержка мультизагрузки.</li>
	<li style="text-align:justify;">Петаскивание файлов мышью прямо на форму загрузки.</li>
	<li style="text-align:justify;">Загрузка файлов по-частям («Чанками») позволяет обойти ограничение на загрузку файла через $_POST в 2 мб.</li>
	<li style="text-align:justify;">Использование для обработки изображений как библиотеки <a href="https://www.php.net/manual/ru/book.image.php" target="_blank" rel="nofollow noreferrer noopener">GD</a>, так и <a href="https://www.php.net/manual/ru/book.imagick.php" target="_blank" rel="nofollow noreferrer noopener">ImageMagick</a>. Последняя поддерживает большее количество форматов изображений, в т.ч. HEIC/HEIF, которые используются в смартфонах iPhone от Apple.</li>
	<li style="text-align:justify;">Уменьшение больших изображений до указанных размеров при загрузке.</li>
	<li style="text-align:justify;">Использование водяного знака (watermark) для изображений.</li>
	<li style="text-align:justify;">Простая интергация через обратный вызов функций из шаблона.</li>
	<li style="text-align:justify;">Загрузки подсчитываются и происходят с оригинальным именем файла.</li>
	<li style="text-align:justify;">Создание изображений для предпросмотра (thumbnail) и простая его настройка.</li>
	<li style="text-align:justify;">Поддержка экстраполей.</li>
	<li style="text-align:justify;">Специальные ББкоды для вставки изображений и галлерей в текст страниц вне зависимости от выбранного парсера.</li>
	<li style="text-align:justify;">Поддерживаемые форматы изображений библиотекой GD: .avif, .bmp, .gif, .jpg, .png, .tga, .tpic, .wbmp, .webp, .xbm</li>
	<li style="text-align:justify;">Поддерживаемые <a href="https://imagemagick.org/script/formats.php" target="_blank" rel="nofollow noreferrer noopener">форматы изображений библиотекой Imagick</a>.</li>
</ul>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><strong>2. Системные требования и ограничения:</strong></p>

<ul>
	<li style="text-align:justify;">Установленная Cotonti Siena версии не ниже 0.9.24 beta. (Files v. 1.0.8 совместим с Cotonti Siena 0.9.18)</li>
	<li style="text-align:justify;">PHP версии 7.4 и выше. (Files v. 1.0.8 совместим с PHP v 5.4)<br />
	<strong>.bmp</strong> библиотекой GD поддерживается на PHP &gt;= 7.2,<br />
	<strong>.tga</strong> библиотекой GD загрузка поддерживается на PHP &gt;= 7.4, уменьшенные копии изображений создаются в JPEG<br />
	<strong>.avif</strong> библиотекой GD поддерживается на PHP &gt;= 8.1</li>
	<li style="text-align:justify;">Для использования удаленного файлового хранилища требуется установленная <a href="https://flysystem.thephpleague.com" rel="nofollow">Flysystem</a> и соотвествующий адаптер.</li>
	<li style="text-align:justify;">jQuery File Upload выводит превью при загрузке изображений  не для всех указанных форматов.</li>
	<li style="text-align:justify;">Наличие на Вашем сайте установленной <a href="https://lily-software.com/free-scripts/cotonti-lib">библиотеки Cotonti Lib</a> <strong>версии 2.2.x</strong></li>
	<li style="text-align:justify;">Модуль <strong>не совместим</strong> с модулем PFS и плагином «User images». Их не следует устанавливать, если Вы собираетесь использовать модуль «Files».</li>
	<li style="text-align:justify;">Шаблоны "в коробке" расчитаны на использование темы, реализованной на фреймворке <a href="https://lily-software.com/go.php?getbootstrap.com" target="_blank" rel="noreferrer noopener">Bootstrap</a> v3 (Устанавливается отдельно)</li>
</ul>

<p style="text-align:justify;">   <em>Замечание</em>. В силу значительно отличающейся структуры БД и способа хранения файлов, модуль «Files» не подхватит автоматически присутсвующие на сайте файлы из модуля «PFS» и плагинов «User images» и «Attach2».</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><strong>2.1 Перенос данных из модуля «PFS» и плагинов «User images» и «Attach2».</strong></p>

<p style="text-align:justify;">Если Вы хотите использовать модуль «Files» для уже существующего сайта, Вам следует использовать конвертер для переноса данных между модулями. Вы можете <a href="https://lily-software.com/contact">заказать его здесь</a>. В настоящий момент существует конвертер для переноса данных из этих трех расширений, т.к. они одни из самых часто используемых. Но можно сделать конвертер для любого другого модуля или плагина.</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><strong>3. Установка</strong></p>

<ul>
	<li style="text-align:justify;">Загрузить архив и распаковать в папку с модулями вашего сайта.</li>
	<li style="text-align:justify;">В меню «Управление сайтом &gt; Расширения» произвести установку нажав <strong>«установить»</strong>.</li>
	<li style="text-align:justify;">В настройках модуля выберите подходящие Вам установки.</li>
	<li style="text-align:justify;">В шаблонах панели управления <strong>«admin.users.tpl»</strong> и <strong>«admin.users.tpl»</strong> а также в некоторых других создайте теги в соотвествии с рекомендациями на настранице модуля в панели управления. (https://&lt;ваш_домен&gt;/admin/extensions?a=details&amp;mod=files)</li>
	<li style="text-align:justify;">При необходимости на странице редактирования групп пользователей установите ограничения на размер загружаемого файла, общее файловое пространство пользователя и максимальное количество вложений для одного объекта. Для каждой группы пользователей могут действовать свои разрешения.<br />
	Обратите внимание, что размеры указываются <strong>в байтах</strong>, ноль означает «безлимит», а -1 - запрет.</li>
	<li style="text-align:justify;">Создайте <strong>каталог для файлов</strong> на вашем сервере (по умолчанию используется <strong>«datas/files»</strong>) и установите права на запись для PHP (например CHMOD 775 или CHMOD 777).</li>
	<li style="text-align:justify;">Используйте в Вашей теме <strong>Resources::setAlias() </strong>для объявления алиясов для файлов Bootstrap, если Вы планируете его использовать и он установлен в папку, отличную от объавленной в классе <strong>Resources</strong>.</li>
</ul>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><strong>3.1 Загрузка файлов в удаленное хранилище</strong></p>

<p style="text-align:justify;">Для хранения файлов можно использовать как локальную файловую систему на сервере с сайтом, так и в удаленные файловые хранилища, такие как Amazon AWS S3, Azure Blob Storage, Yandex Objet Storage, BunnyCdn, Google Cloud Storage, WebDav, FTP, SFTP и др.</p>

<p style="text-align:justify;">Для использования локальной файловой системы ничего дополнительно устанавливать и настраивать не нужно.</p>

<p style="text-align:justify;">Для использования удаленного файлового хранилища требуется установленная <a href="https://flysystem.thephpleague.com" rel="nofollow">Flysystem</a> и соотвествующий адаптер. Как установить и сконфигуририровать подключение к нужному файловому хранилищу читайте в <a href="https://lily-software.com/free-scripts/cotonti-lib/file-system">соотвествующей статье</a>.</p>

<p style="text-align:justify;">После этого нужно настроить использование файловых систем модулем файлов. Если вы хотите использовать по-умолчанию удаленное файловое хранилище вместо локального или использовать одно удаленное файловое хранилище для хранения всех файлов, то на предыдущем этапе нужно сконфигурировать подключение с именем <code>default</code>. Например, в <strong>datas/config.php</strong> добавте:</p>

<pre class="brush:php;">
$cfg['filesystem'] = [
    // Подключение к Yandex Object Storage будет использоваться по-умолчанию
    'default' =&gt; [
        'adapter' =&gt; '\League\Flysystem\AwsS3V3\AwsS3V3Adapter',
        'config' =&gt; [
            //'version' =&gt; 'latest', // Optional
            'endpoint' =&gt; 'https://storage.yandexcloud.net',
            'region' =&gt; 'ru-central1',
            'bucket' =&gt; 'my-bucket-name',
            'accessKey' =&gt; 'MyAccessKey',
            'secretKey' =&gt; 'MySecretKey',
 
            // install: composer require league/flysystem-path-prefixing:^3.3 to use prefix
            //'pathPrefix' =&gt; 'a/path/prefix',
        ],
    ],
];</pre>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;">Кроме подключения по-умолчанию вы можете настроить файловые хранилища для отдельных обдектв (страниц, постов, галерей и т.п.). Например, в <strong>datas/config.php</strong> добавте:</p>

<pre class="brush:php;">
$cfg['files']['storages'] = [

    // Файлы с source='page' загружать на Google.Drive
    'Google.Drive' =&gt; ['page'],

    // Или можно указать и так
    'Yandex.Cloud' =&gt; [
        ['source' =&gt; 'page'],
    ],

    // А файлы галерей, прикрепленные к страницам (с source='page' и source_field='gallery')
    // загружать на BunnyCDN.
    'BunnyCDN' =&gt; [
        ['source' =&gt; 'page', 'field' =&gt; 'gallery'],
        ['source' =&gt; 'page', 'field' =&gt; ['gallery', 'someField']], // Так тоже можно
    ],
];</pre>

<p style="text-align:justify;">Здесь <strong>ключ массива</strong> - это название подключения, которое указали при <a href="https://lily-software.com/free-scripts/cotonti-lib/file-system">конфигурировании подключений</a>. Для использованя локальной файловой системы укажите <code>'local'</code> (имеет смысл только если подключение по-умолчанию - не локальное франилище).<br />
<strong>source</strong> и <strong>field</strong> будут объяснены ниже.</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><strong>4. Использование</strong></p>

<p style="text-align:justify;">Этот раздел рассказывает об основных моментах использования модуля на страницах (pages) c  минимальными изменениями сайта. Аналогично можно настроить его для применения с другими разделам сайта, как например темы форума или комментарии.</p>

<p style="text-align:justify;">Большинство примеров указаны для темы оформления c подключенным <strong><a href="https://lily-software.com/go.php?getbootstrap.com/" target="_blank" rel="noreferrer noopener">Bootstrap</a></strong>, т.к. его использует jQuery File Upload, но Вы всегда можете сделать свои CSS стили не используя bootstrap. Вы можете переопределить шаблоны для решения Ваших задач.</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><strong><em>4.1  Личное файловое хранилище</em>. Альбомы пользователей.</strong></p>

<p style="text-align:justify;">Модуль Файлов предоставляет пользователям персональное файловое хранилище ( и файловое хранилище сайта для администраторов ). Файлы можно хранить по папкам и альбомам. Публичные папки и альбомы пользователя доступны для просмотра другим пользователям. Также Вы можете вставить на страницу, точнее прямо в редактор (CKEditor или MarkitUp или другой), ссылку на файл, изображение, его миниатюру или весь альбом в виде галереи.</p>

<p style="text-align:justify;">Чтобы иметь возможность вставлять файлы в редактор из личного файлового хранилища или файлового хранилища сайта,  на форме редактирования страницы нужно добавить теги <code>{PAGEEDIT_FORM_PFS}</code> <code>{PAGEEDIT_FORM_SFS}</code> - в форму редактирования и <code>{PAGEADD_FORM_PFS}</code> <code>{PAGEADD_FORM_SFS}</code> в форму добавления страницы.</p>

<p>Также мои файлы доступны на отдельной странице: <strong>https://&lt;ваш_домен&gt;/files?m=pfs</strong> - можно добавить ее в меню пользователя как "Мои файлы"</p>

<p>Файловый архив сайта: <strong>https://&lt;ваш_домен&gt;/files?m=pfs&amp;uid=0</strong></p>

<p> </p>

<p>Публичные файлы и альбомы пользователя другим пользователям доступны  по ссылкам:<br />
<strong>https://&lt;ваш_домен&gt;/files?a=files&amp;uid=&lt;id_пользователя&gt;</strong> - файлы<br />
<strong>https://&lt;ваш_домен&gt;/files?a=album&amp;uid=&lt;id_пользователя&gt;</strong> - альбомы</p>

<p>Можно добавить их в профиль пользователя.</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><em><strong>4.2  Аватары пользователей</strong></em></p>

<p style="text-align:justify;">В стандартных шаблонах модуля пользователей Cotonti - <strong>users.profile.tpl</strong> и <strong>users.edit.tpl</strong> уже есть теги <code>{USERS_PROFILE_AVATAR}</code> и  <code>{USERS_EDIT_AVATAR}</code> соотвественно. Модуль на их место выводит форму загрузки аватара пользователя. А тегом<code>{USERS_DETAILS_AVATAR}</code> (или <code>{PAGE_OWNER_AVATAR}</code> или {ЛЮБОЙ_ПРЕФИКС_AVATAR}, если тег генерируется функцией <code>cot_generate_usertags()</code>) аватар выводится в шаблон. Кроме того, для вывода аватара в шаблон Вы можете использовать например такую конструкцию:</p>

<pre class="brush:php;">
&lt;img src="https://lily-software.com/{PHP.usr.profile.user_avatar|cot_filesUserAvatarUrl($this)}" alt="{PHP.usr.profile.user_name}" /&gt;</pre>

<p style="text-align:justify;">или</p>

<pre class="brush:php;">
&lt;img src="https://lily-software.com/{PHP.urr.user_avatar|cot_filesUserAvatarUrl($this, 200, 140, 'outbound')}"  /&gt;</pre>

<p style="text-align:justify;">Функция</p>

<pre class="brush:php;">
cot_filesUserAvatarUrl($fileId, $width = 0, $height = 0, string $frame = ''): string</pre>

<p style="text-align:justify;">как видите принимает 4 параметра, из которых обязательным является только первый - id файла - аватара. Также Вы можете указать длину, ширину и способ кадрирования, если Вы не хотите использовать настройки модуля по-умолчанию.</p>

<p style="text-align:justify;">Также для вывода аватаров доступна функция</p>

<pre class="brush:php;">
cot_filesUserAvatar($file_id = 0, $urr = 0, $width = 0, $height = 0, $frame = ''): string</pre>

<p style="text-align:justify;">в отличие от <code>cot_filesUserAvatarUrl()</code>, она возвращает полный html код аватара включая тег <code>&lt;IMG&gt;</code> и если у пользователя не установлен аватар, она выводит аватар по-умолчанию.</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><em><strong>4.3  Вложения</strong></em></p>

<p style="text-align:justify;">Это самая сложная, самая гибкая и самая интересная возможность использования этого модуля. На ней стоит остановиться подробнее. Модуль Файлов позволяет не только вставлять ссылки и миниатюры в редактор, как это было описано выше, но и позволяет прикреплять к любым объектам, например страницам или постам на форуме, вложения, файлы для скачивания и галереи изображений. Кроме того, модуль умеет загружать файлы к еще пока не существующим объектам, например к странице, которая только создается. И не стоит беспокоиться о том, что останутся бесхозные файлы, если пользователь так и не сохранит страницу, система уборки вычистит файлы, если объекты для которых они предназначались, так и не были созданы.</p>

<p style="text-align:justify;">При удалении страницы или поста на форуме модуль также сам удалит все прикрепленные к ним файлы. А вот для любых других объектов (а также если Вы используете модуль в своих модулях или плагинах) <strong>при удалении объектов, нужно позаботиться об удалении и прикрепленных к нему файлов</strong>. Но эта процедура крайне проста. Можно действовать по аналогии со скриптом <strong>files.page.delete.php</strong>, который удаляет все вложения при удалении страницы.</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;">Прежде, чем мы сможем использовать вложения, нам нужно их добавить. Сделать это можно несколькими способами:</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><em><strong>4.3.1 Добавление элемента загрузки файла на форму создания/редактирования объекта</strong></em></p>

<p style="text-align:justify;">В шаблон <strong>page.add.tpl</strong> добавте код</p>

<pre class="brush:php;">
{PHP|cot_filesFileBox('page', 0)}</pre>

<p style="text-align:justify;">А в шаблон <strong>page.edit.tpl</strong></p>

<pre class="brush:php;">
{PAGEEDIT_FORM_ID|cot_filesFileBox('page', $this)}</pre>

<p style="text-align:justify;">Для  добавления вложений к страницам <strong>этого достаточно</strong>. На месте тегов будет выведен загрузчик как на иллюстрации ниже.  Хотите большего? Тогда дочитайте этот параграф до конца.</p>

<p style="text-align:justify;">ID пока несуществующих (новых) объектов всегда указывается равным 0.</p>

<p style="text-align:justify;">Функция</p>

<pre class="brush:php;">
function cot_filesFileBox(
    string $source,
    $item,
    string $name = '',
    string $type = 'all',
    $limit = -1,
    string $tpl = 'files.filebox',
    $standalone = 0,
    $userId = null
): string</pre>

<p style="text-align:justify;">Принимает следующие параметры:</p>

<ul>
	<li style="text-align:justify;"><strong>$source</strong> - тип объекта или имя модуля. Например: page</li>
	<li style="text-align:justify;"><strong>$item</strong> - id объекта. К примеру, это ID страницы, ID поста на форуме или ID комментария. Ключевое слово шаблонизатора CoTemplate  <code>$this</code> позволяет передать в этот параметр значение тега.</li>
	<li style="text-align:justify;"><strong>$name</strong> - имя поля. Можно оставить пустым. Но мы можем для одной страници прикреплять отдельно логотип, отдельно остальные файлы. Или придумать более замысловатую схему прикрепления вложений.</li>
	<li style="text-align:justify;"><strong>$type</strong> - тип загружаемых файлов. 'all' - все сайлы или 'file' или 'image'</li>
	<li style="text-align:justify;"><strong>$limit</strong> - Ограничение на количество загружаемых файлов. Если указан -1 - то будут использованы ограничения, действующие для группы, которой принадлежит пользователь. 0 - не ограничено.</li>
	<li style="text-align:justify;"><strong>$tpl</strong> - шаблон виджета загрузки файлов.</li>
</ul>

<p style="text-align:justify;"><em>Обратите внимание</em>. Шаблон виджета по умолчанию использует библиотеку <strong>Bootstrap</strong> но сам его не загружает. Вы должны подключить bootstrap самостоятельно. Или добавте свои CSS стили. По своему усмотрению.</p>

<p style="text-align:justify;"><img alt="Загрузка файлов в форму" src="https://lily-software.com/public/files/sfs/35/file_395.jpg" style="height:442px;width:680px;" /></p>

<p style="text-align:justify;">На этой иллюстрации на форме редактирования страницы присутствует два загрузчика файлов. Первый для загрузки картинки для вывода в списках страниц (логотипа с параметром $name = 'logo'), а второй для формирования галери с названием поля - 'gallery'. Конечно для вывода в списки страниц можно было взять первую (или последнюю) картину из поля 'gallery' и обойтись одним загрузчиком. Но нужно было иметь возможность поставить в качестве логотипа произвольное изображение.</p>

<p style="text-align:justify;">Вот как это реализовано:</p>

<p>В шаблон page.add.tpl добавлен код:</p>

<pre class="brush:xml;">
{PHP|cot_filesFileBox('page', 0, 'logo')}
{PHP|cot_filesFileBox('page', 0, 'gallery')}</pre>

<p>а в шаблон page.edit.tpl</p>

<pre class="brush:xml;">
{PAGEEDIT_FORM_ID|cot_filesFileBox('page', $this, 'logo')}
{PAGEEDIT_FORM_ID|cot_filesFileBox('page', $this, 'gallery')}</pre>

<p style="text-align:justify;">Картинку из первого загрузчика можно выводить, например в списках страниц или сверху страницы:</p>

<pre class="brush:xml;">
&lt;!-- IF {LIST_ROW_ID|cot_filesCount('page', $this, 'logo', 'images')} &gt; 0 --&gt;
&lt;div class="pull-left marginright10 marginbottom10"&gt;
    &lt;a href="https://lily-software.com/{LIST_ROW_URL}" title="{LIST_ROW_SHORTTITLE}" rel="bookmark" class="thumbnail"&gt;&lt;img
       alt="{LIST_ROW_SHORTTITLE}" src="https://lily-software.com/{LIST_ROW_ID|cot_filesGet('page', $this, 'logo')|cot_filesThumbnailUrl($this, 195, 130, 'outbound')}" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;!-- ENDIF --&gt;</pre>

<p style="text-align:justify;">а со второго - использовать как галерею на самой странице:</p>

<pre class="brush:xml;">
&lt;!-- IF {PAGE_ID|cot_filesCount('page', $this, 'gallery', 'images')} &gt; 0 --&gt;
{PAGE_ID|cot_filesGallery('page', $this, 'gallery')}
&lt;!-- ENDIF --&gt;</pre>

<p style="text-align:justify;">Интерфейс загрузчика файлов достаточно стандартен и понятен. Он позволяет выбрать один или несколько файлов за 1 раз, загрузить их, позволяет удалять загруженные, заменять файлы и редактировать описания посредством. Для настройки необходимой последовательности файлов просто перетаците соответствующую строку (Drag &amp; Drop).</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><strong>И еще один важный момент</strong>. Возможность загружать файлы к создаваемому объекту не будет работать при "массовом создании" объетов. Только одна форма создания одного объекта на странице. Это не относится к массовому редактированию объектов.</p>

<p style="text-align:justify;">Если Вы используете <strong>модуль Файлов </strong>с дугими объектами (или в своих модулях / плагинах) и используете загрузку файлов к пока не существующим объектам, Вам нужно сразу после сохранения объекта и до любого редиректа вызвать метод</p>

<pre class="brush:php;">
\cot\modules\files\services\FileService::linkFiles($source, $item)</pre>

<p style="text-align:justify;">Он выполняет привязку уже загруженных файлов к только что созданому объекту. Принимает 2 параметра:</p>

<p style="text-align:justify;"><strong>$source</strong> - тот же $source, что был передан для функции <code>cot_filesFileBox()</code>,<br />
<strong>$item</strong> - id только что созданного объекта</p>

<p style="text-align:justify;">Для модуля страниц вызывать <code>FileService::linkFiles($source, $item)</code> не нужно. Это уже сделано в файле<strong> files.page.add.add.done.php</strong>. С другими объектами следует действовать по аналогии с ним.</p>

<p style="text-align:justify;">При сохранении существующих объектов после редактирования (объектов у которых уже есть свой id, который передавался в функцию <code>cot_filesFileBox()</code>) вызывать <code>FileService::linkFiles($source, $item)</code> также не нужно. Файлы к таким объектам «привязываются» сразу, в момент загрузки.</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><em><strong>4.3.2 Добавление загрузчика в iframe</strong></em></p>

<p style="text-align:justify;">В шаблон <strong>page.edit.tpl</strong></p>

<pre class="brush:php;">
{PAGEEDIT_FORM_ID|cot_filesWidget('page', $this)}</pre>

<p style="text-align:justify;">Это добавит iframe с загрузчиком файлов для существующего объекта.</p>

<p style="text-align:justify;">Функция</p>

<pre class="brush:php;">
cot_filesWidget(string $source, $item, string $field = '', string $tpl = 'files.widget', $width = '100%', $height = '300'): string</pre>

<p>Эта функция используется для создания виждета прикрепления файлов. Давайте взглянем на параметры:</p>

<ul>
	<li style="text-align:justify;"><strong>$source</strong> - определяет тип содержимого к которому прикрепляются файлы или код модуля или плагина. Например 'page', 'forums', 'comments', и т.п..</li>
	<li style="text-align:justify;"><strong>$item</strong> - ID объекта, к которому прикрепляются файлы.</li>
	<li style="text-align:justify;"><strong>$field</strong> - имя поля. Можно оставить пустым. Позволяет к одному объекту прирепить несколько групп файлов.</li>
	<li style="text-align:justify;"><strong>$tpl</strong> - Код шаблона, содержащего html код виджета. Например, если Вы укажете 'files.my_widget', система попытается срендерить файл «themes/your_theme/modules/files/files.my_widget.tpl». Шаблоны по умолчанию можно найти в папке «modules/files/tpl», Вы можете использовать их как образец. «files.widget» вставляет диалог в iframe, а «attach2.link» (см. далее) добавляет ссылку на всплывающий диалог с загрузчиком.</li>
	<li style="text-align:justify;"><strong>$width</strong> - Ширина iframe.</li>
	<li style="text-align:justify;"><strong>$height</strong> - Высота iframe.</li>
</ul>

<p><img alt="Загрузка файлов в iframe" src="https://lily-software.com/public/files/sfs/35/file_394.jpg" style="height:390px;width:680px;" /></p>

<p style="text-align:justify;"><em>Замечание</em>. Т.к. подключаемый виджет содержится в iframe, то хоть он по умолчанию и использует Bootstrap, но на дизайне Вашего сайта это никак не скажется, если Вы Bootstrap не используете. Виджет сам подключает Bootstrap, так что никаких дополнительных действий предпринимать не требуется</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><em><strong>4.3.3 Добавление ссылки и диалога загрузки файлов.</strong></em></p>

<p style="text-align:justify;">Модуль позволяет добавлять файлы не только во время редактирования объекта, но и прямо во время просмотра.</p>

<p style="text-align:justify;">Добавим ссылку "Прикрепить файлы" в меню администрирования страницы, в шаблон <strong>page.tpl</strong></p>

<p><img alt="Ссылка на загрузчик файлов" src="https://lily-software.com/public/files/sfs/35/file_396.jpg" /></p>

<pre class="brush:xml;">
&lt;!-- IF {PHP|cot_auth('files', 'a', 'W')} --&gt;
&lt;li&gt;{PAGE_ID|cot_filesWidget('page', $this, '', 'files.link')}&lt;/li&gt;
&lt;!-- ENDIF --&gt;</pre>

<p style="text-align:justify;">Эта ссылка будет видна только тем пользователям, которые имеют права на прикрепление файлов (которое определяется правом «записи» (Write access) в настойках прав этого модуля).</p>

<p style="text-align:justify;">Если нажать на ссылку "Прикрепить файлы", откроется окно следующего окно:</p>

<p style="text-align:justify;"><img alt="Виджет загрузки файлов" src="https://lily-software.com/public/files/sfs/35/file_397.jpg" style="height:453px;width:680px;" /></p>

<p style="text-align:justify;">После того как вы загрузили все необходиомое и написали описания нажмите «закрыть», после чего содержимое страницы обновится и вы увидите результат.</p>

<p style="text-align:justify;">Также среди шаблонов по умолчанию в папке модуля «modules/files/tpl» есть шаблон виджета «files.link.bootstrap.tpl», который открывает загрузчик в модальном окне Bootstrap. По аналогии очень легко сделать так, чтобы загрузчик открывался в диалоговом окне jQuery.UI.</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><em><strong>4.3.4. Просмотр прикрепленных файлов</strong></em></p>

<p style="text-align:justify;">Самый простой способ вывода прикрепленных к странице файлов это использовать виджет <code>cot_filesDisplay()</code> в шаблоне «page.tpl»:</p>

<pre class="brush:xml;">
&lt;!-- IF {PAGE_ID|cot_filesCount('page', $this)} &gt; 0 --&gt;
&lt;div class="block"&gt;
    &lt;h3&gt;{PHP.L.files_attachments}&lt;/h3&gt;
    {PAGE_ID|<code>cot_filesDisplay</code>('page', $this)}
&lt;/div&gt;
&lt;!-- ENDIF --&gt;</pre>

<p style="text-align:justify;">Который отобразит примерно следующее:</p>

<p style="text-align:justify;"><img alt="Модуль файлов - показ файлов" src="https://lily-software.com/public/files/sfs/35/file_398.jpg" style="height:307px;width:680px;" /></p>

<p style="text-align:justify;"> </p>

<p><em><strong>4.3.5.  Добавление простой галереи</strong></em></p>

<p>Для добавления простой галереи на страницу, вы можете включить в шаблон «page.tpl» следующий код:</p>

<pre class="brush:xml;">
&lt;!-- IF {PAGE_ID|cot_filesCount('page', $this, '', 'images')} &gt; 0 --&gt;
&lt;div class="block"&gt;
    {PAGE_ID|cot_filesGallery('page', $this)}
&lt;/div&gt;
&lt;!-- ENDIF --&gt;</pre>

<p>Он добавит галерею на страницу:</p>

<p><img alt="Модуль файлов - галерея" src="https://lily-software.com/public/files/sfs/35/file_399.jpg" style="height:486px;width:680px;" /></p>

<p>Для красивого открытия изображений во всплывающем окне, Вы можете использовать любой подходящий JavaScript. Например FancyBox.</p>

<p><br />
<em><strong>4.3.6. Добавление списка файлов для скачивания</strong></em></p>

<p style="text-align:justify;">Еще одной растространненной задачей является добавление на страницу списка файлов для скачивания. Используйте функцию <strong>cot_filesDownloads()</strong> в своем шаблоне(«page.tpl»):</p>

<pre class="brush:xml;">
&lt;!-- IF {PAGE_ID|cot_filesCount('page',$this,'','files')} &gt; 0 --&gt;
&lt;div class="block"&gt;
    &lt;h3&gt;{PHP.L.files_downloads}&lt;/h3&gt;
    {PAGE_ID|cot_filesDownloads('page',$this)}
&lt;/div&gt;
&lt;!-- ENDIF --&gt;</pre>

<p>Стандартный блок выглядит так:</p>

<p><img alt="Список файлов для загрузки" src="https://lily-software.com/public/files/sfs/35/file_400.jpg" /></p>

<p> </p>

<p><em><strong>4.4 Экстраполя</strong></em></p>

<p style="text-align:justify;">Как и большинство модулей и плагинов Cotonti, модуль файлов позволяет добавлять и использовать экстраполя для файлов и папкок (альбомов). Экстраполя типа "Файл" не поддерживаются. Для редактирования их значений через Ajax элементы формы экстраполей должны иметь класс «file-edit». Просто добавте атрибут <strong>«class»</strong> со значением <strong>«file-edit»</strong> в панеле управления - на странице редактирования экстраполей в поле «HTML-код поля» .</p>

<p> </p>

<p><em><strong>4.5 Расширенные возможности</strong></em></p>

<p>Для решения большинства задач по выводу вложений этого достаточно. Хотите большего? Тогда этот раздел для Вас.</p>

<p><em><strong>4.5.1 Вызов функций (виджетов) из TPL шаблонов и их параметры.</strong></em></p>

<p style="text-align:justify;">Прикрепление файлов не ограничивается только модулем страниц и стандартными шаблонами. Вы легко можете настроить прикрепление файлов и к другим объектам системы и настроить соответствующие им шаблоны. Ниже будет описанино какие функции плагин предоставляет для использования в шаблонах и какие параметры им нужно передавать.</p>

<p> </p>

<p><strong>cot_filesDisplay</strong></p>

<pre class="brush:php;">
/**
 * Renders attached items on page
 * @param string $source Target module/plugin code
 * @param int|int[] $item Target item id
 * @param string $field
 * @param string $tpl Template code
 * @param string $type Attachment type filter: 'files', 'images'. By default includes all attachments.
 * @param int $limit
 * @param string $order
 * @return string Rendered output
 */
function cot_filesDisplay(
    string $source,
    $item,
    string $field = '',
    string $tpl = 'files.display',
    string $type = 'all',
    $limit = 0,
    string $order = ''
): string</pre>

<p style="text-align:justify;">Этот виджет используется для отображения прикрепленых к объекту файлов. Он может выводить как все файлы, так отдельно изображения, отдельно файлы, не являющиеся изображениями. Упомянутые выше функции <code>cot_filesGallery</code> и <code>cot_filesDownloads</code> по сути являются «обертками» для этой функции. Принимаемые параметры схожи с функциями, рассмотренными выше:</p>

<ul>
	<li style="text-align:justify;"><strong>$source</strong> - определяет тип содержимого к которому прикреплены изображения. Аналогично соотвествующему параметру <code>cot_filesFilebox()</code> и <code>cot_filesWidget()</code>. Например 'page',  'forums',  'comments', и т.п...</li>
	<li style="text-align:justify;"><strong>$item</strong> - ID объекта, файлы которого мы выводим.</li>
	<li style="text-align:justify;"><strong>$field</strong> - имя поля.</li>
	<li style="text-align:justify;"><strong>$tpl</strong> - Код шаблона, содержащего html код виджета.</li>
	<li style="text-align:justify;"><strong>$type</strong> - тип. Этот параметр используется при необходимости вывода только изображений или только файлов, не не являющихся изображениями.</li>
</ul>

<p style="text-align:justify;">Стандартные шаблоны Вы можете найти в папке «modules/files/tpl». Используйте их как образец.<br />
<strong>«files.display.tpl»</strong> и <strong>«files.downloads.tpl»</strong> представляют собой разные стили отображения файлов.<br />
<strong>«files.gallery.tpl»</strong> - шаблон галереи.<br />
<strong>«files.bootstrap-carousel_gallery.tpl»</strong> - Слайдшоу - <a href="https://lily-software.com/go.php?getbootstrap.com/javascript/#carousel">карусель на базе bootstrap</a>.</p>

<p style="text-align:justify;">Обратите внимание, на то, что параметр <strong>$tpl</strong> функции принимает имя файла без расширения. (.tpl на конце указывать не нужно)</p>

<p style="text-align:justify;">Пример ниже отобразит все файлы, прикрепленые к посту на форуме. Код следует разместить в шаблоне «<strong>forums.posts.tpl</strong>» в блоке <strong>FORUMS_POSTS_ROW</strong>:</p>

<pre class="brush:xml;">
{FORUMS_POSTS_ROW_ID|cot_filesDisplay('forums', $this)}</pre>

<p> </p>

<p><strong>cot_filesCount</strong></p>

<pre class="brush:xml;">
/**
 * Returns number of attachments for a specific item.
 * @param string $source Target module/plugin code
 * @param int $sourceId Target item id
 * @param string $sourceField Target item field
 * @param string $type Attachment type filter: 'files', 'images'. By default includes all attachments.
 * @return int Number of attachments
 */
function cot_filesCount($source, $sourceId, $sourceField = '', $type = 'all')</pre>

<p style="text-align:justify;">Возвращает количество файлов, присоединенных к объекту. Параметры аналогичны cot_filesDisplay(), за исключением того, что параметр <strong>$field</strong> может принимать значение '_all_'. В этом случае фукнция вернет общее количество файлов, прикрепленных к объекту (ко всем «полям»)</p>

<p>Например, выводим список файлов, прикрепленных к посту на форуме только если хотя бы один файл был прикреплен:</p>

<pre class="brush:xml;">
&lt;!-- IF {FORUMS_POSTS_ROW_ID|cot_filesCount('forums', $this)} &gt; 0 --&gt;
&lt;div class="block"&gt;
    {FORUMS_POSTS_ROW_ID|cot_filesGallery('forums', $this)}
&lt;/div&gt;
&lt;!-- ENDIF --&gt;</pre>

<p> </p>

<p><strong>cot_filesGallery</strong></p>

<pre class="brush:php;">
/**
 * Renders images only as a gallery.
 * @param string $source Target module/plugin code
 * @param int|int[] $item Target item id
 * @param string $field
 * @param string $tpl Template code
 * @param int $limit
 * @param string $order
 * @return string Rendered output
 */
function cot_filesGallery(string $source, $item, string $field = '', string $tpl = 'files.gallery', $limit = 0, string $order = ''): string</pre>

<p style="text-align:justify;">Функция обертка для <strong>cot_filesDisplay()</strong> с параметром <strong>$type</strong> установленном в 'images' и c кодом шаблона по умолчанию '<strong>files.gallery</strong>'.</p>

<p> </p>

<p><strong>cot_filesDownloads</strong></p>

<pre class="brush:php;">
/**
 * Renders files only as downloads block.
 * @param string $source Target module/plugin code
 * @param int|int[] $item Target item id
 * @param string $field
 * @param string $tpl Template code
 * @param int $limit
 * @param string $order
 * @return string Rendered output
 */
function cot_filesDownloads(string $source, $item, string $field = '', string $tpl = 'files.downloads', $limit = 0, string $order = ''): string</pre>

<p style="text-align:justify;">Функция обертка для <strong>cot_filesDisplay()</strong> с параметром <strong>$type</strong> установленном в 'files' и c кодом шаблона по умолчанию '<strong>files.downloads</strong>'.</p>

<p>Обычно используется для организации блоков файлов для скачивания.</p>

<p> </p>

<p><strong>cot_filesThumbnailUrl</strong></p>

<pre class="brush:php;">
/**
 * Returns file's thumbnail url. Generates the thumbnail first if it does not exist.
 * Can be used in template files as callback
 * @param File|int $id File ID or instance of File.
 * @param int|string $width Thumbnail width absolute in pixels (int) or percent (string: '10%')
 * @param int|string $height Thumbnail height absolute in pixels (int) or percent (string: '10%')
 * @param string $frame Framing mode: one of \image\Image::THUMBNAIL_XXX constants (for backwards compatibility 'auto' and 'crop' also supported)
 * @param bool $watermark - set watermark if Cot::$cfg['files']['thumb_watermark'] not empty?
 * @param bool $lastMod Include last file modification time as GET parameter
 * @return string Thumbnail path on success or null on error
 *
 * @see ThumbnailService::thumbnail()
 */
function cot_filesThumbnailUrl($id, $width = 0, $height = 0, string $frame = '', $watermark = true, $lastMod = null): string</pre>

<p>Генерирует миниатюру для изображения и возвращает ее URL.</p>

<p>Принимаемые параметры:</p>

<ul>
	<li style="text-align:justify;"><strong>$id</strong> - id файла или экземпляр класса<code>\cot\modules\files\models\File</code></li>
	<li style="text-align:justify;"><strong>$width</strong> - ширина миниатюры</li>
	<li style="text-align:justify;"><strong>$height</strong> - высота миниатюры</li>
	<li style="text-align:justify;"><strong>$frame</strong> - режим кадрирования. Может принимать следующие значения<br />
	- '<strong>width</strong>' заполняет миниатюру по ширине и сохраняет соотношение сторон.<br />
	- '<strong>height</strong>' заполняет миниатюру по высоте и сохраняет соотношение сторон.<br />
	- '<strong>inset</strong>' (по-умолчанию) сохраняет соотношение сторон уменьшая изображение таком образом, чтобы его размеры не превысили заданых.<br />
	- '<strong>outbound</strong>' уменьшает изображение сохраняя соотношение сторон и обрезает изображение так, чтобы оно полностью заполнило указаные размеры. <em>На примере галереи выше использован именно этот режим</em>.</li>
</ul>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><strong>cot_filesGet</strong></p>

<pre class="brush:php;">
/**
 * Fetches a single attachment object for a given item.
 * @param string $source Target module/plugin code.
 * @param int $sourceId Target item id.
 * @param string $sourceField Target item field
 * @param string $column Empty string to return full row, one of the following to return a single value: 'id',
 *                              'user_id', 'path', 'file_name', 'original_name', 'ext', 'is_img', 'size', 'title', 'downloads_count'
 * @param string $number Attachment number within item, or one of these values: 'first', 'rand' or 'last'. Defines which image is selected.
 * @return File|int|string|null Scalar column value, File object or NULL if no attachments found.
 */
function cot_filesGet($source, $sourceId, $sourceField = '', $column = '', $number = 'first')</pre>

<p style="text-align:justify;">Служит для получения информации об одном файле, прикрепленном к объекту. Очень часто эта функция используется для вывода обложки страницы на списках страниц.</p>

<p style="text-align:justify;">Параметры:</p>

<ul>
	<li style="text-align:justify;"><strong>$source</strong> - определяет тип содержимого к которому прикреплены изображения. Аналогично соотвествующему параметру <strong>cot_filesDisplay().</strong></li>
	<li style="text-align:justify;"><strong>$item</strong> - ID объекта.</li>
	<li style="text-align:justify;"><strong>$field</strong> - аналогично соотвествующему параметру <strong>cot_filesDisplay()</strong>.</li>
	<li style="text-align:justify;"><strong>$column</strong> - если не передано, то возвращает экземпляр класса <code>\cot\modules\files\models\File</code>, иначе вернет значение указанного поля этого объекта.</li>
	<li style="text-align:justify;"><strong>$number</strong> - Порядковый номер вложения или '<strong>first</strong>' для вывода первого файла, '<strong>rand</strong>' - для случайного или '<strong>last</strong>' для последнего.</li>
</ul>

<p style="text-align:justify;">Пример вывода обложки страницы в шаблоне page.list.tpl:</p>

<pre class="brush:xml;">
&lt;!-- IF {LIST_ROW_ID|cot_filesCount('page', $this, '', 'images')} &gt; 0 --&gt;
&lt;div class="pull-left"&gt;
    &lt;a href="https://lily-software.com/{LIST_ROW_URL}" title="{LIST_ROW_SHORTTITLE}" class="thumbnail marginright10 no-ico"&gt;&lt;img alt="{LIST_ROW_SHORTTITLE}" src="https://lily-software.com/{LIST_ROW_ID|cot_filesGet('page', $this)|cot_filesThumbnailUrl($this, 195, 130, 'outbound')}" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;!-- ENDIF --&gt;</pre>

<p style="text-align:justify;">Как видите, результат работы этой функции можно передать в <code>cot_filesThumbnailUrl()</code>.</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><em><strong>4.5.2 BB-коды для вставки в контент</strong></em></p>

<p style="text-align:justify;">Изображения и их миниатюры и даже пупбличные папки из файлового хранилища могут быть вставлены прямо в текст страницы, комментария, поста на форуме и т.п.</p>

<p>Для этого необходимо знать id файла (или папки). Синтаксис параметров bb-кода схож со строкуой URL запроса. Доступные bb-коды:</p>

<p>[files_thumb] - вставляет только миниатюру в тег &lt;img/&gt;.<br />
[files_image] - вставляет a кликабельную миниатюру с ссылкой на большое изображение.<br />
[pfs_gallery] - вставляет галерею, генереруемую из публичной папки файлового хранилища.</p>

<p>Пример использования:</p>

<pre class="brush:xml;">
[ files_thumb?id=15]
[ files_image?id=11&amp;width=320&amp;height=240&amp;alt=Picture description&amp;class=foo]
[ pfs_gallery?f=5&amp;tpl=files.bootstrap-carousel_gallery]</pre>

<p style="text-align:justify;">Эти bb-коды работают независимо от парсера, включая HTML и Markdown. Если Вы хотите их отключить, просто приостановите выполнение части «parser» этого модуля в панели управления «Управление сайтом / Расширения / Files».</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><strong>История версий</strong></p>

<p style="text-align:justify;"><strong>v. 2.0.1</strong></p>

<ul>
	<li style="text-align:justify;">Cовместимость с Cotonti 0.9.25</li>
</ul>

<p style="text-align:justify;"><strong>v. 2.0.0</strong></p>

<ul>
	<li style="text-align:justify;">Использование <a href="https://lily-software.com/free-scripts/cotonti-lib/image-bundle">Image bundle</a> из библиотеки <a href="https://lily-software.com/free-scripts/cotonti-lib">Cotonti Lib</a> для обработки изображений.</li>
	<li style="text-align:justify;">Использование <a href="https://lily-software.com/free-scripts/cotonti-lib/file-system">File System</a> из библиотеки <a href="https://lily-software.com/free-scripts/cotonti-lib">Cotonti Lib</a> и <a href="https://flysystem.thephpleague.com" target="_blank" rel="nofollow noreferrer noopener">Flysystem</a> для хранения файлов и операций с ними.</li>
	<li style="text-align:justify;">Обфускация имен файлов.</li>
	<li style="text-align:justify;">Уменьшение загружаемых изображений в браузере, если возможно.</li>
	<li style="text-align:justify;">Рефакторинг кода. Функции переименованы по шаблону <code>cot_filesFunctionName()</code>.</li>
</ul>

<p><strong>v. 1.0.8</strong></p>

<ul>
	<li>Добавлена поддержка удаления пользователей, страниц и постов на форуме в корзину. При удалении этих элементов файлы не удаляются и после восстановления элемента из корзины, файлы остаются привязными к этим элементам. При удалении элементов из корзины, связанные файлы тоже удаляются.</li>
</ul>

<p><strong>v 1.0.7</strong></p>

<ul>
	<li>Добавлена поддержка графических форматов: avif, bmp, gd2, gd, tga, tpic, wbmp, webp, xbm</li>
	<li>jQuery File Upload обновлен до версии 10.32.0</li>
	<li>Совместимость с PHP 8.1</li>
	<li>Исправлены некоторые ошибки</li>
</ul>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;">GitHub: <a href="https://lily-software.com/go.php?https://github.com/Alex300/files">https://github.com/Alex300/files</a></p>
]]></description>
			<pubDate>вт, 16 авг 2022 08:17:00 +0300</pubDate>
			<link><![CDATA[https://lily-software.com/free-scripts/cotonti-files]]></link>
		</item>
	</channel>
</rss>