Drupal API

Drupal 实现好友关注/收听(follow)功能,显示关注列表和粉丝列表

日期:2015-07-14 阅读:1435

 详情见:    http://segmentfault.com/a/1190000002527304 

 

flag module为实现entity对entity之间的一对多关系提供数据结构与API,其用途很广泛,例如用户想收藏某个文章,其实也就是一个用户(user)对多篇文章(node)。关注功能就是用户与用户之间的一对多关系。

建立follow flag

添加一个Flag type = User的flag并取命为follow,配置如下所示:
flag setup
完成以后大概能在登录状态访问user profile page时看到“关注”的按钮。


建立关注列表

flag对views的支持很好,可以直接使用views制作用户所关注的用户列表与用户的粉丝列表

先建立一个type是user的views (block)
对views进行以下设置,必须按顺序

RELATIONSHIPS
- Flags: User (
    Identifier:flag
    Include only flagged content:No
    Flag:follow
    By:Any user
)

CONTEXTUAL FILTERS
- Flags: User uid (
    Relationship:flag
    WHEN THE FILTER VALUE IS NOT AVAILABLE
    -   Provide default value (User ID form URL)
)
 
把views block放置到user profile page里就完成了,当该用户关注了其他用户,就会列出在此列表上。


建立粉丝列表

同样需要先建立一个type是user的views (block)
对views进行以下设置,必须按顺序

RELATIONSHIPS
-  Flags: User's flaggings (
    Identifier:user flagged content
    Include only users who have flagged content:No
    Flagged:follow
)

CONTEXTUAL FILTERS
- Flags: Content ID (
    Relationship:user flagged content
    WHEN THE FILTER VALUE IS NOT AVAILABLE
    - Provide default value:User ID From URL
)
 
也许有人会觉得奇怪,为什么要选Flags: Content ID?并没有node参与。其实在flag的表结构中,被flag的对象叫entity ID,这个对象可以是任意类型,node、 user、 file都可以,但views里却称为Content ID,所以很容易让人误解为node ID。

保存之后生成的block放置到user profile page,关注此用户的用户列表就被创建了。

 

粉丝总数

db_select('flagging', 'f')
    ->condition('f.entity_type', 'user')
    ->condition('f.fid', $fid) // follow flag的ID
    ->condition('f.entity_id', $uid)
    ->countQuery()
    ->execute()
    ->fetchField();

--------------------------------

 

<<点击返回

Drupal7视频教程 Drupal7主题 Drupal7最新文档 Drupal7推荐文档