Нужно разделить страницу редактирования профиля на 2 части (D7)

Главные вкладки

Аватар пользователя OzStriker OzStriker 21 октября 2016 в 12:57

Добрый!
Встала задача - разделить страницу редактирования профиля на 2 части.
Т.к. в Друпал разработке я новичек - хоелось бы понять как это сделать Smile
Есть некий модуль, в котором создал "пункт" меню:

<?php
$items
['user/%user/usersettings'] = array(
    
'title' => 'Settings',
    
'page callback' => 'mymodule_user_settings',
    
'access arguments' => array('access mymodule applynow'),
    
'type' => MENU_SUGGESTED_ITEM,
  );
?>

Который создал мне собственно саму ссылку.
Далее создал темплейт и собственно функцию, которая должна получать данные пользователя и отдавать их во view.
Попытка использования вот такого кода:

<?php
function mymodule_user_settings(){
    global 
$user;
    
$user user_load($user->uid);
    
module_load_include('inc''user''user.pages');
    
$form drupal_get_form('user_profile_form'$user);
    
    return 
theme(
        
'jsk_user_settings', array(
            
'form' => $form
        
)
    );
}
?>

дала поля формы, но Submit не реагирует. Заметил, что в темплейте вообще обертки не появилось.
Попытка использовать в шаблоне drupal_render($form) дала дубликат уже существующей формы.

Не понимаю уже с какой стороны подступиться,если честно. Помогите, пожалуйста....
Все, что мне бы для начала получить - это свою форму со своими полями, "вырванными" из user_profile_form

Заранее спасибо Smile

Комментарии

Аватар пользователя OzStriker OzStriker 21 октября 2016 в 18:39

Вроде как да, но через hook_form_alter(), я так понимаю, что я смогу удалить поля из первоначальной вкладки(...хотя я могу это сделать и через темплейт, в моем случае...). Вопрос больше как создать форму из полей профиля на новой странице и заставить эту форму работать как форму.

Аватар пользователя OzStriker OzStriker 24 октября 2016 в 16:38

Вопрос не в пошаговом исполнении формы. Это можно и в темплейте сделать. А в том, чтобы по-сути одну часть формы профайла пользователя вынести на одну страницу, а вторую часть полей - на другую

Аватар пользователя bumble bumble 24 октября 2016 в 16:41

Создаете форму(мы), стандартами FAPI, выводите их на нужные страницы, и в сабмите сохраняете данные на нужные места.

Аватар пользователя bumble bumble 26 октября 2016 в 14:04

Документация.
Пример:

<?php
/**
 * Implements hook_menu().
 */
function mymodule_menu() {

  

$items['mymodule/first_page/%user'] = array(
    
'title'            => 'Title First page',
    
'page callback'    => 'drupal_get_form',
    
'page arguments'   => array('mymodule_first_page_form'2),
    
'access arguments' => array('change own username'),
  );

  

$items['mymodule/second_page/%user'] = array(
    
'title'            => 'Title Second page',
    
'page callback'    => 'drupal_get_form',
    
'page arguments'   => array('mymodule_second_page_form'2),
    
'access arguments' => array('change own username'),
  );

  return 

$items;
}

/**
 * First page form.
 */
function mymodule_first_page_form($form, &$form_state$user) {
  
$form_state['mymodule']['user'] = $user;
  
  
$form['name'] = array(
    
'#type'          => 'textfield',
    
'#title'         => t('Name'),
    
'#required'      => TRUE,
    
'#default_value' => $user->name,
  );
  
  
$form['submit'] = array(
    
'#type'  => 'submit',
    
'#value' => t('Save'),
  );
  
  return 
$form;
}

/**
 * Second page form.
 */
function mymodule_second_page_form($form, &$form_state$user) {
  
$form_state['mymodule']['user'] = $user;
  
  
$form['field_myfield'] = array(
    
'#type'          => 'textfield',
    
'#title'         => t('My field'),
    
'#required'      => TRUE,
    
'#default_value' => $user->field_myfield[LANGUAGE_NONE][0]['value'],
  );
  
  
$form['submit'] = array(
    
'#type'  => 'submit',
    
'#value' => t('Save'),
  );
  
  return 
$form;
}

/**
 * First page form submit.
 */
function mymodule_first_page_form_submit($form, &$form_state) {
  
$name $form_state['values']['name'];
  
  
$user $form_state['mymodule']['user'];
  
$user->name $name;
  
user_save($user);
  
  
drupal_set_message(t('User name is @Name', array('@Name=> $name)));
}

/**
 * Second page form submit.
 */
function mymodule_second_page_form_submit($form, &$form_state) {
  
$field_myfield $form_state['values']['field_myfield'];
  
  
$user $form_state['mymodule']['user'];
  
$user->field_myfield[LANGUAGE_NONE][0]['value'] = $field_myfield;
  
user_save($user);
  
  
drupal_set_message(t('Field MyField is @myfield', array('@myfield' => $field_myfield)));
}
?>