0

次のような階層チェックボックスで構成される構成ページを設定しようとしています。

-Parent#1
  --option#1
  --option#2

-Parent#2
  --option#1
  --option#2

上記のレイアウトを実現するために、次のコードを使用しています。

$form['categories']['templates']['parent1'] =   array(
    '#type'         =>  'checkboxes',
    '#title'        =>  t('Select the appropriate actions for the form based on the indicated template'),
    '#options'      =>  array("Parent#1"),
    '#multiple'     =>  TRUE,
);
$form['categories']['templates']['parent1']['actions']  =   array(
    '#type'         =>  'checkboxes',
    '#options'      =>  array("P1 - option#1", "P1 - option#2"),
    '#multiple'     =>  TRUE,
);

$form['categories']['templates']['parent2'] =   array(
    '#type'         =>  'checkboxes',
    '#title'        =>  t('Select the appropriate actions for the form based on the indicated template'),
    '#options'      =>  array("Parent#2"),
    '#multiple'     =>  TRUE,
);
$form['categories']['templates']['parent2']['actions']  =   array(
    '#type'         =>  'checkboxes',
    '#options'      =>  array("P2 - option#1", "P2 - option#2"),
    '#multiple'     =>  TRUE,
);

しかし、私が望んでいないようになっている効果。コードが生成しているものの画像を添付しました:

ここに画像の説明を入力してください

4

1 に答える 1

0

これを実現するために、新しいフォームAPI機能を使用できます#states

使いやすさのために、条件付きチェックボックスを。でラップしていることに注意してくださいfieldset

<?php
  $form['categories']['templates']['parent1'] =   array(
    '#type'         =>  'checkboxes',
    '#title'        =>  t('Select the appropriate actions for the form based on the indicated template'),
    '#options'      =>  array(1 => 'Parent#1'), // Note this! You can't use 0 as a key in #options.
    '#multiple'     =>  TRUE,
  );
  $form['categories']['templates']['parent1']['wrapper'] = array(
    '#type' => 'fieldset',
    '#title' => t('Options for @option', array('@option' => 'Parent#1')),
    '#states' => array(
      'visible' => array(
        ':input[name="parent1[1]"]' => array('checked' => TRUE), // We use "parent1" and its Nth option. in above field, See #options in above checkboxes field.
      ),
    ),
  );
  $form['categories']['templates']['parent1']['wrapper']['actions']  =   array(
    '#type'         =>  'checkboxes',
    '#options'      =>  array("P1 - option#1", "P1 - option#2"), // This is also wrong. You must define a key => value pair for #options or somehow avoid using 0 as the key.
    '#multiple'     =>  TRUE,
  ); 
?>

#treeDrupalが同じキーの値をマージしないように、フィールドセットで=>TRUEを使用することをお勧めします。

#multipleまた、チェックボックスのフィールドタイプは必要ありません。

アップデート

ノードタイプの例:

<?php
$node_types = node_type_get_names();
$form['categories']['templates']['parent1'] =   array(
  '#type'         =>  'checkboxes',
  '#title'        =>  t('Select the appropriate actions for the form based on the indicated template'),
  '#options'      =>  $node_types,
);
foreach ($node_types as $type => $label) {
  $form['categories']['templates']['node-options'.$type] =   array(
  '#type'         =>  'checkboxes',
  '#title'        =>  t('Options for @type', array('@type' => $label)),
  '#options'      =>  array("Parent#1"),
  '#multiple'     =>  TRUE,
  '#states' => array(
    'visible' => array(
      ':input[name="parent1['.$type.']"]' => array('checked' => TRUE), // We use "parent1" and its Nth option. in above field, See #options in above checkboxes field.
    ),
  ),
);
}
于 2013-02-15T12:17:38.653 に答える