2つのオプションを持つチェックボックスフィールドがあるとします。
別のフィールド(この例ではアドレスフィールド)の<details>
コンテナを展開または折りたたみたいのですが。 HTMLの用語では、これは、「開く」ラジオボタンの値がクリックされたときに<details>
タグにopen
HTML5属性を追加し、aria-expanded=true
タグに<summary>
を追加することを意味します。また、ラジオオプションが選択されていない場合は削除されていることを確認してください(デフォルトでは、ページの読み込み時も同様です)。
古い準関連 の問題と Drupal 8のドキュメントページdrupal_process_states
の問題をいくつか見つけました、しかしこれはDrupalのフォーム#states
APIでは不可能であるように見えます。ドキュメントには、要素に適用できる有効な状態のリストに「open」が含まれていません。
有効な状態は次のとおりです。
expanded
オプションとcollapsed
オプションが機能する可能性があると思うかもしれませんが、以下のサンプルコードではそうではないようです。
function mymodule_form_node_<type>_form_alter(&$form, FormStateInterface $form_state) {
$form['field_address']['#states'] = [
// Expand address field container when the Trigger field is 'Open'.
'expanded' => [
':input[name="field_trigger"]' => [
'value' => 'open'
],
],
];
}
上記の「展開された」状態を「オープン」に置き換えることは機能せず、「折りたたまれた」状態を使用した逆のロジックも機能しません。
function mymodule_form_node_<type>_form_alter(&$form, FormStateInterface $form_state) {
$form['field_address']['#states'] = [
// Collapse address field container when the Trigger field is 'Closed'.
'collapsed' => [
':input[name="field_trigger"]' => [
'value' => 'closed'
],
],
];
}
expanded/collapsedを使用するのではなく、以下のようにopen/closeを使用します。
function mymodule_form_node_<type>_form_alter(&$form, FormStateInterface $form_state) {
$form['field_address']['#states'] = [
// Expand address field container when the Trigger field is 'Open'.
'open' => [
':input[name="field_trigger"]' => [
'value' => 'open'
],
],
'close' => [
':input[name="field_trigger"]' => [
'value' => 'closed'
],
],
];
}
残念ながら、私は自分の質問に答えます:expanded
and collapsed
statesdo work<details>
タイプの場合。
私の問題はオペレーターのエラーでした。私は#states
配列を'#type' => 'container'
のレベルで追加していましたが、コンテナ内には'#type' => 'details'
を保持するウィジェットがあります。 Form APIで楽しい時間を!
作業コードはこれです:
<?php
// In mymodule.module
use \Drupal\Core\Form\FormStateInterface;
function mymodule_form_node_<type>_form_alter(&$form, FormStateInterface $form_state) {
$form['field_address']['widget'][0]['#states'] = [
// Expand location field when the Type is 'On-site'.
'expanded' => [
':input[name="field_trigger"]' => [
'value' => 'open'
],
],
// Collapse location field when the Type is 'Online'.
'collapsed' => [
':input[name="field_trigger"]' => [
'value' => 'closed'
],
],
];
// Load edit form with Location field either open or closed, based
// on the value of the Trigger field.
$form['field_address']['widget'][0]['#open'] = ($form['field_trigger']['widget']['#default_value'] == 'open') ? 1 : 0;
}