Пример добавления для форматтера text_default
функционала обрезки текста:
// MODULENAME.module
/**
* Implements hook_field_formatter_third_party_settings_form().
*/
function MODULENAME_field_formatter_third_party_settings_form(FormatterInterface $plugin, FieldDefinitionInterface $field_definition, $view_mode, array $form, FormStateInterface $form_state) {
$element = [];
if ($plugin->getPluginId() == 'text_default') {
$element['max_length'] = [
'#type' => 'number',
'#title' => t('Max length'),
'#default_value' => $plugin->getThirdPartySetting('MODULENAME', 'max_length'),
];
}
return $element;
}
/**
* Implements hook_entity_display_build_alter().
*/
function MODULENAME_entity_display_build_alter(&$build, $context) {
$display = $context['display']; /** @var EntityViewDisplayInterface $display */
foreach (Element::children($build) as $field_name) {
if ($build[$field_name]['#formatter'] == 'text_default') {
$formatter = $display->getRenderer($field_name); /** @var FormatterInterface $formatter */
if ($max_length = $formatter->getThirdPartySetting('MODULENAME', 'max_length')) {
foreach (Element::children($build[$field_name]) as $delta) {
$build[$field_name][$delta]['#text'] = Unicode::truncate($build[$field_name][$delta]['#text'], $max_length);
}
}
}
}
}
# config/schema/MODULENAME.schema.yml
field.formatter.third_party.MODULENAME:
type: mapping
label: 'MODULENAME module formatter settings'
mapping:
max_length:
type: integer
label: 'Maximum text length'
Не самый оптимальный вариант, лучше создать свой форматтер, если есть возможность.
Подробнее про Third Party Settings.
Пример расширения стороннего виджета.
Написанное актуально для
Drupal 8
Похожие записи
- Создание сравнительной таблицы с значениями из EAV Field
- Добавляем на страницу управления отображением материала поля "Заголовок" и "Дата создания"
- Добавляем на страницу управления отображением комментария поля "автор" и "дата создания"
- Пустой форматтер для Field Group
- Препроцессинг настроек форматтера перед сохранением
Добавить комментарий