跳转到主要内容
Hello

主导航

  • 首页
用户帐户菜单
  • 登录

面包屑

  1. 首页

Drupal 实现自定义统计功能/statistics

由 Administrator, 20 八月, 2025

Drupal有自带的统计模块Statistics(默认未启用),但Statistics模块只能统计每个节点的浏览次数,无法统计页面浏览和浏览的详细记录(哪个用户在什么时间通过什么设备浏览)。如果想实现详细统计功能可以使用GoogleAnalytics或matomo模块,但这两个模块都是需要别的系统结合来实现,且无法真正自定义统计和按每个节点的浏览次数排名。

功能实现

1:每次浏览节点、页面都能形成统计记录(节点、页面、实体、设备、时间、IP......)。

2:统计记录里实现节点或实体(entity)关联。

3:记录用户的浏览行为(含登录用户和非登录用户)。

4:......

需要模块

1:ECA(https://www.drupal.org/project/eca):rules模块升级版,相对于rules来说功能更强、响应更快。但学习曲线ECA比rulus要高。

2:eca_tamper(https://www.drupal.org/project/eca_tamper):ECA模块的增强功能,对于本文需要主要是实现数值计算MATH。

3:Tamper(https://www.drupal.org/project/tamper):eca_tamper模块的依赖。

//安装模块步骤:composer方式安装:1-3-2

安装完ECA后直接安装eca_tamper会报错(当前版本原因),所以需要先安装ECA,再安装依赖Tamper,最后安装eca_tamper。

注意事项

本文统计记录基于rest api post实现,我是drupal对接的小程序。所以使用rest的方式生成统计记录。如果纯WEB方式也可以,比如在js中使用axios post浏览记录。都是一个道理。

实现过程

1.前提内容

内容类型:article(文章)新增一个字段 机读名称field_view,名称随意,字段类型为整数,默认为0。这个字段主要是每当用户浏览一次这个文章,数值就在现在的数值基础上自增1。

区块:/admin/structure/block-content新增一个区块类型:机读名称statistics,名称随意,新增机读名称field_node字段,字段类型:实体引用,引用类型:内容,内容类型可以勾选文章或全不选。(想实现详细统计还可以加 用户字段、设备字段、IP字段、链接字段、来源字段)

2.过程示意

用户浏览内容-->形成statistics区块记录-->ECA处理-->field_view数值自增

3.具体实现

ECA 图形化核心概念:

  • 圆形 (Event): 代表流程的开始和事件。
  • 菱形 (Gateway): 代表判断条件(IF 语句)。
  • 圆角矩形 (Task): 代表要执行的具体动作。

1:新建模型:在ECA中新建一个模型,模型的Name自己设置,ID可以自己设置也可以系统生成。

2:事件:建立事件:拖入一个圆形,点击圆形,Template中选择【内容区块:statistics】代表每当statistics内容区块新增一条记录就触发此事件;

3:判断:建立判断:点击圆形,点击圆形旁边的菱形(或直接点击左侧菜单中的菱形拖入到面板中,用箭头连接),生成判断流程,生成后的菱形中间有个X。

4:动作:获取内容实体:点击上面的菱形生成矩形,点击矩形,Template中选择【Entity: get field value】,然后字段名称那里填入【field_node】,Name of token这里填入【target_node】,实体这里填入【entity】。这一步意思是:根据圆形的事件获取对应的field_node字段对应的内容,并存储为token:target_node,以备后续使用。

5:动作:计算内容:点击上一步的矩形动作,生成新的矩形动作,点击新的矩形,选择【Tamper: Math】,Data to be tampered里填入【[target_node.field_view.value]】,操作选择默认【addition】即可,值/value里填入【1】,Result token name里填入【current_count】。这一步的意思是:通过[target_node.field_view.value]获取上一步的对应内容的field_view.字段的值并+1。+1后的值存储为token:current_count,以备后续使用。

6:动作:更新新的field_view数值并保存:点击上面的菱形生成矩形,点击矩形,Template中选择【Entity: set field value】,方式这里不变,字段名称填入【field_view】,字段值/Field value里填入【[current_count]】,保存实体/save entity里填入选择【yes】。这一步的意思是:获取上一步计算后的current_count并赋值给field_view,并保存。

 

至此简化版的统计内容且更新浏览次数的功能已经实现了,在实际应用中,可能还需要在比如第三步的菱形那里后面的箭头选择执行条件:比如statistics区块记录的field_node必须有值才进行后续,否则中断流程。等其他条件。

 

标签

  • drupal
  • 登录或注册以发表评论

评论

RSS源
Powered by Drupal