ユーザーが登録時に電話番号を入力します。入力できる値の量は無制限に設定されています。これを設定するとフィールドが変更され、下に別のフィールドを追加して電話番号を追加できます。ユーザーが/ user /%user/editに移動しなくても、登録後に番号を追加できるようにしたい
別のページで電話番号フィールドのみを返そうとしています。しかし、そのフォームを別のページに表示することはできません。他のフォームを表示しているときは、次のように呼び出しました。
drupal_render(drupal_get_form('user_profile_form'));
これは、フォームの一部、名、姓、国(すべてのカスタムフィールド)を返しますが、電話番号フィールドは返しません。私もかなりの数のエラーを受け取ります
未定義のインデックス:drupal_retrieve_form()のuser_profile_form
未定義のインデックス:block_form_user_profile_form_alterの#user_category
未定義のインデックス:overlay_form_user_profile_form_alter()の#user_category
未定義のインデックス:system_form_user_profile_form_alter()の#user_category
未定義のオフセット:uc_roles_form_user_profile_form_alter()で0
明らかに私は何か間違ったことをしています...
この作品はエリックの作品をもとに制作しました。あなたができると思います['#access']=false
不要なすべての値。
//Provide a custom page at /custom-profile to access our custom profile form
function mymodule_menu() {
$items['custom-profile'] = array(
'title' => 'Custom Profile!',
'page callback' => 'mymodule_custom_profile',
'access callback' => TRUE,
'type' => MENU_NORMAL_ITEM,
);
}
//displays the custom form at /custom-profile
function mymodule_custom_profile() {
module_load_include('inc', 'user', 'user.pages');
global $user;
$user = user_load($user->uid);
$form = drupal_get_form('user_profile_form', $user, 'account', 'custom');
return $form;
}
function mymodule_form_user_profile_form_alter(&$form, &$form_state){
//modifies the form_user_profile DO CUSTOM STUFF BELOW!
if(isset($form_state['build_info']['args'][2]) &&
$form_state['build_info']['args'][2] = 'custom'){
//rename submit button
$form['actions']['submit']['#value'] = t("dooo it!");
//remove a few account things from this page
$form['account']['#access']=FALSE;
//needs to be there for the picture to work
form_load_include($form_state, 'inc', 'user', 'user.pages');
}
}
これを試して
module_load_include('inc', 'user', 'user.pages');
global $user;
print(drupal_get_form('user_profile_form', $user));
これは機能します。
drupal_get_form('user_profile_form',$user,'account', 'my_parameter');
function my_module_form_alter((&$form, &$form_state, $form_id) {
switch($form_id) {
case 'user_profile_form':
$info = $form_state['build_info']['args'][2];
if ( $info == 'my_parameter' ) {
//do something with the form
$form['my_field']['#access'] = false ;
//prevent ajax errors
form_load_include($form_state, 'inc', 'user', 'user.pages');
}
break ;
}
}
@ pawel-dubielコメントに基づいて、user.pages.incをhook_menu()に直接追加しました。
function mymod_menu() {
return array(
'my-path' => array(
'page callback' => 'mymod_page_callback',
'file' => 'user.pages.inc',
'file path' => drupal_get_path('module', 'user'),
)
);
}
チャームのように機能し、hook_init()の使用は避けられます。