我们在给客户定制的文件下载模块里面,客户想对资源进行统计,我们使用了views。不过统计总计的数据库表里面:
我们使用了resource_type,resource_id两个字段存储关联关系,这样模块可以支持多个资源实体类型。一个资源对应一个实体类型。
但是views自身并不直接支持这样的动态的关联。我们尝试了一下,通过自定义代码可以搞定:
/**
* Implements hook_views_data().
*/
function mydownload_views_data() {
$data['mydownload_count']['table']['group'] = t('Download statistics');
$resource_types = mydownload_get_resource_types();
foreach($resource_types as $resource_type){
$data['mydownload_count']['table']['join'][$resource_type] = [
'left_field' => 'id',
'field' => 'id',
'extra' => [
0 => [
'field' => 'type',
'value' => $resource_type,
],
],
];
}
...
}
我开始用的单个的资源类型,尝试了一个关联,可以工作,在此基础上改造成了动态的。