入力領域オプションを非表示にし、テキストエリアの下にテキストを表示する方法は?


32

ノードを追加または編集するときに、入力形式オプションを非表示にし、テキストエリアの下にテキストを表示するにはどうすればよいですか?

スクリーンショット-赤い長方形で選択を非表示にする部分


フォームにアクセスすればできると思いますがhook_form_alter、詳細については
acm

回答:


26

Drupal 7では、Simplifyモジュールを使用できます。ノード形式の他の要素と同様に、テキスト形式オプションtextareaを非表示にすることができます。


3
ソース(cgit.drupalcode.org/simplify/tree/simplify.module?id=7681b0e)を見ると、モジュールはjQueryを使用してテキスト形式オプションを非表示にします。1:テキスト形式のみを非表示にし、モジュール全体を必要としないため、2:javascriptが要件になるため、残念です。Ionut Adrian Luchianの答えが示唆するように、CSSで単に非表示にしないのはなぜですか?それは明確に適切でクリーンです。
B2F

単純化が一貫して機能しませんでした。場合によっては機能しませんでした。
スノーガイ

うまくいかなかった。ブートストラップテーマを使用したことがあるので、おそらくそのためです。
sobi3ch

Simplifyは私にとってもうまくいきませんでした。
АртемИльин

25

これを行うには、カスタムモジュールでhook_form_alterを使用できます。

たとえば、drupal 7の場合:

// hook_form_alter function
function CUSTOM_MODULE_form_alter(&$form, &$form_state, $form_id) {
    // We want this on a specific node type
    if ($form_id == 'NODE_TYPE_node_form') {
        $form['#after_build'][] = 'CUSTOM_MODULE_NODE_TYPE_node_form_after_build';
    }
}

// afterbuild function
function CUSTOM_MODULE_NODE_TYPE_node_form_after_build($form) {
    // We want this on a specific field
    $form['YOUR_FIELD']['und']['0']['format']['#access'] = FALSE;
    return $form;
}

2
この作品が、副作用があります。それはテキストエリアからWYSIWYGエディタを削除
漂流者

それは私のためのトリックをしました。私は主にテキスト入力をクリーンアップしたかっただけです。
-RevNoah

1
「und」の代わりにLANGUAGE_NONEを指定することをお勧めします。また、他の優れたロールが[テキスト形式]ボックスを表示する場合に備えて、after_build関数にロールベースのチェックが必要です。
アニークMukhopadhyay 14

12

drupal 6には、Better Formatsというモジュールがあり、これはまさに望みどおりに機能します。7つの開発バージョンがありますが、開発が進行中であるという警告が付いています。サイトがまだ開発中の場合は、試してみる価値があるかもしれません。


管理者ではないユーザーでもうまく機能しているようです。管理者グループのアクセス許可を削除しても、ユーザー1にはD7のオプションが引き続き表示されます
-joelpittet

より良いフォーマットはD7でうまく機能し、深刻な問題もなく安定しており、2016
1

9

実際にフォーマットフォーム項目を強制終了できます。

function MY_THEME_form_comment_form_alter(&$form, &$form_state, &$form_id) {
  $form['comment_body']['#after_build'][] = 'MY_THEME_configure_comment_form';
}

function MY_THEME_configure_comment_form(&$form) {
  unset($form[LANGUAGE_NONE][0]['format']);
  return $form;
}

+1、最適なソリューション。将来の訪問者のために、CUSTOMをアクティブなテーマの名前に置き換えます。このコードスニペットは、アクティブなテーマのフォルダー内のtemplate.phpスクリプトに含まれている必要があります。また、サイトで多言語が有効になっている場合は、LANGUAGE_NONEを言語コードに置き換えてください。
ジャナカRラジャパクシャ14

2
CUSTOMカスタムテーマ名として使用されます。次のことを行う必要がありNEVERあなたがアクティブな言語使用が必要な場合は、コード言語ハードglobal $language;それをつかむために。
doublejosh 14

注:LANGUAGE_NONEは値を持つ定数ですund...を使用しないでくださいund
-doublejosh

これにより、wysiwygも殺されます
-digitgopher

7

最善の解決策は、テキスト形式選択要素へのアクセスを許可しないことだと思います。完全に設定を解除すると、WYSIWYGエディターが消えてしまうため、望ましくない副作用が発生します。そこで、次のコードを提案します。

function MY_MODULE_form_comment_form_alter(&$form, &$form_state, &$form_id) {
  $form['comment_body']['#after_build'][] = 'MY_MODULE_hide_text_format';
}


function MY_MODULE_hide_text_format(&$form) {
  $form[LANGUAGE_NONE][0]['format']['#access'] = false;
  return $form;
}

特定のフィールドでのみ非表示にする場合、これは優れたソリューションです。そして、WYSIWYGは機能し続けます。
ダリン

6

最も簡単な方法であるCSSを使用します。 ファイアバグ

#body-add-more-wrapper #edit-body-und-0-format {display: none;}

CSSとFirebugの力

がんばろう。


3
「うまく機能している」CSSの非表示はお勧めしません。
saadlulu

ない答えは、逃走
パンクロノ

5
どうして ?質問はそれを非表示にすることであり、削除することではないため、これは素晴らしい答えです。セキュリティの脅威を引き起こしたり、SEOに悪影響を与えることを隠すのとは違います...すでにテキスト形式の構成で権限を定義しているので、問題はどこにあるのでしょうか?
B2F

1
私はそれを隠すことを望みます。あなたに+1票。
アリッサゴノ

cssインジェクターモジュールは驚異的に動作します。参照:prntscr.com/cieuvs
パトシパトシ

5

Drupal 7の場合

function MODULENAME_element_info_alter(&$type) {
  if (isset($type['text_format']['#process'])) {
    foreach ($type['text_format']['#process'] as &$callback) {

      if ($callback === 'filter_process_format') {
        $callback = 'MODULENAME_filter_process_format';
      }
    }
  }
}


function MODULENAME_filter_process_format($element) {
  $element = filter_process_format($element);

  // Change input format to "Filtered HTML" for body fields of NODETYPE_NAME

  if ($element['#bundle'] == 'NODETYPE_NAME' && $element['#field_name'] == 'body') {

    $element['format']['format']['#default_value'] = 'filtered_html';
    $element['format']['format']['#format'] = 'filtered_html';  
    $element['format']['format']['#value']  = 'filtered_html';
    $element['#format'] = 'filtered_html';

  }
  return $element;
}

多く/すべてのフィールドで非表示にする場合、これは優れた手法です。
ダリン

2

入力形式オプションを非表示にするもう1つの簡単な方法は、オプションを非表示にするユーザープロファイルから他のすべての入力形式を削除することです。このためには、admin-> configuration-> input formatに進み、デフォルトで与えたいものを除く他のすべての入力形式からすべてのユーザーロールを削除します。


6
プレーンテキストのみを有効にする場合にのみ機能します。無効にできないからです。
フレッチ

正確に。「フィルターされたテキスト」のみを持つことはできません。申し訳ありませんが、この答えは誤解を招くものです。
nerdoc

2

これは私がしました:

「CKeditorを使用できないようにするための匿名および許可ユーザーの許可」>「ユーザーからの「フィルターされたHTMLテキスト形式を使用」および「テキスト形式とフィルターの管理」のチェックを外しました。

もちろん、「display:none;」でCSSから無効にできます。特定のdivクラス(.filter-wrapper)で、上を指しているすべてのエリアを非表示にしますが、この場合、スーパーユーザーを含むすべてのユーザーに対してエリアが非表示になります。


1

CSS Injectorモジュールをインストールします(現在、Drupal 8の動作する開発バージョンのみがあります)。

次に、CSS Injectorの管理ページ(/ admin / config / development / css-injector)に移動します。このコード(または書式設定領域のテキストのクラスに適用されるコード)を使用して、新しいCSSルールを作成します。

.filter-guidelines {
    display: none;
}

Sevenテーマ(または使用中の管理テーマ)に適用することを選択します。保存してお楽しみください!


2.0は古いため、cssインジェクター1.xをインストールします。:ここではそれがどのように見えるかのプレビューだprntscr.com/cieuvs -このモジュールは、CPN(ノードあたりのコード)のような他のモジュール対CSSの注入のための驚異を働かせる
Patoshiパトシ

0

「プレーンテキスト」入力フォーマットを削除することはできません。また、「プレーンテキスト」入力形式を使用すると、RTEが表示されません。

CSSオプションを使用します。


現在ログインしているユーザーが入力形式のみを使用できる場合、入力形式セレクタは表示されません。その唯一の入力フォーマットは異なるものである可能性があり、セレクターは同じようには見えません。
キアムルノ

0

「ユーザープロファイルから他のすべての入力形式を削除する」とcssの両方の方法を使用します。


0

モジュールを簡素化してみてください。

Simplifyを使用すると、特定のフィールドをユーザーインターフェイスから非表示にできます。これにより、フォームが整理され、コンテンツエディターにユーザーフレンドリーなエクスペリエンスが提供されます。


他のフィールドの動作を単純化しますが、入力フォーマットでは動作させることができませんでした。
Druvision

0

フォーマットを非表示にしたいが利用可能なままにする場合は、「簡易フォーマット」モジュールを試してくださいhttps : //www.drupal.org/project/simplified_formats

フォーマット選択ドロップダウンの横にある小さな疑問符アイコンでフォーマットの詳細を非表示にします。多くのテキスト形式フィルターでは、使用方法を指示する指示を完全に隠すことは実際には役に立ちません。他のフィルターはより自動です。エンドユーザーに表示するものとしないものを選択できるモジュールが必要だと思います。


0

非表示形式モジュールを使用することもできます。

Hide Formatsを使用すると、「テキスト形式」または「入力形式」ドロップダウンを折りたたんでUIをクリーンアップできます。


これは素晴らしいモジュールですが、フォーマットボックスを折りたたんで表示します。
Druvision

0

Drupal 8の場合。これにより、2つのフィールドのフォーマット領域が削除されます。

/**
 * Implements hook_form_FORM_ID_alter().
 */
function CUSTOM_MODULE_form_FORM_ID_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  $form['#after_build'][] = 'CUSTOM_MODULE_eform_application_after_build';
}

function CUSTOM_MODULE_eform_application_after_build ($form) {
  unset($form['field_experience']['widget'][0]['format']);
  unset($form['field_miscellaneous']['widget'][0]['format']);
  return ($form);
}

OPは質問でD7を指定
ジェフ

1
同意した。ただし、この時点ではD8のオンラインはほとんどありません。私は自分で質問をしてから答えることができると思います。試したことはありません。
アンドレアンジェラン

すなわち、この場合にはOPはバージョンに関する非常に具体的であるという理由だけで、より良いアプローチでしょう
ジェフ・

実装方法を教えてください。form_idを見つけるにはどうすればよいですか?
ジョン

0

Drupal 7の場合:

1)hook_theme_registry_alter(&$theme_registry)モジュール内から使用してテーマレジストリを変更します。eq。テーマプロセッサの定義。

2)次に、3つのテーマの機能を変えるtheme_filter_tipstheme_filter_tips_more_infotheme_filter_guidelines、と何も返さないためにそれらを強制します。次のように:

これがターゲット関数です。上記のテーマ機能はすべて、それにリダイレクトされます。

function _mymodule_filter_tips($tips, $long = FALSE, $extra = ''){
  return '';
}

/**
 * Implements hook_theme_registry_alter
 */
function mymodule_theme_registry_alter(&$theme_registry) {
  $theme_registry['filter_tips']['theme path'] = drupal_get_path( 'module', 'mymodule' );
  $theme_registry['filter_tips']['function'] = '_mymodule_filter_tips';
  $theme_registry['filter_guidelines']['theme path'] = drupal_get_path( 'module', 'mymodule' );
  $theme_registry['filter_guidelines']['function'] = '_mymodule_filter_tips';
  $theme_registry['filter_tips_more_info']['theme path'] = drupal_get_path( 'module', 'mymodule' );
  $theme_registry['filter_tips_more_info']['function'] = '_mymodule_filter_tips';
}

キャッシュをクリアすると、Drupalは選択したモジュールのパスでこれらのフィルター定義を検索し(を参照drupal_get_path)、各フィルターに対して何も返しません。したがって、テキスト形式の説明はこれ以上ありません。


0
/ hook_form_alter function
function CUSTOM_MODULE_form_alter(&$form, &$form_state, $form_id) {
    // We want this on a specific node type
    if ($form_id == 'NODE_TYPE_node_form') {
        $form['#after_build'][] = 'CUSTOM_MODULE_NODE_TYPE_node_form_after_build';
    }
}

// afterbuild function
function CUSTOM_MODULE_NODE_TYPE_node_form_after_build($form) {

    // We want to hide input formats and we can do it like following
    $form['body']['und']['0']['format']= '<div style="display:none;">';
    $form['body']['und']['0']['format']= '</div>';   

    return $form;
}

これらの小さな変更で主に私のために働いた。

$form['body'][LANGUAGE_NONE][0]['format']['#prefix']<br>
$form['body'][LANGUAGE_NONE][0]['format']['#suffix']
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.