テキスト領域がサイズ変更できないようにするにはどうすればよいですか?


8

Drupal 7のテキスト領域は、デフォルトでサイズ変更可能です。これをオフにしたいのですが、Firebugでテキスト領域をチェックしたところ、サイズ変更可能なCSSが見つかりませんでした。

テキスト領域のサイズが変更されないようにするにはどうすればよいですか?

回答:


17

CSSではなく、テキスト領域のサイズを変更できるのはJSです。すべてのテキストエリアでこの動作を無効にする最も簡単な方法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でもこれを試しましたが、機能させることができませんでした。ファイルを更新した後、キャッシュを2回フラッシュしました。
Patrick Kenny、

2
うーん、動作するはずunset($element['#resizable']);です$element['#resizable'] = false;。代わりに試してください。そのためのコードを見ると、theme_textarea()確実に機能するはずです
Clive

3
私はそれが見つかった$elementという配列が含まれelement、これは働いていたように、: $element['element']['#resizable'] = false;
デレクAhmedzai

Derek Ahmedzaiのコメントに従って編集された回答。
jamix 2014

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

これをテーマに実装します。これにより、が強制さ#resizableFALSE、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と呼ばれる新しいモジュールがリリースされました。

これは、textareaフィールドのデフォルトの#resizableプロパティをオーバーライドする機能を追加する単純なモジュールです。デフォルトでは、すべてのテキストエリアはサイズ変更可能です。このモジュールでは、各フィールドでこの機能を無効にすることができます。

セットアップはとても簡単です。目的のフィールドを編集するだけで、「このテキストエリアの#resizableプロパティを無効にする」オプションが表示されます。フィールドのタイプが「要約付きの長いテキスト」の場合は、要約からサイズ変更可能を無効にすることもできます。


0

ノードまたはコメントのフォーム変更を行うことができます。

以下のサンプルコードとコメントを確認してください。

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

mozillaとchromeについては、まだ問題が見られます。CSSハックを配置します。

textarea {
 resize: none;
 }

-1

私も最近この問題を解決していて、次の2つの解決策を見つけました。

まず一番好きなもの:テーマの中でこのコードを使用する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をテーマ名に変更し、すべてのキャッシュをフラッシュすることを忘れないでください。

第二の方法は、モジュールをインストールすることで無効にサイズ変更可能なテキストエリアを、私はできるだけ低いとしての私のインストールでモジュールの数を維持しようとします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.