web-dev-qa-db-ja.com

プロファイル2登録フォームのユーザーフィールドを非表示にする

Drupal 7 Webサイトで3つの役割を持つマルチユーザーWebサイトに取り組んでいます。さまざまなユーザーのカスタムフィールドにprofile2モジュールを使用しています。また、プロファイル/ユーザー登録のprofile2パスも使用しています。

すべてのユーザー/プロファイルロールから3つの異なる場所cck(場所cckとは異なるフィールドが許可されています)フィールドが必要なため、Locationモジュールで問題が発生しました。これで2か月以上行き詰まりました。 Profile2とLocation cckを使用できるのはいいことですが、Viewsモジュールが異なるプロファイルのProfile2 CCKフィールドに異なるLocationフィールドを抽出しないため、それは不可能です(たとえば、一部のビューの場所から電話または都市のフィールドのみが必要です)。

これ(これまでのところ)を達成する唯一の方法は、ユーザーアカウントフィールドに3つの場所のcckフィールドを作成し、フィールド許可モジュールを使用して特定のロールに特権を付与することです。

だが!特定のプロファイルからの他のすべてのフィールドを使用して、profile2登録パスのその場所フィールドを公開する必要があり、それらは必須である必要があります。

ユーザータイプ(購入者、販売者など)に基づいて登録フォームの場所のcckフィールドを非表示にする方法はありますか?

6
Ivan

profile2パスを使用しているときにユーザー登録フォームのフィールドを非表示および表示するには-template.phpのhook_form_alterで以下を試してください。

if ($form_id == 'user_register_form') { 

// get current path  
$request_path = request_path();  

// check if current path corresponds to your registration form for a particular role  
if (strpos($request_path,'buyer') !== false) {    

// removes the field that should be hidden
$form['field_1']['und'][0]['value']['#access'] = FALSE;

// or   
unset($form['field_1']['und'][0]['value']);

// set the state of the field to required  
 $form['field_2']['und'][0]['value']['#required'] = TRUE;

}  
}

単純な警告-ajaxを使用するロケーションモジュールフィールド(アドレスフィールドモジュールも同様)には、ユーザーregを壊すバグがあることがわかります。エラーで送信され、上記の方法で非表示のフィールドが公開された場合に、Profile2 Pathによって生成されたフォーム。この問題の洞察を探してください( https://www.drupal.org/node/2558335 )。

1
oksana-c