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

建立follow flag

安装flag

drush pm-download flag
drush pm-enable -y 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)
)

flag views
把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
)

flag views
也许有人会觉得奇怪,为什么要选Flags: Content ID?并没有node参与。其实在flag的表结构中,被flag的对象叫entity ID,这个对象可以是任意类型,node、 user、 file都可以,但views里却称为Content ID,所以很容易让人误解为node ID。

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

粉丝总数

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

猫之良品
2.5k 声望139 粉丝

资深Drupal, magento与Joomla


引用和评论

0 条评论