Как я могу предотвратить изменение размеров текстовых областей?


8

Размер текстовых областей в Drupal 7 по умолчанию изменяется. Я хотел бы отключить это, но когда я проверил текстовую область с помощью Firebug, я не смог найти CSS, который делал его изменяемым.

Как я могу предотвратить изменение размеров текстовых областей?

Ответы:


17

Изменение размеров текстовых областей осуществляется с помощью JS, а не CSS. Я думаю, что самый простой способ отключить это поведение для всех текстовых областей - это реализовать THEMENAME_textarea()в вашей теме и удалить его там:

function THEMENAME_textarea($element) {
  $element['element']['#resizable'] = false ;
  return theme_textarea($element) ;
}

1
То же самое можно сделать с помощью модуля; в этом случае модуль должен реализовать реализацию hook_theme_registry_alter () . Чтобы заметить, что код не может вызвать theme('textarea'), или это вызвало бы бесконечный цикл; это нужно вызвать theme_textarea()или функцию темы, которая была установлена ​​из другого модуля в качестве замены theme_textarea().
kiamlaluno

Спасибо за фрагмент, но я не смог заставить его работать. Я должен просто иметь возможность заменить THEMENAME на имя папки моей темы и поместить код в template.php, верно? Я попробовал это и с Бартиком, но я не смог заставить его работать. Я дважды очистил кеш после обновления файла.
Патрик Кенни

2
Хм это должно работать, попробуйте unset($element['#resizable']);вместо $element['#resizable'] = false;. Если вы посмотрите на код для theme_textarea()этого, безусловно, должно работать
Клайв

3
Я обнаружил, что $elementсодержит массив с именем element, так что это сработало: $element['element']['#resizable'] = false;
Дерек Ахмедзай

Отредактированный ответ согласно комментарию Дерека Ахмедзая.
jamix

4

Если вам нужна только совместимость с CSS3, вы можете использовать следующий CSS:

textarea { resize: none; }

Или, если вам нужно отключить изменение размера определенной текстовой области, добавьте идентификатор этой текстовой области:

.edit-body-und-0-value { resize:none }

1

Отмена этого в теме - это изменение в последнюю минуту, на которое модули не смогут реагировать.

Это так же легко сделать с помощью модуля и #processобратного вызова:

/**
 * Implements hook_element_info_alter()
 */
function custom_element_info_alter(&$types) {
  $types['textarea']['#process'][] = 'custom_process_textarea';
}

/**
 * A custom callback to disable "grippies" on textareas.
 */    
function custom_process_textarea($element) {
  $element['#resizable'] = FALSE;
  return $element;
}

Это дает модулям, таким как Wysiwyg, возможность заметить, что текстовая область не должна иметь гриппи, поэтому она может избежать прикрепления такого поведения при отключении редактора.


1

Реализуйте это в вашей ТЕМЕ. Это заставит , #resizableчтобы FALSEи предотвратить JS и разметку от рендеринга.

/**
 * Implements template_preprocess_textarea().
 */
function THEME_preprocess_textarea(&$variables) {
  // Hide grippie.
  $variables['element']['#resizable'] = FALSE;
}

Принятый ответ близок, но функции theme_ * не должны вызываться напрямую, поскольку они могут непреднамеренно обойти функции процесса / предварительной обработки


1

Вы можете добавить собственный встроенный CSS в форму, чтобы скрыть пометки:

$form['#attached']['css'][] = array(
  'data' => '.resizable-textarea .grippie { display: none; }',
  'type' => 'inline',
);

0

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

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

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


0

Вы можете сделать изменение формы узла или комментария.

Проверьте пример кода и комментарии ниже:

$form['body'][LANGUAGE_NONE][0]['value']['#resizable'] = FALSE;

Для Mozilla и Chrome мы все еще можем увидеть проблему. место CSS взломать.

textarea {
 resize: none;
 }

-1

Недавно я тоже решил эту проблему и обнаружил эти 2 решения:

Первый, который я предпочитаю больше всего: используйте этот код в вашей теме, template.phpи все grippies и textarea.js исчезнут:

/**
 * 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;
}

Не забудьте изменить THEMENAME на имя вашей темы и очистить все кеши.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.