2

与 SO 上的问题发布表单类似,Drupal 在通过表单 api 创建的文本区域底部添加了一个可拖动的扩展器。我怎样才能以一种很好的方式禁用它?

4

5 回答 5

8

可拖动扩展器通过“misc/textearea.js”中定义的行为添加。从中您可以看到它适用于具有“可调整大小”类的文本区域。如果您将textareas FAPI 定义上的 '#resizable' 属性设置为 FALSE(如果未显式设置,则默认为 TRUE),您可以阻止此类的输出。

因此,对于您自己的表单,您可以相应地声明 textareas。对于其他形式,您需要通过hook_form_alter().

于 2010-07-25T17:07:49.977 回答
2

一个名为Disable Resizable Textarea的新模块现已发布。

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

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

于 2014-07-20T21:39:30.230 回答
1
body textarea {
  resize: none;
}
于 2013-08-15T15:29:17.997 回答
0

最简单的方法是删除文件/misc/textarea.js

更难但可能更好的方法是在您的主题或小模块中解决此问题。

在您的主题中,您又有两个选择:

  • 使用预处理从 javascript 文件列表中删除 textarea.js。
  • 使用主题覆盖 ( )从呈现的 HTMLyourtheme_textarea中删除类。论坛里的resizable-textarea一些信息

模块中的选项是运行 ahook_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;
}

这些示例来自所见即所得模块,并略有改动。

在您的主题中非常简单,但需要一个您可以覆盖的主题。该模块在性能方面更差,而且更复杂。但是,它适用于任何主题。

于 2010-07-25T17:12:33.813 回答
0

在 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;
}

第二种方法是使用另一个名为Disable resizable textarea的模块。

更多信息和来源

于 2015-09-16T11:51:52.417 回答