Скрыть справку и описание текстового формата на форме (элемент textformat)


72

По умолчанию при выводе поля с типом text_format Друпал отображает справочную информацию об ограничения того или иного текстового формата.

Но не всегда данная информация нужна для конечного пользователя. Приведу способ, которым можно скрыть её вывод. Вариант через css

.filter-wrapper{
  display:none
}

мы не рассматриваем всерьез ;-)

Для примера будем "препарировать" форму комментариев.

1. Скроем описание и справку, но оставим возможность выбора альтернативных форматов

/**
 * @param $form
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 * @param $form
 * Implements hook_form_alter()
 */
function MYMODULE_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  //Форма комментария
  if (substr($form['#id'], 0, 12) == 'comment-form') {  
    if (isset($form['comment_body'])) {
      $form['comment_body']['widget'][0]['#after_build'][] = '_MYMODULE_text_format_after';
    }
  }
}

Мы использвали хук hook_form_alter(), отловили нужную форму, нашли нужное поле для изменений. Далее в массив к свойству #after_build добавили свой обработчик. В нем мы сможем перехватить элемент формы перед рендером. Внутри элемента есть несколько контейнеров, в которых и расположены нужные нам данные.

При помощи свойства '#access' можно выборочно отключить вывод.

/**
 * Отключаем вывод информации по фильтрам
 * @param $element
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 */
function _MYMODULE_text_format_after($element, \Drupal\Core\Form\FormStateInterface $form_state) {
  
  $element['format']['help']['#access'] = FALSE;
  $element['format']['guidelines']['#access'] = FALSE;
  //Скроем label у выпадающего списка (для красоты)
  $element['format']['format']['#title_display'] = 'hidden';

  return $element;
}

Результат:

2. Полностью скроем описание и справку форматов. А также запретим изменять текстовый формат

/**
 * @param $form
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 * @param $form
 * Implements hook_form_FORM_ID_alter()
 */
function MYMODULE_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  //Форма комментария
  if (substr($form['#id'], 0, 12) == 'comment-form') {
    if (isset($form['comment_body'])) {
      //Фиксируем нужный нам текстовый формат
      $form['comment_body']['widget'][0]['#allowed_formats'] = ['plain_text'];
      $form['comment_body']['widget'][0]['#format'] = 'plain_text';
      
      //Скрываем заголовок и добавляем заполнитель
      $form['comment_body']['widget'][0]['#title_display'] = 'hidden';
      $form['comment_body']['widget'][0]['#attributes']['placeholder'] = t('Message');

      //Прикрепляем свой обработчик #after_build
      $form['comment_body']['widget'][0]['#after_build'][] = '_MYMODULE_text_format_after';
    }
  }
}

/**
 * @param $element
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 * @return array
 */
function _MYMODULE_text_format_after($element, \Drupal\Core\Form\FormStateInterface $form_state) {
  $element['format']['#access'] = FALSE;
  return $element;
}

Результат можно увидеть на скриншоте ниже:

3. Вариант для drupal 9

Файл
MYMODULE.module
/**
 * @param $form
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 * @param $form
 * Implements hook_form_FORM_ID_alter()
 */
function MYMODULE_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  //Форма комментария
  if (substr($form['#id'], 0, 12) == 'comment-form') {
    if (isset($form['comment_body'])) {
      $form['comment_body']['widget'][0]['#allowed_formats'] = ['plain_text'];
      $form['comment_body']['widget'][0]['#format'] = 'plain_text';
      $form['comment_body']['widget'][0]['#title_display'] = 'hidden';
      $form['comment_body']['widget'][0]['#attributes']['placeholder'] = t('Message');

      $form['comment_body']['widget'][0]['#after_build'][] = '_MYMODULE_text_format_after';      
    }
  } 
}

/**
 * Отключаем вывод информации по фильтрам
 *
 * @param $element
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 */
function _MYMODULE_text_format_after($element, \Drupal\Core\Form\FormStateInterface $form_state) {
  $element['format']['#access'] = FALSE;
  return $element;
}
Добавить комментарий
Может быть интересно

Данный скрипт поможет пересохранить файлы Excel в csv. Может быть полезно перед отправкой прайсов на хостинг для дальнейшей обработки

5

Порядок действий для установки Solr на сервере с Centos 7

4
Модуль Migrate это фреймворк для миграции (импорта) данных в Drupal из любых источников.
1

Несколько способов как в twig объединить несколько строк в одну

3

Иногда необходимо вывести в одном документе не только символы стандартной латиницы и своего национального алфавита. Например, для того, чтобы сослаться на название немецкого, французского или чешского источника, либо привести цитату на греческом языке (кстати, огромное множество символов просто отсутствует на клавиатуре).

1