Drupal → Расширить сторонний форматтер своим функционалом
Пример добавления для форматтера 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.
Пример расширения стороннего виджета.
Оставить комментарий