Posted by anony on December 16, 2013 at 12:15pm
皆様こんばんは。
現在「マルチユーザーによる画像の共有サイト」を作成中です。
サイトのイメージとしてはイラストコミュニケーションサービス「pixiv(ピクシブ)」のようなサイトです。
機能の一部として、ユーザー同士のフォロー機能を考えております。
フォローユーザーの表示はflag followモジュールを使用し、viewsモジュールにより一覧表示できました。
以下設定内容です。
https://groups.drupal.org/files/follow.JPG
そこで、以下の2点を質問させてください。
1.フォロワーユーザーの一覧表示の方法
2.フォロー、フォロワーユーザー数の表示方法
1.に関してはflag followモジュールをインストールしていますので、「サイト構築」→「Flags」よりリレーション等の設定、それに加えてviewsモジュールの設定等でわからないなりに色々試してみましたがどうしてもうまく行きません。
2.に関してはモジュールを探してみたのですが発見できておらず、実装可能なモジュールがあれば教えていただきたいです。
flag followモジュールにこだわるのではなく、他のモジュールでの実現でも構いません。
Drupalのバーションは「Drupal 7.24」です。
まだDrupalでの開発を始めて2週間ほどの初心者なので、質問の内容等足らなかったらすみません。
お忙しい中大変恐縮ですが、よろしくお願い致します。
| Attachment | Size |
|---|---|
| follow.JPG | 117.05 KB |
Comments
フォローユーザー,フォロワーユーザー
2週間でこんな複雑なところまですごいですね。
1、フォローユーザーの一覧が表示できたということで、
その逆をViewsで引っ張ることが難しいということでしょうか。
back referenceの機能をViewsに提供していないのかコードを見る
必要があるかもしれないです。
Flag Followモジュールは初めて知ったのですが、ユーザー数が65と
まだ少ないので情報が出回っていないのがつらいですね。
類似モジュールはいくつか有りますし、references, entyty referenceなどを
使っても出来るのではないかと思います。
2、はちょっとトリッキーな設定をしますが、ViewsにGroupByの
機能がありますので可能だと思います。
「自分を」フォローしているユーザーの一覧表示について
qchanさん、早速のご返信ありがとうございます。
1.に関してはqchanさんのおっしゃる通りでして、以下のとおりです。
・「自分が」フォローしているユーザーの一覧表示 → 実現できた
・「自分を」フォローしているユーザーの一覧表示 → 実現できない
twitterのフォロー、フォロワー表示と思っていただけるとわかりやすいかもしれないです。
下記サイトでは「Flag」と「views」を使えばフォロー、フォロワー両方の表示が実現できると書いているようなんですが、「Flag」の意味と使い方、またviewsの使い方もどう設定すればどのように内部でSQLが実行されるのかが理解できていないのでうまく行ってないです。(あと英訳をgoogle翻訳で行っているので自分が意味を取り違えているのかもしれません)
http://www.leesome.com/blog/2013/02/18/creating-following-and-followers-...
私自身、特にflag followモジュールにこだわる気はありませんので、お手数でなければフォロー・フォロワー機能(一覧表示含む)を実装できる類似モジュールがあれば教えていただけませんでしょうか。
類似モジュールを色んな検索ワードで検索してみたんですが発見できずにいます。。。
2.に関して、viewsはGroupByも使えるんですね。ありがとうございます。
一旦ViewsのGroupBy機能を調べて勉強してみます。
その上で、フォロー・フォロワー機能を実装できるモジュールについて、最終的にどのモジュールを採用するかが固まったらそれと絡めて試してみます。
お忙しい中大変恐縮ですが、宜しくお願い致します。
もう一歩で出来るのでは無いでしょうか。
はじめまして、anonyさん。私はdrupalをはじめて2週間の時は、インストールが出来ませんでした…。
確信を持っては言えませんが、anonyさんが紹介されたサイトの通りにflagとviewsで実現できるのでは
ないでしょうか?Flag followモジュールは使用しているサイト数が少ないので、ちょっと使用は不安ですね。
anonyさんが見つけられた、上記のサイトではこの様に書かれています。
And that’s how you do the followers tab. For the following tab, create another view, with basically the same parameters (the path and will be different, obvs), but the major differenct is with the Contextual Filter:
followingもfollowerと同様に基本的に同じパラメータを持つview作りますが、違いは2点。
①Path
②Contextual Fileter
Contextual Filterでfollowしている、されているを振り分けているみたいです。
画像貼れるのかな…?
flagとviewsで再挑戦してみたのですが...
kenppxさん、はじめまして。
ご助言ありがとうございます。
私の場合、Drupalのインストールの前にDrupalの仕組みについて大枠の概念等、色々質問できる友人や先生的存在の方がいましたので、立ちあがりは完全にその方々のおかげですのでたいへん恐縮です。
ところで、kenppxさんにご助言いただいて落ち着いて考えてみたんですが、現状flagとviewsのみではフォローユーザーの表示も実現できていませんでした。
どういうことかと申しますと、フォロー・フォロワー機能を実装しようと思ってインストールしているモジュールは以下の2つなんですが・・・
・flag follow
・flag
※「heartbeatモジュール」という、flag followモジュールを使用するために必要なモジュールもインストールしているのですが、説明をわかりやすくするためにここでは無視させていただきます。
・・・現状私がフォローユーザーの一覧表示を実現できているというのは、「flag followモジュールとviews」を使って実現できています。
対して先に紹介させていただいたサイトの説明では「flagモジュールとviews」を使って実現できると書いてあります。(※flag followモジュールは関係ない)
つまり、「flagモジュールとviewsを使って、フォローユーザーの一覧表示はできているがフォロワーユーザーの一覧表示はできていない」のではなくて、単に使っているモジュールが違うということでした。
上記を踏まえ、再度flagモジュールとviewsを使って(flag followモジュールは使わずに)フォロー・フォロワーの一覧表示にチャレンジしてみたんですが、やはりうまく行きません。
kenppxさんのご助言をポイントに参考サイトのとおりContextual Fileterやpathを設定してみたんですがダメでした。
すみません、実際に設定した内容の画面キャプチャを投稿したいのですが、このコメントからの画像投稿の方法がわかりません。。。
Flagモジュールで作成するflagの意味、viewsで設定するContextual Fileterの意味等がわかっていないので何をどう設定すればいいのかわからない状態ですね。
おそらくこれらの意味がわかればviewsで何をどうリレーションすればいいのかもわかってくると思うんですが...
現在このような状況ですので、もう少し調べてみます。
お忙しい中コメントしていただきありがとうございます。
何がどうダメなのか
kenppxさん、すみません。
何がどうダメなのか書いていませんでした。
フォロー・フォロワーの一覧表示をテストするのに、ユーザーを3ユーザー作りました。
・ユーザー1(admin権限)
・ユーザー2(認証済みユーザー)
・ユーザー3(認証済みユーザー)
上記ユーザーを作成した後に行ったことは以下のとおりです。
・参考サイトにあるようflagとviewsでfollowerとfollowingの各viewsを作成
・ユーザー1がユーザー2をフォロー
・ユーザー3がユーザー1をフォロー
上記の状態でユーザー1でサイトにログインし、ユーザー1が「フォローしているユーザー(ユーザー1)」「フォローされているユーザー(ユーザー2)」が表示されるかどうかを確認しました。
vewsのpathとMenuの設定で、各ユーザーのアカウント情報ページに「follower」タブ、「following」タブは表示できているのですが、followerタブにはなぜか「名前: 匿名ユーザー (未認証ユーザー)」と表示され、followingタブには何も表示されない、という状況です。
参考サイトの英訳で私が間違って解釈しているところもあるかもしれませんので、もう少し調べてみます。
また、もしフォロー・フォロワーの一覧表示を実現できる類似モジュールをご存じでしたら教えていただけるとありがたいです。
以上です。
viewsの画像を載せて頂くと良いかもしれません
imgタグが使えますので、他の場所にアップロードした画像をimgタグで挿入して頂けると画像が掲載できると思います。設定の問題点が分かるかもしれません。
ちょっと画像のテスト投稿させてください。
viewsの設定
kenppxさん、お忙しい中わざわざご返信ありがとうございます。
画像も貼れました!重ねてありがとうございます。
なぜか投稿がブロックされてしまうので、分割して投稿してみますね。
改めて再度テストを行ってみました。以下方法と結果です。
viewsの設定

※「follower」用のviewsの設定です。
※FlagモジュールのFlags設定は「タイトル」と「Global flagにチェックを入れる」以外は触っていません。
上記viewsの設定を踏まえ、以下の4ユーザーを用意(下記はそれぞれのユーザー名と権限です)
・admin(管理者権限)
・test1(認証済みユーザー)
・test2(認証済みユーザー)
・test3(認証済みユーザー)
上記ユーザーで以下を行いました。
・test1とtest2がadminをフォロー
・adminがテスト2をフォロー
・test1がtest3をフォロー
admin、test2、test3が他ユーザーからフォローされている状態です。
ここでviewsの設定画面を見ると、設定画面一番下のプレビューには、このviewsの設定で表示されるユーザーはadmin、test2、test3となっています。
つまり、「他ユーザーにフォローされているユーザー」であるadmin、test2、test3を引っ張ってきているようです。
「viewsの設定」の続きです。
次に各ユーザーのfollowerタブではどのように表示されるかの結果が以下のとおりです。
(viewsの「PAGE SETTINGS」で各ユーザーのアカウント情報ページに「follower」を作成しています)
・admin

[結果]adminが表示されている(自分が表示されている)
・test1

[結果]表示なし(おそらく誰からもフォローされていないため)
・test2

[結果]test2が表示されている(自分が表示されている)
・test3

[結果]test3が表示されている(自分が表示されている)
現状このような感じで、まとめますと・・・
・他ユーザーにフォローされているユーザーが検索されている。
・各ユーザーのページではフォローされているユーザー自身が表示されている。
・・・という状況で、やっぱりリレーションで検索条件がどうなって、どう検索しているがよくわかっていない状況です。
お忙しい中大変恐縮ですが、もし何かわかったらで結構ですのでご教授いただけるとありがたいです。
以上です。
Global flagについて
お返事が遅くなって申し訳ありません。一つ気づいた点なのですが、
今回のケースですと、ユーザー毎にそれぞれ個別のflagを持つ必要がありますよね。
そのため、『global flag』ではないのではないかと思います。
global flagのチェックを外してみてはいかがでしょうか?
例えばブログ記事をユーザーが個別に『お気に入りに追加』する機能をflagで作る場合は、
『お気に入りに追加』というflagを作ります。そして、そのフラグをglobalに設定はしません。
なぜかと言えば、Aさん、Bさん、Cさんのお気に入り記事はそれぞれ違いますから。
AさんはAさんが興味のある記事をお気に入りに追加するでしょうし、
BさんはBさんの、CさんはCさんの独自のお気に入りリストが作成される必要があります。
それぞれのユーザーのお気に入りはユーザー毎に独立させる必要があります。
今回のfollowに関しても、同様の事が言えるのではないかと思います。
それぞれのユーザーがfollowする人は違いますので、ユーザー毎に独立させる必要が
あるのではないかと思います。
followingは実現できました!
kenppxさん、こちらこそ返信が遅くなり申し訳ありません。
お忙しい中で目を通していただいておられるでしょうからすぐに返信が欲しいと思っているわけではないですし、ただただお気づかいに感謝しております。ありがとうございます。
さて、kenppxさんにいただいたアドバイスを元に色々試してみた結果、「自分がフォローしているユーザーの一覧(followingユーザーの一覧)」は実現できました。
kenppxさんのアドバイス通りglobalでないflagを作成した上で、以下viewsの設定で実現できました。

上記設定を元に、テスト用の4つのユーザーを使用して以下のテストを行いました。
・test1がtest2とtest3をフォローする。
・test3がtest2をフォローする。
以下上記テストの結果です。
・test1 → test2とtest3が表示されている

・test3 → test2が表示されている

Flagについて
「followingは実現できました!」の続きです。
上記テストで色々試してみたんですが、kenppxさんのおっしゃるとおり、「global設定なし」の場合ユーザー個別のflagになり、「global設定あり」の場合ユーザーを跨いだflagとなるようでした。
アドバイスありがとうございました!
というのも、上記テストを「global設定あり」で行った場合、test1のケースでは、test1のみがtest2をフォローしたにもかかわらず、test1だけではなくその他のユーザー全部(admin、test1、test2、test3)でtest2が表示されました。
ただ、「global設定なし」でも、viewsの「RELATIONSHIP」の設定が「current user」ではなく「any user」だと、「test1のみがtest2をフォローしたにもかかわらず、test1だけではなくその他のユーザー全部(admin、test1、test2、test3)でtest2が表示される」という結果でした。
まとめると以下のとおりです。
★global設定あり
・viewsの「RELATIONSHIP」の設定が「any user」
→test1のみがtest2をフォローしたにもかかわらず、test1だけではなくその他のユーザー全部(admin、test1、test2、test3)でtest2が表示される。
・viewsの「RELATIONSHIP」の設定が「current user」
→test1のみがtest2をフォローしたにもかかわらず、test1だけではなくその他のユーザー全部(admin、test1、test2、test3)でtest2が表示される。
★global設定なし
・viewsの「RELATIONSHIP」の設定が「any user」
→test1のみがtest2をフォローしたにもかかわらず、test1だけではなくその他のユーザー全部(admin、test1、test2、test3)でtest2が表示される。
・viewsの「RELATIONSHIP」の設定が「current user」
→要件どおりの表示で、test1のみ、test2とtest3が一覧表示される。
kenppxさんのアドバイスのおかげでflagの理解が一歩深めることができました!
私が見た参考サイトは忘れた方がよさそうですね。。。
一旦followingは実現できましたが、まだfollower(「自分を」フォローしているユーザーの一覧)は実現できておりませんので、引き続き色々調べてみますので、新たにわかったことがありましたら共有させていただきます。
また、follower実装で何かお気づきの点がありましたら、またお時間ありますときにご教授いただけるとありがたいです。
ありがとうございます。