xandeadx.ru Блог музицирующего веб-девелопера

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.
Пример расширения стороннего виджета.

Написанное актуально для Drupal 8
Похожие записи

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании