如何防止调整文本区域的大小?


8

默认情况下,Drupal 7中的文本区域可调整大小。我想关闭此功能,但是当我使用Firebug检查文本区域时,找不到可调整其大小的CSS。

如何防止调整文本区域的大小?

Answers:


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中,对吗?我也曾与Bartik尝试过此方法,但无法使其正常工作。更新文件后,我刷新了两次缓存。
Patrick Kenny 2012年

2
嗯,应该可以使用,请尝试unset($element['#resizable']);代替$element['#resizable'] = false;。如果你看一下代码,theme_textarea()应该肯定的工作
克莱夫

3
我发现其中$element包含一个名为的数组element,因此可以使用: $element['element']['#resizable'] = false;
Derek Ahmedzai

根据Derek Ahmedzai的评论编辑答案。
jamix

4

如果只需要CSS3兼容性,则可以使用以下CSS:

textarea { resize: none; }

或者,如果您需要在特定文本区域上禁用调整大小,请添加该文本区域的ID:

.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之类的模块有机会注意到textarea不应有抓图,因此可以避免在禁用编辑器时附加该行为。


1

在您的主题中实施。它将强制使用#resizableto 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

现在发布了一个名为“ 禁用可调整大小的文本区域”的新模块。

这是一个简单的模块,具有添加功能以覆盖textarea字段的默认#resizable属性。默认情况下,所有文本区域都是可调整大小的。此模块允许您在每个字段上禁用此功能。

设置非常容易。只需编辑所需的字段,您将看到“禁用此textarea的#resizable属性”选项。如果该字段的类型为“带摘要的长文本”,则还可以从其摘要禁用可调整大小。


0

您可以更改节点或注释的形式。

查看以下示例代码和注释:

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

对于mozilla和chrome,我们仍然可以看到该问题。放置CSS hack。

textarea {
 resize: none;
 }

-1

最近也在解决此问题,并找到了以下两种解决方案:

我最喜欢的第一个是:在您主题的代码中使用此代码template.php,所有抓手和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更改为您的主题名称并刷新所有缓存。

第二种方法是安装模块,禁用可调整大小的文本区域,但是我尝试将安装中的模块数量保持在尽可能低的水平。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.