Присоединяйтесь или создайте группу при регистрации
Когда люди регистрируются на моем сайте, я хочу, чтобы они либо присоединились к существующей группе, либо создали новую, если она не существует. Они могут быть членами только одной группы, и на сайте используется только один тип группы.
У меня установлен виджет автозаполнения, и я хочу изменить его функциональность, чтобы вместо того, чтобы выдавать сообщение об ошибке, он создавал группу. Я предполагаю, что изменение og.module не является хорошей идеей, так как было бы нелегко сделать мои конкретные изменения общими достаточно, чтобы работать для множества вариантов использования, так что я прав, думая, что я бы создал пользовательский модуль для подключения к функциям предварительного сохранения сущности пользователя и проверил, существует ли он, если нет, то создайте группу и создайте членство там или есть другой способ?
Я попытался использовать таксономию в качестве содержимого своей группы и использовать поле автозаполнения ссылки на термин в своем профиле пользователя, но og, похоже, на данный момент не полностью работает с таксономией, и у меня были другие проблемы с прикрепленным полем данные, не сохраняемые в таксономии, поэтому вернулись к использованию типа узла в качестве типа содержимого моей группы.
2 answers
Я думаю, что ваша общая предпосылка верна. У меня был бы соблазн использовать вместо этого hook_user_insert(), который вызывается после создания пользователя, а не раньше, так как:
- Ваш модуль на самом деле не может не создать группу или вставить новую.
- hook_user_presave на самом деле предназначен для модулей, которые хотят сериализовать (простые) данные для хранения в самой таблице пользователей, а это не то, что вы делаете.
Все необходимые крючки в OG7 есть для проверка, создание групп и вставка пользователей.
hook_user_insert()
срабатывает слишком поздно в процессе. Я использовал hook_form_FORM_ID_alter()
для изменения обратного вызова проверки автозаполнения, чтобы использовать свою пользовательскую функцию.
function MYMODULE_form_user_register_form_alter(&$form, &$form_state, $form_id) {
$form['group_audience']['und'][0]['gid']['#element_validate'][0] = 'MYMODULE_field_audience_autocomplete_validate';
}
MYMODULE_field_audience_autocomplete_validate()
такая же, как и исходная функция, за исключением того, что вместо того, чтобы выдавать ошибку, она создает группу.