0

Drupal 7 Web サイトでユーザー サインアップを無効にしています。アカウントを作成できるのは管理者だけです。

管理者によってユーザーに割り当てられた役割に応じて、ユーザーのカスタム フィールドを追加したいと考えています。次に、管理者が選択した役割に依存するいくつかのフィールドを登録システムに追加したいと考えています。

例: 管理者がロール A のユーザー アカウントとロール B の別のアカウントを作成した場合、ユーザーがログインするとき、ユーザー A は電話番号を入力するよう求められ、2 番目のユーザーは自宅の住所を入力するよう求められる必要があります。

profile2 モジュールを試しましたが、望みどおりの結果が得られませんでした。

4

2 に答える 2

0

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」に置き換えることも検討してください。

于 2013-07-26T09:07:05.810 に答える