web-dev-qa-db-ja.com

モーダルウィンドウを使用して登録した後にのみ、匿名ユーザーの投票を保存する方法は?

これが私のユースケースです:

  1. 認証されたユーザーのみが投票できます。
  2. 匿名ユーザーが投票を試みた場合、投票が行われた後、ユーザーはログイン/登録用のモーダルウィンドウとして表示されます。
  3. ユーザーが登録またはログインすると、投票が保存されます。

投票の計算は、cronまたは他のモジュールを使用して行われます。私は特定のモジュールとタイアップする必要はありません(そして基本的なモジュールを書くことで結構です)。私は現在、ルール、投票ルール、ファイブスター、そして明らかに投票APIで運を試しています。ログイン/登録には、ペルソナとfbauthが使用されるため、電子メールによる確認は必要ありません。

同様の問題が ユーザーが匿名でコンテンツを作成し、登録した場合にコンテンツを割り当てることができるモジュール で説明されていますが、私の使用例では、投票と電子メールを使用しない登録が含まれていました。投票はそれをより複雑にしますが、電子メールなしの登録は(うまくいけば)それをより簡単にします。

PS:plus1(または類似の)モジュールを使用して、異なるノードに対して同じワークフローを実行したいので、一般的なアプローチが要求されます。

2
Ratul Saha

匿名の投票をCookieに保存し、ログイン/登録時にそのCookieが存在するかどうかを確認して、それに応じて投票することができます。

  1. Anonユーザーが投票しようとした場合、 user_cookie_save() を使用して、ユーザーが投票しようとしたエンティティのエンティティタイプとエンティティIDをCookieに保存します。 _pending_votes_のような名前を付けます。同時に、モーダルログインウィンドウをトリガーできます。ユーザーがその時点でログイン/登録せず、最終的にログインする前に他のエンティティに投票しようとする可能性もあります。そのため、エンティティタイプとIDをシリアル化された配列として保存することをお勧めします。
  2. 次に、 hook_user_login() を使用してログインしているユーザーにフックし、_pending_votes_ Cookieの存在を確認します。そこにある場合は、その内容を votingapi_set_votes() とともに使用して、保留中の投票をキャストします。 (後で_pending_votes_ Cookieを削除して、ログインするたびに投票しないようにします)
2
Adam Balsam

遅延登録 も同様の理由で設計されましたが、どれほど安定しているかはわかりません。どちらにしても、それはあなたのための良い出発点を提供します。

遅延登録モジュールは、匿名ユーザーが行ったアクションをキャプチャし、登録の準備ができるまで一時的なユーザーアカウントに対して保存します。

0
benjy