回答:
あなたがこれを行うことができます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
他のすべてのメタ属性を除外し、要素のみをループするために、数値が数値かどうかを確認します。
次に、最後に、各要素でフィールドコレクションのフィールドを変更します。
これはあなたを助けます。
/**
* 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';
}
}
field_display_labelモジュールは、独立した表示ラベルを追加することでこれを解決します。
これにより、元のフィールドラベルは作成/編集フォームにのみ表示され、表示ラベル(設定されている場合)はビューページにのみ表示されます。したがって、元のフィールドラベルをなしに設定すると、作成/編集フォームでのみラベルを削除できます。