Отключить расширитель текстовой области в Drupal? - PullRequest
2 голосов
/ 25 июля 2010

Как и в форме публикации вопросов в SO, Drupal добавляет перетаскиваемый экспандер в конец текстовых областей, созданных через форму API.Как я могу отключить это хорошим способом?

Ответы [ 5 ]

8 голосов
/ 25 июля 2010

Перетаскиваемый расширитель добавляется с помощью поведения, определенного в 'misc / textearea.js'. Из этого вы можете видеть, что это относится к текстовым областям, имеющим класс «изменяемого размера». Вы можете запретить вывод этого класса, если вы установите свойство '#resizable' для определения FAPI textareas на FALSE (по умолчанию это TRUE, если явно не установлено).

Так что для ваших собственных форм вы можете просто объявить текстовые поля соответственно. Для других форм вам нужно настроить их с помощью hook_form_alter().

2 голосов
/ 21 июля 2014

Новый модуль под названием Disable Resizable Textarea был выпущен сейчас.

Это простой модуль, который добавляет возможность переопределять стандартное свойство #resizable полей textarea. По умолчанию все текстовые области могут быть изменены. Этот модуль позволяет отключить эту функцию в каждом поле.

Это очень легко настроить. Просто отредактируйте нужное поле, и вы увидите опцию «Отключить свойство #resizable этого текстового поля». Вы также можете отключить изменение размера из его сводки, если поле имеет тип «Длинный текст со сводкой».

1 голос
/ 15 августа 2013
body textarea {
  resize: none;
}
0 голосов
/ 16 сентября 2015

Есть способы, как удалить изменяемые размеры текстовой области в Drupal (7).

1-й Поместите этот простой фрагмент в вашу тему template.php. Не забудьте переименовать THEMENAME в название вашей темы.

 /**
 * Override of theme('textarea').
 * Deprecate misc/textarea.js in favor of using the 'resize' CSS3 property.
 */

function THEMENAME_textarea($variables) {
  $element = $variables ['element'];
  element_set_attributes($element, array('id', 'name', 'cols', 'rows'));
  _form_set_class($element, array('form-textarea'));

  $wrapper_attributes = array(
    'class' => array('form-textarea-wrapper'),
  );

  $output = '<div' . drupal_attributes($wrapper_attributes) . '>';
  $output .= '<textarea' . drupal_attributes($element ['#attributes']) . '>' . check_plain($element ['#value']) . '</textarea>';
  $output .= '</div>';
  return $output;
}

2nd Другой способ - использовать другой модуль с именем Отключить изменяемый размер текстовой области .

Дополнительная информация и источник .

0 голосов
/ 25 июля 2010

Самое простое, было бы удалить файл /misc/textarea.js.

Сложнее, но, вероятно, лучше, исправить это либо в вашей теме, либо в крошечном модуле.

В вашей теме у вас снова есть два варианта:

  • используйте препроцесс для удаления textarea.js из списка файлов javascript.
  • используйте переопределение темы (yourtheme_textarea), чтобы удалить класс resizable-textarea из визуализированного HTML. Некоторая информация об этом на форумах

Опция в модуле - запустить hook_form_alter(), чтобы получить любую форму и запустить ее через процессор:

/**
 * Implementation of hook_form_alter().
 *
 * Before Drupal 7, there is no way to easily identify form fields that are
 * input format enabled. As a workaround, we assign a form #after_build
 * processing callback that is executed on all forms after they have been
 * completely built, so form elements are in their effective order
 * and position already.
 *
 * @see wysiwyg_process_form()
 */    /**
 * Implementation of hook_form_alter().
 *
 * Before Drupal 7, there is no way to easily identify form fields that are
 * input format enabled. As a workaround, we assign a form #after_build
 * processing callback that is executed on all forms after they have been
 * completely built, so form elements are in their effective order
 * and position already.
 *
 * @see wysiwyg_process_form()
 */
function wysiwyg_form_alter(&$form, &$form_state) {
  $form['#after_build'][] = 'wysiwyg_process_form';
  // Teaser splitter is unconditionally removed and NOT supported.
  if (isset($form['body_field'])) {
    unset($form['body_field']['teaser_js']);
  }
}

function wysiwyg_process_form(&$form) {
  // Iterate over element children; resetting array keys to access last index.
  if ($children = array_values(element_children($form))) {
    foreach ($children as $index => $item) {
      $element = &$form[$item];

      // filter_form() always uses the key 'format'. We need a type-agnostic
      // match to prevent false positives. Also, there must have been at least
      // one element on this level.
      if (($item === 'format' || $item === 'signature_format') && $index > 0) {
        // Make sure we either match a input format selector or input format
        // guidelines (displayed if user has access to one input format only).
        if ((isset($element['#type']) && $element['#type'] == 'fieldset') || isset($element['format']['guidelines'])) {
          // The element before this element is the target form field.
          $field = &$form[$children[$index - 1]];

          $extra_class = '';
          if (!empty($field['#resizable'])) {
            $extra_class = ' wysiwyg-resizable-1';
            drupal_add_js('misc/textarea.js');
          }

          // If we loaded at least one editor, then the 'none' editor will
          // handle resizable textareas instead of core.
          if (isset($loaded) && !empty($field['#resizable'])) {
            $field['#resizable'] = FALSE;
          }
        }
        // If this element is 'format', do not recurse further.
        continue;
      }
      // Recurse into children.
      wysiwyg_process_form($element);
    }
  }
  return $form;
}

Эти примеры взяты из модуля WYSIWYG и немного изменены.

В вашей теме все очень просто, но требуется тема, которую вы можете переопределить. Модуль хуже по производительности и намного сложнее. Тем не менее, он будет работать на любую тему.

...