Falcon Space. Работа с ресурсами

Управление ресурсами


Ресурс - это фото или документ, прикрепленный к некой сущности (по entityCode и itemID).
Компонент дает возможность вывести галерею ресурсов (фото или документы), возможность редактировать их и возможность загрузить новые ресурсы. 
Ресурсы крепятся к некоторым сущностям (entityCode). 

Вывод и функции зависят от 2 режимов: 
isSingle  - определяет будет ли привязываться 1 ресурс для данной сущности (например аватар человека) или целая коллекция ресурсов.
read/write - может ли пользователь управлять коллекцией ресурсов (загружать, редактировать, удалять) или нет.


Как работать с ресурсами

1.Добавляем на страницу сниппет компонента:

<div class="as-resourceManager" data-code="{typeCode}" data-itemid="falcon-space--rabota-s-resursami"></div>

2.Создаем и настраиваем тип ресурса:

   Код - код типа ресурса (используется в сниппете)

   Код объекта - код некоего объекта в системе (не привязан жестко к какой то таблице).
   Не путайте код сущности (Товар) и код Типа ресурса (настройка как будет работать компонент).
   К одной сущности может быть в итоге привязано несколько типов ресурсов. 

   Роли на чтение - кто может просматривать картинки

   Роли за загрузку и редактирование - Кто может загружать и редактировать записи. 

   Галка Одиночная картинка - если Да, то работаем только с 1 ресурсом для сущности.

   Галка Показывать настройки загрузки - отображать при Upload дополнительные опции загрузки (для картинок).

   Возможность загрузки - если Да, то можно будет загружать файлы (для ролей на загрузку)

   Показать сразу в полный размер - если Да, то в менеджер грузятся сразу полноразмерные картинки а не thumb.

   Загружать без трансформации. Если да - то картинки не меняют размеров при загрузке. 

   Показать галерею - если да, то можно будет просматривать список ресурсов.

   Максимальный размер файла в МБ - насколько большой файл можно загружать. Внимание! Есть системное ограничение на файлы в 12Мб

   Фильтр для файлов - регулярное выражение на фильтрацию файлов (Regex). 

   Высота и ширина картинки - задает прямоугольник, в который должно быть вписано изображение.

   Высота и ширина миниатюры - задает прямоугольник, в который должно быть вписано thumb изображения.

   Отношение для обрезки - соотношение сторон для ручного обрезания фото.

   Картинка по умолчанию - пусть к фото, которое будет показываться когда нет элементов для отображения в менеджере. 

   Водяной знак - URL путь к картинке водяного знака (будет ставить посередине каждого изображения при Upload).
   Внимание! Не влияет при установке на уже ранее загруженные изображения. 

   Качество сохранения картинок - качество сохранения картинки от 10 до 100. 

   Добавлять поля к картинке (и миниатюре) при загрузке - при несовпадении пропорций и размеров картинка будет дополняться белыми полями. 

   Путь сохранения - указываетсянекий путь в /uploads к файлу или папке. Если папка, то в нее будет сохраняться файл со своим именем.
   Если файл - то имя файла будет жестко определено этим параметром. Напр. Если указали /docs, то сохранение файлов будет идти в /uploads/docs/

Дополнительные параметры сниппета ресурсов (as-resourceManager):
  • data-title="Товар 1" - задаем внешнюю подпись у картинки. Если не указано, то используется подпись, связанная с ресурсом (по умолчанию это имя файла). 
    Это поле также используется в заголовке диалогового окна (при показе полноэкранной картинки). 
  • data-hideTitle="1"  - скрываем подпись у картинки (находится под картинкой)
  • data-link="/product/1" - если задана ссылка, то при клике на картинку идет переход по данной ссылке. Если нет ссылки - то показ полной картинки в диалоговом окне. 
  • data-carouselEnabled="1" - если указано 1, то при нажатии на картинку будет показываться слайдер из картинок в диалоговом окне. 
  • data-bigFirst="1" - если 1, то первая картинка в показе будет большой, а все остальные маленькие (например, для использования на странице товара).
  • data-compact="1" - если 1, то галерея картинок (или документов) будет показана в уменьшенном виде.
  • data-ultracompact="1" - если 1, то галерея картинок (или документов) будет показана в очень уменьшенном виде. Обычно используется для вывода в таблицах.
  • data-emptyText="Нет фото" - Если нет элементов, то будет показана эта надпись.
  • data-uploadTitle - задает заголовок окна загрузки файлов

Дополнительные действия после выполнения операции с ресурсами

Вы можете выполнить некоторые действия после загрузки (upload), удаления (delete) или обновления полей ресурса (edit). 
Для этого необходимо реализовать процедуры rs_{entityCode}_{action}_callback (редактировать их можно будет в управлении типами ресурсов). 
action - upload, delete, edit.
на вход принимает: typeCode(тип ресурса), itemID, resourceID (если загрузка нескольких файлов - то первый файл), username.
на выходе: ResultModel(Result, Msg). 

Примечание

  1. Файлы храняться в папке /uploads/rs/{entiyCode}/{itemID}
  2. Не путайте entityCode (код сущности, например product) и typeCode (настройки вывода компонента, например manageProdyctImages)
  3. Если необходимо проверить права доступа дополнительно (на основе itemID), то необходимо создать хранимую процедуру с именем resources_{entityCode}_hasAccess.
    На входе typeCode, username, itemID, right (read or write). На выходе - модель ResultModel (поля Result bit, Msg nvarchar(256)).
  4. Для не картинок используются типовые иконки типов - pdf, excel, word, text и other. 
  5. Вы можете установить по умолчанию картинку для варианта, когда не загружено ресурсов. 
    Для этого прописываем путь к картинке в параметре
    defaultImagePath для ResourceType.
  6. Вы можете обрезать картинки. Установите в пикселях для типов ресурсов Width и Height. Картинка в итоге впишется в этот прямоугольник по размерам и сохранится в jpg. 
  7. Для картинок также сохраняется thumbUrl. Его размеры управляются через тип ресурса - thumbWidth, thumbHeight.
    Для других типов в роли превью выступает значок типа файла. 
  8. Для получения URL картинки в SQL можно использовать функцию [dbo].[rs_resourceLink] (entityCode, itemID, isThumb)
Пример: 
SELECT [dbo].[rs_resourceLink] ('product', 1014, 0)


Вывод статичных файлов через систему подгружаемых файлов (Robots.txt и др). 

Вы можете настроить получение любого файла по определенному адресу. 
/Controls/Resource/GetFile?code={code} по данному адресу можно запросить некий файл + передать дополнительные параметры. 
Содержимое файла формируется в хранимой процедуре rs_{code}_getFile
Управление хранимыми процедурами реализовано в разделе Типы подгружаемых файлов.

CREATE PROCEDURE [dbo].[rs_example_getFile]
    @urlParameters DictionaryParameter READONLY,
    @username nvarchar(32),
    @lang int = 0
AS
BEGIN
    /*Процедура выдает некий файл исходя из параметров URL
      (содержимое файла может браться из настроек либо формироваться
       прямо в процедуре)*/

    /*Как получать параметры из URL
      DECLARE @s nvarchar(128)
      DECLARE @s value from @urlParameters where [key] = 'itemID'*/

    -- выдаем результат
    SELECT top 1 1 Result,
                 '' Msg,
                 value Text, -- тело файла
                 'text/css' MimeType -- Mime Тип
    FROM as_settings
    WHERE code = 'globalCss'
END
 

В системе реализованы по умолчанию управление следующими файлами: 

  • Robots.txt - /Controls/Resource/GetFile?code=robots
  • глобальный файл JS - /Controls/Resource/GetFile?code=globalJS 
  • глобальный файл CSS - /Controls/Resource/GetFile?code=globalCSS
  • дефолтовая картинка товара в каталоге  - /Controls/Resource/GetFile?code=defaultProductImage.

По необходимости вы можете настроить редиректы в URL Rewrite на IIS для более легких путей к файлам. 

Работа с графическими файлами

Для работы с графическими файлами указываем их в кодировке Base64 (Используйте сервис https://www.base64-image.de/ для трансформации картинок в строку). 
Типы файлов image/png, image/jpeg, image/gif


ВАЖНО. Файлы кешируются. Поэтому для получения свежей версии файла чуть меняйте ссылку, напр /Controls/Resource/GetFile?code=defaultProductImage&prefix=1
В дальнейшем вы можете указывать эту ссылку на файл.
Вид процедуры. Также вы можете указать вместо данных в Text ссылку на файл на сервере по необходимости, например, ‘/uploads/user…’. 
ALTER PROCEDURE [dbo].[rs_defaultProductImage_getFile]
    @urlParameters DictionaryParameter READONLY,
    @username nvarchar(32),
    @langID int = 0
AS
BEGIN
    SELECT top 1 1 Result,
                 '' Msg,
                 'data:image/png;base64,GB4bh8GDtOT7Ow2uh3P6xsGoH7mJ-
                  mR3i_0pwyO_qA2gNfCqgoTRiEQQmoiVS_0vgo-
                  tuWpP5Zhk8f1a5qlQuVCznYYJy3YvsrPA
                  hi9g2OTPeOJ2MMbNydw4Oxo9Illjjcvf' text,
                 'image/png' MimeType
END

Если вам нужно фото пользователя: /Controls/Resource/GetFile?code=userPhoto&user=demo1
Если превью фото пользователя: /Controls/Resource/GetFile?code=userPhoto&user=demo1&thumb=1

Файловый менеджер

В системе есть файловый менеджер (/fileManager), который позволяет осуществлять навигацию по папкам, загружать файлы, редактировать текстовые файлы. 

Также можно создавать отдельные файловые менеджеры с началом в определенной папке, с указанием какие роли могут просматривать файлы, загружать, редактировать. 
Для этого необходимо использовать сниппет:
<div class="as-fm" data-code="{code}"></div>
Настройки файлового менеджера хранятся в таблице as_fileManagers. 

HowTo по ресурсам и картинкам 

Не отображается картинка юзера справа вверху
Проверьте, что у вас установлены 2 процедуры: 

  • rs_userPhoto_getFile
  • rs_defaultUserPhoto_getFile
Как изменить текст когда нет загруженных картинок?
Для этого укажите атрибут data-emptyText у сниппета менеджера ресурсов. 
<div class="as-resourceManager" data-text="Нет фото"></div>