web-dev-qa-db-ja.com

登録時にグループに参加または作成する

人々が私のサイトに登録するとき、私は彼らに既存のグループに参加するか、それが存在しない場合は新しいグループを作成してほしいです。それらは1つのグループのメンバーのみであり、サイトで使用されるグループタイプは1つだけです。

オートコンプリートウィジェットセットがあり、その機能を変更したいので、エラーメッセージをスローする代わりにグループを作成します。私はog.moduleを変更することは良いアイデアではないと思います。特定の変更を多くのユースケースで機能するように一般的にするのは簡単ではないので、pre-にフックするカスタムモジュールを作成すると思います。ユーザーエンティティの機能を保存し、存在するかどうかを確認します。存在しない場合は、グループを作成してメンバーシップを作成しますか、それとも別の方法がありますか?

分類法をグループコンテンツとして使用し、ユーザープロファイルの用語参照オートコンプリートフィールドを使用してみましたが、現時点ではogが分類法で完全に機能していないようで、添付されたフィールドデータが分類法に保存されないという他の問題が発生しましたノードタイプをグループコンテンツタイプとして使用する方法に戻ります。

4
stevepurkiss

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()は、エラーをスローする代わりにグループを作成することを除いて、元の関数と同じです。

0
stevepurkiss

あなたの大前提は健全だと思います。代わりに hook_user_insert() を使用したくなります。これは、ユーザーが作成される前ではなく、作成された後に呼び出されます。

  • モジュールが実際にグループの作成や新しいグループの挿入に失敗することはありません。
  • hook_user_presaveは、ユーザーテーブル自体にデータを格納する(単純な)データをシリアル化したいモジュールのためのもので、これはあなたがやっていることではありません。

OG7に必要なフックはすべて、グループのチェックと作成、およびユーザーの挿入にあります。

1
Chris Cohen