Drupal 7 + Profile2, раздельная форма регистрации, вывод полей на странице пользователя.

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

Аватар пользователя evtifiev evtifiev 12 марта 2012 в 13:05

Добрый день сообщество!Прошу сильно не карать, пишу первый раз на данном ресурсе!
Задача стояла следующая! На Drupal 7 реализовать:

  1. раздельную регистрацию для разных групп пользователей
  2. создание страницы пользователя отличной от стандартной
Немного поразмыслив и почитав рекомендации принял решения, что для реализации необходимо несколько модулей Rules,Profile2 и profile2_regpath.
В настройках создал еще 2 группы пользователей с различными правами А и В. После включения модулей, в меню Администрирование-Содержимое, появилась новая вкладка "ТИП ПРОФИЛЯ". Заходим в "Тип профиля", создаем 2 типа профиля, для пользователей A и B(машинное имя я им присвоил соответственно prof_a и prof_b).В настройках вновь созданного типа профиля ставим галочку, в какую группу необходимо поместить пользователя после регистрации. Прошу Вас обратить внимание именно на машинное имя созданных профилей, в дальнейшем они нам понадобятся.

В этих профилях создаем поля которые нам необходимо будет выводить пользователю при регистрации, для разных пользователей они будут разные соответственно. Кстати модуль Profile2(в связке с дополнением profile2_regpath) очень гибкий, в нем можно создавать не только различные формы регистрации, но и формы авторизации и восстановления пароля. После создание форм регистрации у Вас будут различные адреса для различных групп пользователей. Для примера у меня (http://site.ru/prof_a/register->для группы А и http://site.ru/prof_b/register->для группы B). Верстку дизайна здесь описывать не буду, думаю что это личное дело каждого. И так, первая проверка, заполняем все поля формы регистрации, регистрируем пользователя, и зарегистрированный пользователь попадает в ту группу которую мы назначили для формы данного профиля при регистрации. И так, задача решена.

Переходим к решению другой задачи, создаем в шаблоне темы page--user--%.tpl.php - шаблон, страницы пользователя, выводим все необходимые блоки, и другую информацию. Обновляем тему, и шаблон страницы пользователей начинает работать. И тут стал вопрос, а как же вывести поля пользователя которые он вводил при регистрации? Запросив вывод переменной $user, ничего нового не увидел, стандартный массив в котором не хранятся поля введенные с помощью модуля Profile2. Немного поразмыслив, попросил помощи поисковиков, но не нашел к сожалению более внятной информации. Немного почитав информации о модуле Profile2, понял одно, что он работает с помощью сущностей(Entity). А как же в моем шаблоне вывести поля которые пользователь вводил при регистрации? Немного покопав на сайте drupal.org, наткнулся на очень интересную функцию которая мне помогла в дальнейшем field_view_field. С помощью данной функции возможно выводить любые поля из модуля Profile2.
Для примера вывода полей Фамилия и Имя на странице пользователя. $profile['prof_a'] - вот это указатель на машинное имя именно того профиля, из которого необходимо выводить поля. Более детально описывать данную функцию не буду, все есть в документации API Drupal.

<?php
$profile 
profile2_load_by_user($user->uid) ; 
render(field_view_field'profile2' $profile 'prof_a' ] , 'field_name',  array( 'label'=>'hidden', )) ) ;
 
render(field_view_field'profile2' $profile 'prof_a' ] , 'field_surname',  array( 'label'=>'hidden', )) ) ;
?>

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

Комментарии

Аватар пользователя Antoniy Antoniy 29 мая 2012 в 14:56

Как я понял профиль пользователя по данной схеме это профиль, а не тип материала? Хорошо. Получается, что каждой роли свой тип профиля. Вроде как это можно сделать разрулив права через Fied Permiimon, но для админа поля всех ролей будут в одной куче, как я понимаю, что неудобно. А если с вашим способом такого нет, то это вообще супер.

Аватар пользователя shved shved 21 июня 2012 в 18:00

Подскажите с помощью какого кода можно вывести поля из profile2 в advanced forum код который выше в этой теме не подходит.Если выводить просто из стандартного профиля то вставляем вот этот код
<?php if (isset($account->field_gorod['und'])) print render(field_view_value('user', $account, 'field_gorod', $account->field_gorod['und'][0])); ?>
в папку модуля advanced forum - naked-autor pane, только меняем название своего поля.Кто знает подскажите как из profile2?

Аватар пользователя igorek igorek 20 августа 2012 в 10:49

А как поставить разрешение для анонима для адресов - http:// site.ru/prof_a/register - а то у меня доступ запрещён. А где разрешить не знаю?

Аватар пользователя Antoniy Antoniy 20 августа 2012 в 11:54

Как я понял, Profile2 это тип материала, заводятся поля и там где-то галочка вроде была, что выводить тип материала при регистрации, а в разрешениях полей на эти поля дать права анонимам. Я делал по схеме топикастера один раз ради эксперимента, все вроде получалось.

Аватар пользователя iNFerNo iNFerNo 20 августа 2012 в 12:06

Ну как вариант. Конечно было бы лучше как в 6ке у каждого поля из профиля вывод в регистрацию без всяких там галочек для анонимов.

Аватар пользователя igorek igorek 20 августа 2012 в 23:32

Право доступа - Profile2
есть только :
- Редактировать свой профиль
- Редактировать любой профиль
- Просмотр своего профиля
- Просмотр любого профиля
А создать профиль - нет галки!
Что делать то?

Аватар пользователя Antoniy Antoniy 20 августа 2012 в 23:36

Ну дык, в шестерке с Content Profile тоже так. Если дать анонимусам и ролям зарегистрированных пользователей права на создание профиля, как типа материала (как ноды), они же себе целые кучи смогут создавать. Там, как я понял рулят права на редактирование полей этого типа материала Profile2.

Аватар пользователя igorek igorek 21 августа 2012 в 12:46

Алексей (evtifiev), я как понял, включил и всё работает, а как что и почему не работает - это не к нему, а разработчику модуля...)))

"iNFerNo" wrote:
а если два профиля обще поля. как вывести в регистрацию общее поле
- я думаю это надо в профиль - main ставить.

Аватар пользователя iNFerNo iNFerNo 21 августа 2012 в 13:01

что это за такой профиль?

у меня есть 2 профиля

первый - lalala второй blablabla

в lalala поля:
name
hobby
music

в blablabla поля:
name
music

в регистрацию нужно вывести только поле name

пи.эс. у нас же 2 вида профиля два вида регистрации, два пути для выбора кем хотим быть lalala Или blablabla

Аватар пользователя iNFerNo iNFerNo 21 августа 2012 в 13:04

что это за такой профиль?

у меня есть 2 профиля

первый - lalala второй blablabla

в lalala поля:
name
hobby
music

в blablabla поля:
name
music

в регистрацию нужно вывести только поле name

пи.эс. у нас же 2 вида профиля два вида регистрации, два пути для выбора кем хотим быть lalala Или blablabla

Аватар пользователя igorek igorek 21 августа 2012 в 20:19

"igorek" wrote:
А как поставить разрешение для анонима для адресов - http:// site.ru/prof_a/register - а то у меня доступ запрещён. А где разрешить не знаю?

Вот я тупорылый олень...))) пол дня потратил... и модуль смотрел - 'access callback' => 'user_is_anonymous', и dev версию поставил(удалил) а вся фигня то была в том, что я дописал в ссылке user - site.ru/user/prof_a/register - вот доступ и запрещен - писал бы друпал по человечески - такой страницы нет. я бы сразу всё понял...)))
"iNFerNo" wrote:
как вывести в регистрацию общее поле
- профиль main ставится по умолчанию - видимо ты его удалил. Я просто предлагаю сделать общий профиль и в нём общее поле. Это как вариант в твоей ситуации. И поставить галку - Show on all user account registration forms. - тогда его будет видно при регистрации в любом профиле.

Аватар пользователя Antoniy Antoniy 21 августа 2012 в 21:53

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

Аватар пользователя igorek igorek 21 августа 2012 в 23:09

"iNFerNo" wrote:
а зачем юзеру 2 профиля заполнять причем на разных вкладка/страницах?
- заполняется это на одной странице. Вот редактировать может и на разных.

Аватар пользователя iNFerNo iNFerNo 22 августа 2012 в 10:46

Почему на одной? Это же не обязательные поля в регистрации. А потом будет заполнять поля в двух профилях...

Что то какая то ерунда выходит.

Аватар пользователя igorek igorek 22 августа 2012 в 19:42

iNFerNo wrote:
Почему на одной? Это же не обязательные поля в регистрации. А потом будет заполнять поля в двух профилях...
Что то какая то ерунда выходит.

Тогда одинаковое поле, но не общее, а два разных, в двух профилях, но доступные для редактирования каждый своей роли.

Аватар пользователя iNFerNo iNFerNo 22 августа 2012 в 19:47

а если роль изменится у юзера и соответсвенно профиль. ему что по второму разу те же поля заполнять?

Аватар пользователя igorek igorek 22 августа 2012 в 19:56

iNFerNo wrote:
а если роль изменится у юзера и соответсвенно профиль. ему что по второму разу те же поля заполнять?

Надо так делать, чтобы не менялась...)))

Аватар пользователя Antoniy Antoniy 22 августа 2012 в 20:02

А можно хитрее сделать. Делаем все поля, которые будут у роли А и у роли Б, а профиль один. Только те поля, которые нужны роли А делаем права для роли А, а те поля, которые для роли Б - права для роли Б.

Аватар пользователя Boozenok Boozenok 29 августа 2012 в 13:50

Хм) А как изменить что бы при регистрации выводилась не стандартная форма профиля Main, а типа что бы был выбор между профилем А и профилем Б? Прям галочка что бы стояла "Вы А или Б"?
а то все вроде нормально, но форма регистрации то стандартная лезет, та что по умолчанию....my_site/user/regisration

Аватар пользователя igorek igorek 29 августа 2012 в 23:43

"Boozenok" wrote:
а то все вроде нормально, но форма регистрации то стандартная лезет, та что по умолчанию....my_site/user/regisration

Я же уже ответил сам себе и вам...
"igorek" wrote:

Вопрос: Как отключить дефолтную страницу регистрации - user/register
А сделать там выбор - для какой роли регистрироваться?
нашел ответ здесь

На этой же странице рассказывается, что можно сделать это и через вьюс.
Читайте внимательней.

Аватар пользователя olgastaf olgastaf 24 января 2013 в 16:07

У меня ситуация проще, у меня нет разных групп пользователей. Но я так и не поняла - по какому адресу можно посмотреть профиль пользователя?
Доступны только страницы "Мой аккаунт", "Мой профиль". А как посмотреть профиль другого пользователя?
Подскажите, кто знает

Аватар пользователя andron81_81 andron81_81 9 февраля 2013 в 19:43

а можно ли получать поля новых пользователей на стадии регистрации по событии создания нового аккаунта? мне это нужно чтобы эти поля записывать в свои таблички.
предложенный пример автором мне наверно не подходит , так как это для авторизованных пользователей

(использую триггер hook_user_presave)

Аватар пользователя severip severip 8 мая 2014 в 12:57

Присоединяюсь к вопросу andron81_81.

При такой реализации:
render(field_view_field( 'profile2' , $profile [ 'name_profile' ] , 'field_email',  array( 'label'=>'hidden', )) ) ;

в моем случае данное поле видит только админ, т.к. email от анонимов и даже авторизованных юзеров скрыт.

Как сделать так, чтобы email можно было достать независимо от роли?

Аватар пользователя Boozenok Boozenok 8 мая 2014 в 13:12

"severip" wrote:
Как сделать так, чтобы email можно было достать независимо от роли?

Ну судя по этому

"severip" wrote:
'field_email'

у вас эмейл это просто обычное поле? дайте права всем просматривать это поле.
Field Permissions в помощь

Аватар пользователя severip severip 8 мая 2014 в 13:36

Boozenok, да, это обычное поле.

Логика работы сайта выстроена таким образом, чтобы не делать это поле общедоступным!
Field Permissions используется, но в других целях.

Конкретно есть некий код, который дергает мыло вышеуказанным способом в модуле Custom tokens и подставляет токен в модуль webform. Соответственно, если на страницу с webform заходит НЕ админ, то выдается ошибка, т.к. этот код:
render(field_view_field( 'profile2' , $profile [ 'name_profile' ] , 'field_email',  array( 'label'=>'hidden', )) ) ;
только для тех, у кого есть права на просмотр соответствующих профилей/полей profile2.
Пока единственное, что приходит в голову, это дернуть поле SQL запросом, но сам сделать не могу, т.к. не программист.

Может кто подскажет, как правильно в подобном случае составить запрос?

Аватар пользователя severip severip 8 мая 2014 в 17:54

[РЕШЕНО] Таки работает конструкция!
Для тех кто будет использовать указанное в топике решение - все работает для анонимов, проблемы возникают только тогда, когда вытаскиваемое поле пустое!
То есть дело не в правах, Field Permissions здесь не нужен.
Всем удачи!

Аватар пользователя shread777 shread777 24 сентября 2014 в 9:15

Подскажите пожалуйста, первый раз работаю с этим модулем.

Есть тип members (поля стандартные) и тип anketa (для анкет пользователей - много полей, возраст, город, страна, рост, вес, семейное положение и тд..).

Делаю с помощью этого модуля поля в типе anketa - при этом на странице регистрации /anketa/register появляются сразу все поля. Мне нужно их все скрыть, чтобы пользователь сначала зарегистрировался по username\email, а потом уже начал заполнять свой профайл. Нигде не нашел в настройках убрать определенные поля (в отображении везде поставил "Скрытый", со страницы профиля пропадают, а на странице регистрации остаются...).

Как убрать их со страницы регистрации? (в данный момент вижу один способ - display:none для этого блока... но это же не совсем правильно...)

И второй вопрос. Хочу сделать функционал с "VIP-статусом" анкеты. Сделал поле VIP - логическое да\нет. Как сделать так, чтобы это поле мог редактировать только admin? Field Permissions?

И третий вопрос (продолжение второго) - по сути сейчас это способ вручную. Хочу привязать автоматическое поднятие анкеты при оплате кредитной картой. В какую сторону копать? Может кто-нибудь сталкивался с этим?

Аватар пользователя severip severip 24 сентября 2014 в 10:03

shread777,

1. В настройках профиля: /admin/structure/profiles
Ссылка Изменить и там есть галка - Отображать в процессе регистрации.

2. Да, Field Permissions это просто и быстро.

3. Я делал через wiews + userpoint + Balance.

Аватар пользователя shread777 shread777 28 сентября 2014 в 10:39

1. Я так понимаю ссылка "Отображать в процессе регистрации" - Show on all user account registration forms ?

Чекбокс у меня пустой, при этом site/user/register без дополнительных полей, а вот site/anketa/register со всеми полями... Мне же нужна раздельная регистрация, как описано в другой теме:

"Ставим модули (без патчей), настраиваем их. Создаём статичную страницу с адресом /user/register, на которой описываем типы регистрации и вставляем ссылки на регистрацию (типа /user/register/buyer, /user/register/simple, ...).
Всё."

Аватар пользователя chelwolf chelwolf 3 июля 2015 в 0:13

Спасибо Алексею за разъяснения, очень подробно и по делу, не то что в куче английских TV-кастов. Я вынужден был использовать этот модуль для достижения внутренней эстетики и порядка. У меня на сайте есть три типа пользователей - админ, модератор и автор (Что может быть проще?). Админ следит за сайтом, - он один, модератор проверят статьи, а автор регается и присылает их. Когда я создаю из админки модератора (их несколько) я как дурак вынужден заполнять поля автора, что неприемлемо и просто тупо до бесконечности, ему эти поля вообще не нужны, зачем модератору указывать, например, свою творческую биографию или научного руководителя?

В итоге своих работ и долгих разбирательств с этими модулями понял, что добиваться подобной эстетики и порядка надо только костылями (т.е. жертвовать внутренним порядком кода), вроде скрывания полей через CSS и так далее, модуль бесполезен в моём случае. И думаю так не только в друпале дела обстоят. Когда надо сделать наитупейший блог, - есть куча предложений, когда задача немного усложняется и становится не тупо-тривиальной, то все "мегакрутейшие и функциональыне" решения оказываются говном и превращается в тыкву. Надеюсь в 8 версии это исправят.

Аналогичная труба в друпале обстоит с плейсхолдерами, с регистрацией по емейлу и через контакт да и много ещё с чем. Мораль проста - о всякой эстетике и думать забудьте, надо очень сильно постараться, чтобы сделать юзабельным интерфейс модератора, например. При этом 80% усилий как правило уходит на борьбу с друпалом и его дурацкими устоями.