Tplの任意のフィールドのラベルにテーマを設定できます。または、表示の管理オプションを変更するだけで、フォームで同じようにするにはどうすればよいですか(コンテンツの作成または編集中)。
特にコンテンツが作成または編集されるときにフィールドコレクションフィールドでラベルを変更/非表示にする適切な方法を探しています。
これを行うには、カスタムモジュールまたはテーマの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
_が数値であるかどうかを確認して、他のすべてのメタ属性を除外し、要素を介してのみループします。
次に、最後に、各要素でフィールドコレクションのフィールドを変更します。
field_display_label モジュールは、個別の表示ラベルを追加することでこれを解決します。
これにより、元のフィールドラベルは作成/編集フォームにのみ表示され、表示ラベル(設定されている場合)はビューページにのみ表示されます。したがって、元のフィールドラベルをなしに設定すると、作成/編集フォームでのみラベルを削除できます。
これはあなたを助けます。
/**
* 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';
}
}
ノード編集フォームを操作しようとする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';
}
(すべて大文字の値を自分の値に置き換えます。)