conditional_fieldsモジュールがあります。これは、ほとんどの場合に役立つように思えます。
それができない場合は、カスタム モジュールで hook_form_alter() を使用することをお勧めします。何かのようなもの:
function yourmodule_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'user_register') {
// Define the phone field.
$form['phone'] = array(
'#type' => 'textfield',
'#title' => t('Phone'),
'#size' => 30,
'#maxlength' => 30,
'settings' => array(
'#states' => array(
// Hide this field when role A isn't checked.
'invisible' => array(
':input[role="A"]' => array('checked' => FALSE),
),
),
),
);
// Define home address field
// [copy the snippet above & tweak to suit...]
}
}
これはすぐに使用できる可能性は低いですが (私は drupal 環境を手元に持っていません)、多少の調整を加えれば、ほとんどの場合はうまくいくはずです。
「':input[role="A"]' => array('checked' => TRUE),」行が最も多くの作業を必要とします。つまり、「role」は「Roles」チェックボックスの name 属性と一致する必要があります。 、および「A」は、チェックされたときに A の実際の値に対応する必要があります。
モジュールで他の form_alter を使用していない場合は、関数名を「yourmodule_user_register_form_alter」に置き換えることも検討してください。