Drupal 8 Пишемо плагін Display Suite поля
У минулій статті я написав як створювати власні DisplaySuite поля в Drupal 7. Після я вирішив подивитися і розібратися як вони працюють у Drupal 8. І в цій статті я вже розповім як створити ті самі поля, але в реаліях Drupal 8.
Що змінилося і як працюють
Змінився підхід. Тепер, як і більшість інших хуків, hook_ds_fields_info() замінено системою плагінів. Це реально зручніше та дозволяє зберігати модуль зрозумілим та чистим. Це, до речі, вирішує проблему надлишку коду у файлі, про який я розповідав у статті для D7.
Display Suite надає два типи плагінів DsField і DsFieldTemplate. Зауважте, що для створення полів використовується тільки DsField . Ви можете подумати, що DsFieldTemplate це заміна DS_FIELD_TYPE_THEME , але це не так. Цей тип плагінів дозволяє оголошувати оброблювачі полів. Якщо ви знайомі з DS, ви бачили, що є можливість вибору Field Template після активації відповідної функції. Після цього з'являвся вибір: Full reset, Expert, Minimal – ось це вони і є, а цей тип плагіна дозволяє додавати їх туди.Усі поля тепер оголошуються через один плагін.
Так як типів полів тепер немає взагалі, все залежить від того, що ви хочете повернути, то я наведу просто різні приклади з демонстрацією різних можливостей.
P.s. далі за кодом мається на увазі, що модуль, в якому пишеться код, називається dummy.
Приклад №1 - набір мінімум
У цьому прикладі показаний набір мінімум. В якому ми оголошуємо поле та виводимо дані в ньому, працюючи з сутністю.
Давайте створимо поле для матеріалу article, яке виводитиме кількість слів у матеріалі.
Інформація про поле вказується як і у всіх в інструкції до класу.Плагін приймає такі дані:
- id : машинне ім'я поля. У нижньому регістрі, латинські літери та знак підкреслення.
- title : Людина зрозуміле ім'я поля, просто лейбл для адмінки.
- entity_type : Назва сутності для якої застосовується поле. Сутність одна!
- provider : Вказуємо, хто надає поле, в даному випадку назва нашого модуля.
- ui_limit : bundleview_mode - вказуємо на яких підтипах сутності та її форматах виведення буде доступне поле. Використовуйте знак * для 'all'. Декілька значень вказуються в наступному форматі: