Поля

Введения в поля в Drupal

Поля в Drupal могут быть созданы или назначены сущностями. Сущностями в Drupal являются ноды, термины таксономии, пользователи, комментарии.

Одна сущность может иметь несколько полей.

Все поля имеют машинные имена, обычно начинающиеся с префикса ‘field_’, например field_title, field_parent_catalog, field_tags, field_classification

Поля имеют различные типы, могут быть строками, числами, логическими значениями, датами и ссылками на другие сущности.

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

ELiS при включении модулей создает необходимые поля и добавляет их к необходимым сущностям. Но также вы можете сами добавлять необходимые поля к собственным типам нод или иным сущностям.

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

Перед изменением любых полей полезно сделать резервную копию, в то же время добавление новых полей считается безопасным.

field_config

Поле field_config включает в себя конфигурацию в формате JSON.

Конфигурация должна быть валидным JSON (должны использоваться двойные кавычки), в случае синтаксической ошибки конфигурация может быть проигнорирована.

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

Поле содержит машиночитаемую конфигурацию для ELiS, описанную ниже. Редактировать поле могут только пользователи с правами на редактирование поля (роль пользователя имеет право “Edit field config” в настройках модуля ELiS).

Синтаксис поля:

{
"option1": "value1",
"option2": "value2",
"option3": "value3"
}

Пример:

{
"chromeColor":"#51255C",
"textColor":"#FFFFFF",
"headerUrl":"https://elis.example.com/epub/12345/fs/index.html",
"headerHeight":"144px",
"isHeaderOverflow":false,
"isHeaderVisible":true,
"logoPrimaryUrl":"https://elis.example.com/logo-right-144h.png",
"logoPrimaryHref":"https://elis.example.com",
"logoSecondaryUrl":"https://elis.example.com/logo-left-144h.png",
"logoSecondaryHref":"https://example.com",
"pageBackgroundUrl":["https://example.com/sites/default/files/background.jpg","https://example.com/sites/default/files/background2.jpg"],
"sidebarPrimaryChromeColor":"#51255C",
"sidebarPrimaryTextColor":"#FFFFFF",
"sidebarPrimaryVisibility":"visible",
"sidebarSecondaryChromeColor":"#323232",
"sidebarSecondaryTextColor":"#FFFFFF",
"sidebarSecondaryVisibility":"invisible",
"catalogChromeColor":"#BBBBBB",
"catalogTextColor":"#323232",
"sort": ["manual_top","subj_top", "rating", "childrens", "title"],
"catalogTheme":"auto",
"coverFit":"contain"
}

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

У field_config есть значения по умолчанию. Пользовательское значение любой опции field_config переопределяет значение по умолчанию.

Если field_config для текущей ноды найти через наследование не удалось, field_config будет взят из настроек сайта (admin/config/content/elis). Если field_config у сайта не существует и не удалось унаследоваться, будут использоваться значения по умолчанию.

Темизация

Возможные параметры field_config:

chromeColor - основной цвет сайта в шестнадцатеричном виде #FFFFFF. По умолчанию берется из настроек темы сайта.

textColor - цвет текста в шестнадцатеричном виде #FFFFFF. По умолчанию берется из настроек темы сайта.

headerUrl - URL-ссылка на веб-контент, рисунок или видео, которые будут заниматься всю шапку и иметь высоту 144 пикселя с адаптивной шириной. При использовании изображений или веб-контента следует обеспечить работоспособность при низких разрешениях при помощи медиа-запросов. Если в веб-содержимом есть гиперссылки, они должны иметь атрибут target=”_blank” для открытия всех ссылок в новом окне браузера.

isHeaderOverflow - может ли контент перекрывать шапку сайта. Булевое значение (true или false без кавычек). По умолчанию - true. Устаревшее, в теме ELiS больше не используется.

isHeaderVisible - не выводит шапку сайта для некоторых тем. Булевое значение (true или false без кавычек). По умолчанию - true.

headerHeight - задает высоту шапки сайта, если она выводится. Строка в виде CSS-значения с указанием единицы измерения. По умолчанию - “144px”.

logoPrimaryUrl - URL-ссылка на изображение логотипа, размещенного в шапке слева. Изображение должно иметь высоту 144 пикселя и может иметь произвольную ширину. Формат изображения - png, jpg, svg. По умолчанию не задано.

logoPrimaryHref - Ссылка, на которую при клике по левому логотипу перейдет пользователь. По умолчанию - не задано.

logoSecondaryUrl - URL-ссылка на изображение логотипа, размещенного в шапке справа. Изображение должно иметь высоту 144 пикселя и может иметь произвольную ширину. Формат изображения - png, jpg, svg. По умолчанию не задано.

logoSecondaryHref - Ссылка, на которую при клике по правому логотипу перейдет пользователь. По умолчанию - не задано.

pageBackgroundUrl - Ссылка фонового изображения или массив ссылок фоновых изображений со случайным отображением одного из массива. По умолчанию - не задано (null).

sidebarPrimaryChromeColor - Цвет фона левой боковой панели в шестнадцатеричном виде #FFFFFF. Если на задано, может быть взято из chromeColor. По умолчанию - не задано.

sidebarPrimaryTextColor - Цвет текста левой боковой панели в шестнадцатеричном виде #FFFFFF. Если не задано, может быть взято из textColor. По умолчанию - не задано.

sidebarPrimaryVisibility - Отображается или нет левая боковая панель. Может принимать значения “visible” и “invisible”. Незаданное значение эквивалентно “visible”. По умолчанию - не задано. Применимо только для темы ‘elis’. “visible” - отображает боковую панель, “hidden” - скрывает с возможностью ручного отображения, “invisible” - скрывает без возможности ручного отображения.

sidebarSecondaryChromeColor - Цвет фона правой боковой панели в шестнадцатеричном виде #FFFFFF. Если на задано, может быть взято из chromeColor. По умолчанию - не задано.

sidebarSecondaryTextColor - Цвет текста правой боковой панели в шестнадцатеричном виде #FFFFFF. Если не задано, может быть взято из textColor. По умолчанию - не задано.

sidebarSecondaryVisibility - Отображается или нет правая боковая панель. Может принимать значения “visible”, “invisible”, “hidden”. Незаданное значение эквивалентно “visible”. По умолчанию - не задано. Применимо только для темы ‘elis’. “visible” - отображает боковую панель, “hidden” - скрывает с возможностью ручного отображения, “invisible” - скрывает без возможности ручного отображения.

catalogChromeColor - Цвет фона каталога в теме “auto” в шестнадцатеричном виде #FFFFFF. Если на задано, будет взято из chromeColor текущего каталога. По умолчанию - не задано.

catalogTextColor - Цвет фона каталога в теме “auto” в шестнадцатеричном виде #FFFFFF. Если на задано, будет взято из textColor текущего каталога. По умолчанию - не задано.

catalogTheme - Тема для папок в каталоге. Может принимать одно из значений “auto”, “minimal”, “tile”, “catalogTile”, “column” гдe “auto” - автоматический выбор темы, “minimal” - минималистичная тема, “tile” - плиточный интерфейс, “catalogTile” - содержимое подпапок в виде плитки, “column” - одноколоночный с крупными обложками.

coverFit - Как будет вписано изображение обложки в каталоге. Может принимать одно из значений: ‘fill’, ‘contain’, ‘cover’, ‘scale-down’. Что означают значения можно посмотреть: https://developer.mozilla.org/ru/docs/Web/CSS/object-fit

Сортировка

sort - Массив строковых обозначений правил сортировки. По умолчанию: [“rating_desc”, “childrens”, “title_asc”]

Синтаксис:

{
"sort": ["sort_name_1", "sort_name_2", "sort_name_3", "sort_name_4", ...]
}

Пример:

{
"sort": ["manual_top", "subj_top", "rating_desc", "childrens", "title_asc"]
}

Допустимые правила сортировки, которые можно указать в массиве “sort”:

manual - сортировка в ручном режиме указанием порядка ресурсов в поле field_sort_manual (“ручная сортировка”). Правило при сортировке двух ресурсов срабатывает только если оба ресурса находятся в field_sort_manual. Типы ресурсов, разрешенных для ручной сортировки следует отметить на сайте в настройках поля field_sort_manual admin/structure/types/manage/subj/fields/field_sort_manual (см. https://elibsystem.ru/node/497).

manual_top - то же, что и manual, но при сравнении ресурсов если один указан в правилах сортировки, а второй нет, указанный в правилах поднимается вверх (т.е. все отсортированные ресурсы поднимаются вверх).

subj_top - все папки поднимаются вверх, не папки не трогаются. Т.к. папок обычно много, а на не папки сортировка не действует, после subj_top надо разместить еще правила сортировки.

rating или rating_desc - сортировка по рейтингу по убыванию (вначале с большим рейтингом).

rating_asc - сортировка по рейтингу по возрастанию (вначале с малым рейтингом).

childrens или childrens_desc - сортировка по числу вложенных (в папку) ресурсов по убыванию (вначале папки с большим числом вложенных ресурсов). Т.к. эта сортировка действует только на папки, после должно быть еще одно правило сортировки.

childrens_asc - сортировка по числу вложенных (в папку) ресурсов по возрастанию (вначале папки с малым числом вложенных ресурсов). Т.к. эта сортировка действует только на папки, после должно быть еще одно правило сортировки.

title или title_asc - сортировка по заглавию по возрастанию (a-z).

title_desc - сортировка по заглавию по убыванию (z-a).

serial или serial_desc - сортировка серии по году издания, тому, выпуску, дате издания (валидной) по убыванию (вначале новые).

serial_asc - сортировка серии по году издания, тому, выпуску, дате издания (валидной) по возсрастанию (вначале старые).

random - случайная сортировка.

Обратите внимание: при сортировке сравниваются два любых элемента и если при сравнении правило не может явно отдать предпочтение одному из сравниваемых элементов (например под правило сортировки ‘subj_top’ попали не папки, то будет применяться следующее правило из массива sort, если и оно не выберет какой элемент надо отсортировать в начало списка, будет применено следующее правило сортировки и т.д. по рекурсии, пока есть хоть одно правило.

Т.о. если вы хотите поднять папки, упорядочить папки по заглавию и отдельно ресурсы по заглавию, то правильно применять такой массив правил сортировки: [“subj_top”, “title”]. По нему вначале все будет разделено на папки и не папки (два списка) и список папок будет перед списком остальных ресурсов. Затем папки будут упорядочены по заглавию и остальные ресурсы упорядочены по заглавию.

Еще пример массива правил сортировок: [“subj_top”,”childrens”,”title”]. Здесь все папки окажутся выше остальных ресурсов (“subj_top”), дальше сортировка “childrens” отсортирует папки так, что в каких число вложенных ресурсов больше, те будут в списке раньше, затем у тех папок, у которых число вложенных ресурсов одинаково будут упорядочены по заглавию, а все не папки также упорядочены по заглавию.

Пример единственной сортировки по заглавию: [“title”].

При составлении правил сортировки учитывайте, что при сбросе кеша число вложенных ресурсов и рейтинг может быть не посчитан до следующего запуска перерасчета по CRON, поэтому всегда после сортировок “rating”, “rating_asc”, “childrens”, “childrens_asc” следует разместить правило, которое будет срабатывать всегда, например “title”.