7

I Want to force a certain text format in a user profile text format field and hide the text format selector dropdown. How do i do it? This is for Drupal 8.

3 Answers 3

11

Install the module Allowed Formats and configure the field to allow only one text format. Then the text format selector dropdown will no longer be displayed.

5
  • 1
    I was hoping to be able to do this without having to install a third-party module, but i'll try it, unless someone comes up with a different solution. Jun 22, 2017 at 10:11
  • There is no other solution.
    – user21641
    Jun 22, 2017 at 10:28
  • Well, that is unfortunate. i'll accept this one. Jun 22, 2017 at 10:32
  • I too prefer the D7 way but the D8 makes more sense from security POV.
    – user21641
    Jun 22, 2017 at 10:51
  • 1
    There is an issue in progress on D8 - drupal.org/project/drupal/issues/784672 Jan 18, 2019 at 8:15
10

Adapted from the Allowed Formats code:

use Drupal\Core\Form\FormStateInterface;

/**
 * Implements hook_field_widget_form_alter().
 */
function mymodule_field_widget_form_alter(&$element, FormStateInterface $form_state, $context) {
  // Maps field names to an array containing a single format.
  $map = [
    'field_myfield' => ['myformat'],
  ];

  $field_name = $context['items']->getFieldDefinition()->getName();

  if (array_key_exists($field_name, $map)) {
    $element['#allowed_formats'] = $map[$field_name];
    $element['#after_build'][] = '_remove_text_format_box';
  }
}

/**
 * #after_build callback.
 */
function _remove_text_format_box($form_element, FormStateInterface $form_state) {
  // Remove help, guidelines and wrapper.
  unset($form_element['format']['help']);
  unset($form_element['format']['guidelines']);
  unset($form_element['format']['#type']);
  unset($form_element['format']['#theme_wrappers']);

  return $form_element;
}
0
1

If you use the #allowed_formats value and limit it to just 1 value; then the selector will disappear. This is code to add your own custom field; but I assume you can do a form alter to set these for an existing (UI placed) field.

$form['message_text'] = [
  '#type' => 'text_format',
  '#format' => 'simple',
  '#allowed_formats' => ['simple'],
  '#title' => $this->t('Message Text:'),
  '#description' => $this->t('Some help text here.'),
];

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.