web-dev-qa-db-ja.com

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

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

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

7
pown

これを行うには、カスタムモジュールまたはテーマのtemplate.phpファイルで hook_form_alter() または hook_form_FORM_ID_alter() を使用します。

_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を確認する必要はありません。

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

Field Collection の場合、少し複雑になる可能性があります。以下はサンプルコードです:

_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_が数値であるかどうかを確認して、他のすべてのメタ属性を除外し、要素を介してのみループします。

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

20
Елин Й.

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

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

1
giorgio79

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

/**
 * 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

ノード編集フォームを操作しようとする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';
}

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

0
byronveale