ВопросКак вытянуть форму загрузки автара пользователя
Добрый день! Я делаю полностью свою форму редактирования профиля, это связано с темой. С текстовыми полями вроде бы все просто, сохраняются через user_save(). Но вот с аватаром пользователя возникли проблемы. В идеале хотелось бы вытянуть кусок формы загрузки из user_edit_form() Но пока не получается.
Нарыл такой код (How to add user edit form fields to profile content type form?):
if ($form_id == 'profile_node_form') { require_once drupal_get_path('module', 'user') .'/user.pages.inc'; require_once drupal_get_path('module', 'node') .'/node.pages.inc'; global $user; $form += array('account' => array()); // Get the node form $node_form = drupal_retrieve_form('user_profile_form', $form_state, $user); drupal_prepare_form('user_profile_form', &$node_form, &$form_state); $form['picture'] = $node_form['picture']; $form['locale'] = $node_form['locale']; $form['email'] = array( '#type' => 'textfield', '#title' => t('E-mail address'), '#default_value' => $user->mail, '#required' => TRUE, ); $form['locale']['language']['#type'] = 'select'; if ($user->uid) { $form['#submit'][] = 'profile_user_submit'; $form['#validate'][] = 'users_validate_picture'; } $form['#attributes'] = array('enctype' => 'multipart/form-data'); }
Но не могу разобраться как его применить в моем случае. Влепил в свой модуль такую форму:
function custom_user_picture($form_state) { require_once drupal_get_path('module', 'user') .'/user.pages.inc'; global $user; // Get the node form $node_form = drupal_retrieve_form('user_profile_form', $form_state, $user); drupal_prepare_form('user_profile_form', &$node_form, &$form_state); $form['picture'] = $node_form['picture']; $form['#attributes'] = array('enctype' => 'multipart/form-data'); $form['type'] = array('#value'=>'profile','#type'=>'hidden'); $form['submit'] = array( '#type' => 'submit', '#value' => t('Change'), ); return $form; }
потом вывел ее в нужном месте через drupal_render('custom_user_picture');
Форма выводится, но она не функционирует.. Может посоветуете как-то по другому решить это?
- Гость
- 10.12.2011
- 118926
Комментарии
Два замечания.
1. custom_user_picture - это форма. Поэтому вызываться она должна не через drupal_render(), а через drupal_get_form('custom_user_picture');
2. Я не думаю, что надо подтягивать другие формы. Скорее всего, вам просто надо создать форму с загрузкой изображения. Далее на сабмите (после обязательной валидации изображения на корректность) загружаете пользователя с помощью global $user, добавляете фотографию к нему в профиль (в объекте $user будет поле с фото) и делаете user_save($user);
Если я слишком сложно объяснил - пишите, помогу кодом. Я так понял, это Drupal 6?
Что-то не выходит сохранить... Проверку взял из стандартного модуля user
Все предыдущий код - бред =) Разобрался, раскопал что как в стандартном обработчике работает и сделал свою форму. Кстати обошелся без сабмита. Правильно ли я сделал сейчас? Но аватар уже меняет)
Ага, теперь всё верно :)
Здравствуйте, не подскажите как в функции submit переложить в переменную $file_id = $fid файла. Просто картинка сохраняется отдельно в файловой системе, а форма с данными сабмитится, но $fid не перекладывается. Это нужно чтобы в дальнейшем вывести каждую запись из таблицы с картинкой
$file_id = $file->fid ? Или я неправильно вас понял?
Можете и мне подсказать. Код понятен, но здесь человек делает свою темизированную страничку, и код пихает в модуль. Можно ли как-то вызвать загрузку аватара прямо из профиля?. Например есть кнопка "Загрузить изображение", нажимая на которую человек сразу мог выбрать фотографию. или же например, вывести форму загрузки фото в табе. Если так то куда пихать данный код?
Вам придётся самостоятельно это делать - создавать форму с кнопкой загрузки. Либо же брать готовую форму с редактированием профилем пользователя, и вырезать оттуда лишнее.
можете еще помочь? делаю так:
потом вывожу где мне надо, вот так:
форма загрузки выводиться и изображение сохраняет в files (но саму картинку не видно), как мне теперь сделать что бы это изображение циплялось к юзеру и сразу отображалось
Мне кажется, что копать нужно где-то сюда:
(код для 7-рки)
То-есть нужно сохранить каким то образов картинку в юзере. Нужна помощь, натолкните...
Я могу ошибаться, но вам в сабмите формы надо сделать примерно следущее:
что-то типа такого?
?
По сути да, только файл надо из $form_state забрать.
Комментировать