日期:2015-07-14 阅读:3248
dmandwp系统 - wordpress系统和DM系统区块建站>>
详情见: 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();
--------------------------------