Режимы отображения: режимы просмотра и формы
Режимы отображения
Существуют режимы отображения (доступные в admin/Structure/Display-Mode) для предоставления различных представлений объектов содержимого для просмотра или редактирования. Два типа режимов отображения - «режимы просмотра» и «режимы формы». Оба эти типа режимов отображения - режимы просмотра и режимы форм - являются примерами «объектов конфигурации». Вот пример экспортированного режима просмотра.
uuid: 15dc7aa9-13fd-4412-9c06-06d09f915d08 langcode: en status: false dependencies: module: - node id: node.full label: 'Full content' targetEntityType: node cache: true
ссылка: core.entity_view_mode.node.full.yml
Основное свойство, на которое следует обратить внимание, это свойство targetEntityType. Каждый режим отображения (режим просмотра или режим формы) связан с одним и только одним типом объекта содержимого. По соглашению есть метки, которые используются для нескольких режимов отображения. Например, стандартный профиль Drupal Core использует слово «Full» в метках режимов просмотра для типов сущности контента узла, пользовательских блоков и комментариев.
Режимы просмотра и отображения
- Администрируется в совокупности по адресу: /admin/structure/display-mode/view
- Включено для каждого пакета в разделе «Пользовательские настройки отображения» по таким URL-адресам, как: /admin/structure/types/manage/page/display (где «page» - это пакет сущности узла)
- Настраивается для режима просмотра для каждого пакета по URL-адресам, например: /admin/structure/types/manage/page/display/teaser (где «page» - это пакет сущности узла, а «teaser» - режим просмотра)
Режимы просмотра как концепция, предшествовавшие Drupal 8. Они присутствовали в Drupal 7. В Drupal 6 была концепция «режимов сборки». Существуют режимы просмотра, позволяющие инструментам создания сайтов Drupal, таким как поля Entity Reference, запрашивать определенную сущность определенным образом. Например, предположим, что «song» и «artist» - это каждый тип узла, и эта песня содержит справочное поле для artist. «Полное» отображение узла песни может потребоваться для отображения «тизера» отображения узла исполнителя. В этом примере «тизер» - это режим просмотра, используемый узлом исполнителя, а «полный» - это режим просмотра, используемый песней.
Обычно бывает, что если разработчик сайта хочет отобразить узел узла исполнителя в режиме просмотра тизера, тогда этот конструктор сайта настроит конфигурацию, специфичную для исполнителя и тизера. Это можно сделать, перейдя на вкладку «Управление отображением» на странице конфигурации набора сущностей. Примером этой страницы в стандартном профиле установки Drupal Core является /admin/structure/types/manage/article/display
На этой странице у разработчика сайта есть возможность включить настраиваемые параметры отображения полей для пакета (порядок полей и использование средства форматирования полей) для каждого режима просмотра. Не требуется, чтобы все режимы просмотра имели специальные настройки, сделанные для всех пакетов. В этом примере только режимы просмотра «RSS» и «Тизер» имеют свои собственные настройки. Все остальные режимы просмотра возвращаются к конфигурации «по умолчанию». Ассоциация между набором типов сущностей и режимом просмотра называется представлением представления. @see EntityViewDisplayInterface
Режимы форм и (форма) операций
- Администрируется в совокупности по адресу: /admin/structure/display-mode/form
- Включено для каждого пакета в URL-адресах, таких как: /admin/structure/types/manage/page/form-display (где «page» - это пакет сущности узла)
- Настраивается для режима формы для пакета в URL-адресах, например: /admin/structure/types/manage/page/form-display/simple (где «page» - это пакет сущности узла, а «simple» - режим формы).
Как и режимы просмотра, режимы форм - это способ создания различных конфигураций полей с одним и тем же комплектом сущности контента. Режимы формы допускают несколько наборов упорядочений и настроек виджетов полей, так же как режимы просмотра допускают различные упорядочения и настройки форматеров полей.
В Drupal 7 у нас есть поле и виджет поля на вкладке «Управление полями» любого типа контента. Теперь это разделено на две вкладки: «Управление полями» и «Управление отображением формы». Это дает нам больше гибкости в отношении того, как все будет выглядеть, когда кто-то смотрит на форму добавления / редактирования любых типов контента. Вкладка «Управление отображением» остается той же, что и в Drupal 7. Помимо типов контента, мы также можем управлять режимами просмотра для других типов сущностей, таких как пользователи, таксономия, комментарии и пользовательские блоки.
В дополнение к режимам форм, операции с формами позволяют определить, какие классы следует использовать для таких форм, как форма удаления узла. Класс, используемый для удаления узла, отличается от класса, используемого для редактирования узла. Операции определены в аннотациях объекта.
Вот пример, который отобразит 2 пользовательские операции с формой, а также режим формы «по умолчанию», в одну и ту же форму MyEntityForm. Убедитесь, что эта форма расширяет ContentEntityForm.
/** * @ContentEntityType( * id = "myentity", * handlers = { * "form" = { * "default" = "Drupal\myentity\Form\MyEntityForm", * "add" = "Drupal\myentity\Form\MyEntityForm", * "edit" = "Drupal\myentity\Form\MyEntityForm", * "delete" = "Drupal\myentity\Form\MyEntityDeleteForm", * }, * }, * ) */
Если вам нужно добавить или изменить доступные операции с формами в существующих сущностях, вы можете использовать hook_entity_type_build и hook_entity_type_alter.
В настоящее время должна быть явная настройка операции для используемого режима формы. В отличие от режимов просмотра (которые возвращаются к отображению представления по умолчанию, если отображение представления не существует для данного режима просмотра), режимы формы по умолчанию не будут использовать операцию «по умолчанию». Это можно считать ошибкой. См. # 2511720: Разрешить режимам формы использовать операцию по умолчанию, если операция формы не установлена явно.
Чтобы отобразить форму в режиме пользовательской формы, используйте _entity_form в своем маршруте. Например, чтобы отобразить пользовательскую форму «редактирования» MyEntity, используйте этот маршрут:
entity.myentity.edit_form: path: '/myentity/{myentity}/edit' defaults: _entity_form: myentity.edit _title: 'Edit MyEntity' requirements: _permission: 'edit myentity entities'
Другой пример:
Обычная необходимость состоит в том, чтобы формы регистрации пользователей не отображали все пользовательские поля. Как только пользователь будет зарегистрирован, он получит доступ к форме редактирования профиля, в которой есть дополнительные поля. Это пример такой конфигурации:
- Нажмите Добавить поле из /admin/config/people/account/fields
- На следующем экране выберите тип поля, Список (Текст)
- Дайте ему ярлык: «Список подписки»
- Нажмите «Сохранить и продолжить»
- Заполните список разрешенных значений, например:
1 | Новости
2 | Важные объявления
3 | Предложения, Скидки, Скидки
4 | Партнерские сообщения
- Нажмите Сохранить
- Сделайте это обязательным полем
- Выберите все четыре элемента по умолчанию, нажмите Сохранить.
- Далее нажмите вкладку «Управление отображением формы»
- Внизу списка полей находится раздел с надписью «Пользовательские настройки отображения», разверните его.
- В поле «Использовать пользовательские настройки отображения для следующих режимов формы» включите «Зарегистрироваться» и нажмите «Сохранить».
- Теперь у вас будет вторая вкладка с названием «Регистрация».
- Отключите поле «Список подписок», перетащив его в раздел «Отключено». Нажмите сохранить.
- Перейдите на вкладку «Управление отображением», чтобы убедиться, что поле «Список подписок» включено.
Выйдите из сайта и посетите регистрационную форму. Поле списка подписки не будет видно.
После входа в систему поле Список подписок будет доступно в форме профиля обновления.