Добрый!
Встала задача - разделить страницу редактирования профиля на 2 части.
Т.к. в Друпал разработке я новичек - хоелось бы понять как это сделать
Есть некий модуль, в котором создал "пункт" меню:
<?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
Заранее спасибо
Комментарии
Для таких случаев - hook_form_alter().
Вроде как да, но через hook_form_alter(), я так понимаю, что я смогу удалить поля из первоначальной вкладки(...хотя я могу это сделать и через темплейт, в моем случае...). Вопрос больше как создать форму из полей профиля на новой странице и заставить эту форму работать как форму.
http://www.drupal.ru/comment/143833#comment-143833
Profile 2 не решит задачу?
Возможно. Но с трудом на данный момент представляю как
http://xandeadx.ru/blog/drupal/892
Вопрос не в пошаговом исполнении формы. Это можно и в темплейте сделать. А в том, чтобы по-сути одну часть формы профайла пользователя вынести на одну страницу, а вторую часть полей - на другую
Создаете форму(мы), стандартами FAPI, выводите их на нужные страницы, и в сабмите сохраняете данные на нужные места.
А, если не сложно, подскажите где про это почитать... Документация, пример?
Документация.
Пример:
<?php
$items['mymodule/first_page/%user'] = array(
$items['mymodule/second_page/%user'] = array(
/**
* Implements hook_menu().
*/
function mymodule_menu() {
'title' => 'Title First page',
'page callback' => 'drupal_get_form',
'page arguments' => array('mymodule_first_page_form', 2),
'access arguments' => array('change own username'),
);
'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)));
}
?>
СПАСИБО ОГРОМНОЕ!
Буду копать!