回答:
Form APIのプロパティを使用して、フォーム要素のラベルタグにクラスを設定することはできません。ただし、要素(ラベル+テキストエリア)をラップするようにプレフィックスとサフィックスを設定し、ネストされたCSSセレクターを使用して、実行しようとしていることを実行できます。
$form['name'] => array(
'#type' => 'textfield',
'#title' => 'Prénom'
'#prefix' => '<div class="myClass">',
'#suffix' => '</div>'
);
CSSでは、次のようにラベルタグを選択できます。
.myClass label {
text-transform: uppercase; /* just for example */
}
まともな解決策ではありませんが、それは私がこれを通常行う方法であり、他の人が行う方法を見てきました。
#attributes
入力要素自体のためのものなので、コードがmyClass
クラスをに追加するのは正しいことtextarea
です。
StackOverflowに関するこの投稿では、DrupalフォームAPIはラベルへのクラスの追加をサポートしていませんが、適切な回避策が含まれています:
代わりに、フィールドとラベルのラッパークラスを使用してターゲットにすることができます。
.form-item-field-foo label { /* CSS here */ }
theme_form_element_label()のAPIドキュメントは、ラベルが不可能である理由を示しています(少なくともすぐに使用できるわけではありません)。attributes配列は、theme関数で初期化され、2つのオプションクラス( 'option'と 'element -invisible ')。
それで、それは完全に不可能ですか?実際、それは可能だと思いますが、私はこれを自分で試したことがないことを付け加えなければなりません。あなたがしようとすることができます:
#label_attributes
を使用して、一部(またはすべて)のフォーム要素に新しいプロパティを追加します。$attributes
配列にの値をマージします$element['#label_attributes']
。これを試してみる場合は、うまくいったかどうかをお知らせください。
'#title'
または設定'#title_display' => 'invisible'
してから実行することです'#suffix' => '<label for="TheElementId" class="option">Display This Text</label>'
。これにより、<div>
Drupalがフォーム入力要素に使用するラッパーの外側に表示されますが、CSSルールによって外観が変わることはありません。
Ayeshの答えを拡張して、そのようなコードの使用例を含めました。marvangendの答えははるかにDrupaleskですが、非常に単純な結果を得るにはかなりの掘り下げです。フォーム固有の要素とCSSを上記のフォームにバンドルすることは一般的なユースケースであり、内部の要素をターゲットにしてアクションを実行できるようにすることは、もう少し具体的です。
http://legomenon.io/article/drupal-7-adding-form-placeholder-attributes
function mymodule_form_alter(&$form, $form_state, $form_id) {
switch ($form_id) {
// Waterfall.
case 'webform_client_form_16':
case 'webform_client_form_51':
case 'webform_client_form_64':
case 'webform_client_form_78':
$exclude = array('select', 'radios', 'checkboxes', 'managed_file');
foreach ($form['submitted'] as $name => $component) {
if (!in_array($component['#type'], $exclude) && $name != '#tree') {
$form['submitted'][$name]['#prefix'] = '<span class= "label-invisible">';
$form['submitted'][$name]['#suffix'] = '</span>';
$form['submitted'][$name]['#attributes']['placeholder'] = $component['#title'];
}
}
$form['#attached']['css'] = array(
drupal_get_path('module', 'mymodule') . '/css/mymodule.form.css',
);
break;
}
}
Drupal 8では、your_module.moduleファイルに追加するだけでそれを実行できます
function your_module_preprocess_form_element(&$variables) {
$element = $variables['element'];
if (isset($element['#label_attributes'])) {
$variables['label']['#attributes'] = array_merge(
$variables['attributes'],
$element['#label_attributes']
);
}
}
フォームの作成時に#label_attributesを追加します。
$form['some_field'] = [
[...]
'#label_attributes' => [
'some_attr' => 'some_value',
]
]
Fences D7モジュールを使用してこれを達成する比較的簡単な方法を見つけました。このモジュールには、フィールドをカスタマイズするための多数のテンプレートファイルが付属しています。一意のクラスを付与するフィールドを編集し、ラッパーマークアップを適切なものに変更します。その後、モジュール内で対応するテンプレートファイルを見つけて、sites / all / themes / THEME_NAMEにコピーします。
前
<span class="field-label"<?php print $title_attributes; ?>>
<?php print $label; ?>:
</span>
後
<span class="<?php print $label; ?> field-label"<?php print $title_attributes; ?>>
<?php print $label; ?>:
</span>
を追加することで<?php print $label; ?>
、フィールドの名前をクラスとして出力し、すべてのフィールドラベルを個別にターゲティングできるようにします。これが他の誰かの役に立つことを願っています!
ダーティですが、HTMLを「#title」プロパティに追加できます。
$form['some_element'] = array(
'#type' => 'textfield',
'#title' => '<span title="HELP!">'.t($subchildlabel).'</span>',
'#default_value' => …
)
…
);
私はそれが機能する自分自身に驚いています。Drupalはこれを除外すると思いますが、そうではありません。したがって、ラベルを別のクラスでラップできます。
<label for="edit-m-vernacularname" class="inline"><span title="HELP!">Common name
</span> </label>
.field-name-field-myfield label{ color:red; }