フォームの入力要素のラベルを変更/非表示にする方法(作成/編集)?


7

tplの任意のフィールドのラベルにテーマを設定できます。または、表示の管理オプションを変更するだけで、フォームで同じようにするにはどうすればよいですか(コンテンツの作成または編集中)?

特にコンテンツが作成または編集されたときに、フィールドコレクションフィールドでラベルを変更/非表示にする適切な方法を探しています。

回答:


20

あなたがこれを行うことができますhook_form_alter()か、hook_form_FORM_ID_alter()あなたのテーマのtemplate.phpファイルでも、カスタムモジュールや。

function YOURMODULE_form_alter(&$form, &$form_state, $form_id) {
  // Check the form_id
  if ($form_id == 'YOUR_FORM_ID') {
    // To hide the label
    $form['your_form_element']['#title_display'] = 'invisible';
    // To alter the label
    $form['your_form_element']['#title'] = t('Your new title');
  }
}

hook_form_FORM_ID_alter()代わりに使用する場合は、form_idを確認する必要はありません。

あなたはの詳細な情報を見つけることができますフォームAPIリファレンスため#title#title_display属性、および他のすべてのフォーム要素とその属性。

フィールドコレクションの場合、少し複雑になる可能性があります。以下はコード例です。

function YOURMODULE_form_YOUR_FORM_ID_alter(&$form, &$form_state, $form_id) {
  $your_field_collection = element_children($form['your_field_collection'][LANGUAGE_NONE];
  foreach ($your_field_collection as $key => $value) {
    if (is_numeric($value)) {
      $form['your_field_collection'][LANGUAGE_NONE][$val]['your_field_collection_field']['#title'] = t('Your new title');
      $form['your_field_collection'][LANGUAGE_NONE][$val]['your_field_collection_field']['#title_display'] = 'invisible';
    }
  }
}

上記のコードの説明:

まず、フィールドコレクション自体を変数に割り当てて、少し読みやすくしました。LANGUAGE_NONE簡単にするために使用しましたが、を使用することをお$form['your_field_collection']['#language']勧めします。確かに、コード全体が読みにくくなります。

次に、foreachフィールドコレクションの複数の値が必要な場合はほとんどの場合フィールドコレクションを使用するため、を使用しました。したがって、foreachループはフィールドコレクションのすべてのインスタンスを処理します。

3番目のハックは、Drupal.orgの誰かから学んだ汚いトリックです。おそらくもっと良いアプローチがあるでしょうが、それは機能するので、詳しくは説明しませんでした。$value他のすべてのメタ属性を除外し、要素のみをループするために、数値が数値かどうかを確認します。

次に、最後に、各要素でフィールドコレクションのフィールドを変更します。


ありがとう。しかし、フィールドコレクションの場合は、これらの属性が付加されていません
pown

確かにありますが、フィールドコレクションは、フィールドコレクションフィールドの構成方法によっては少し複雑です。'Embedded'ウィジェットを使用すると、フォーム配列内のフィールドを見つけることができるはずです。
ЕлинЙ.

埋め込みウィジェットのみですが、それでも何も起こりません。私はフィールドコレクションで何もしようとはしていませんが、フィールドコレクションフィールドではラベルを変更したいのです
pown

1

これはあなたを助けます。

/**
 * Implements hook_field_widget_form_alter().
 */
function YOURMODULE_field_widget_form_alter(&$element, &$form_state, $context) {
  if (isset($element['#entity_type']) && $element['#entity_type'] == 'field_collection_item' && $element['#bundle'] == 'YOUR FIELD COLLECTION') {
    $element['value']['#title_display'] = 'invisible';
  }
}

1

field_display_labelモジュールは、独立した表示ラベルを追加することでこれを解決します。

これにより、元のフィールドラベルは作成/編集フォームにのみ表示され、表示ラベル(設定されている場合)はビューページにのみ表示されます。したがって、元のフィールドラベルをなしに設定すると、作成/編集フォームでのみラベルを削除できます。


0

ノード編集フォームを操作しようとするhook_form_FORM_ID_alter()を使用して、これは私のために働きました:

function MYMODULE_form_NODE_TYPE_node_form_alter(&$form, &$form_state, $form_id) {
  $form['field_MY_FIELD']['und']['#title_display'] = 'invisible';
}

(すべて大文字の値を自分の値に置き換えます。)

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