Php 根据具有多个标志的节点的总标志计数对Drupal 6视图进行排序
我正在使用Drupal 6,在我的节点上有多个标志,每个标志都有一个值,例如:有趣、无聊、聪明、有趣、滥用等。视图当前可以根据每个标志的标志计数对结果进行排序,但我需要根据每个注释上所有标志的总组合标志计数对节点进行排序。“rate”模块非常接近于这样做,但是我需要使用flag模块,这样我就可以使用flag solr模块来允许按flag进行搜索。我真的不知道从哪里开始。。。关于我可以采取的方法有什么建议吗 这是当前视图查询Php 根据具有多个标志的节点的总标志计数对Drupal 6视图进行排序,php,sorting,drupal-6,drupal-modules,drupal-views,Php,Sorting,Drupal 6,Drupal Modules,Drupal Views,我正在使用Drupal 6,在我的节点上有多个标志,每个标志都有一个值,例如:有趣、无聊、聪明、有趣、滥用等。视图当前可以根据每个标志的标志计数对结果进行排序,但我需要根据每个注释上所有标志的总组合标志计数对节点进行排序。“rate”模块非常接近于这样做,但是我需要使用flag模块,这样我就可以使用flag solr模块来允许按flag进行搜索。我真的不知道从哪里开始。。。关于我可以采取的方法有什么建议吗 这是当前视图查询 SELECT node.nid AS nid, flag_counts
SELECT node.nid AS nid,
flag_counts_node.count AS flag_counts_node_count,
flag_counts_node_1.count AS flag_counts_node_1_count,
flag_counts_node_2.count AS flag_counts_node_2_count,
flag_counts_node_3.count AS flag_counts_node_3_count,
flag_counts_node_4.count AS flag_counts_node_4_count FROM node node
LEFT JOIN flag_counts flag_counts_node ON node.nid = flag_counts_node.content_id AND flag_counts_node.fid = 7
LEFT JOIN flag_counts flag_counts_node_1 ON node.nid = flag_counts_node_1.content_id AND flag_counts_node_1.fid = 6
LEFT JOIN flag_counts flag_counts_node_2 ON node.nid = flag_counts_node_2.content_id AND flag_counts_node_2.fid = 4
LEFT JOIN flag_counts flag_counts_node_3 ON node.nid = flag_counts_node_3.content_id AND flag_counts_node_3.fid = 5
LEFT JOIN flag_counts flag_counts_node_4 ON node.nid = flag_counts_node_4.content_id AND flag_counts_node_4.fid = 3
WHERE (node.type in ('rpodcast', 'upodcast')) AND (node.status = 1) ORDER BY flag_counts_node_count ASC, flag_counts_node_1_count ASC, flag_counts_node_2_count ASC, flag_counts_node_3_count ASC, flag_counts_node_4_count ASC
这里是到目前为止的模块代码
<?php
function flagcountview_views_pre_execute(&$view){
if ($view->name == 'audio') {
$sql = $view->build_info['query'];
$flag_count = "flag_counts_node.count + flag_counts_node_1.count + flag_counts_node_2.count + flag_counts_node_3.count";
$sql .= "ORDER BY $flag_count DESC";
$view->build_info['query'] = $sql;
}
}
考虑到您已经在视图中添加了所有标志关系和标志计数,最好使用视图预执行来添加所有计数和排序
更新
希望您已经在关系和字段中添加了所有标志计数。。现在在代码中添加'
function MODULENAME_views_pre_execute(&$view){
$sql = $view->build_info['query'];
$flag_count = flag_counts_node_count + flag_counts_node_1_count + flag_counts_node_2_count + flag_counts_node_3_count + flag_counts_node_4_count;
$sql .= " ORDER BY $flag_count ASC";
$view->build_info['query'] = $sql;
}
重要
- 确保已从“排序条件”中删除所有
- 确保您添加了
“字段”中的所有标志计数
您好,您似乎无法添加字段,因此我们可以尝试其他方法
function flagcountview_views_pre_execute(&$view){
if ($view->name == 'audio') {
$sql = $view->build_info['query'];
$search = "ORDER BY flag_counts_node_count ASC, flag_counts_node_1_count ASC, flag_counts_node_2_count ASC, flag_counts_node_3_count ASC, flag_counts_node_4_count ASC";
$replace = "ORDER BY flag_counts_node.count + flag_counts_node_1.count + flag_counts_node_2.count + flag_counts_node_3.count ASC";
$sql = str_replace($search, $replace, $sql);;
$view->build_info['query'] = $sql;
}
}
确保在视图->排序条件:)中添加了所有标志计数。我不确定从何处开始…是否有可能出现一些示例代码?我不清楚“”位。我试着使用;您可以在问题中复制当前视图查询吗?所以我可以引导你谢谢你的帮助!我现在添加了视图查询。请在标志排序中包含所有标志计数,然后将查询粘贴到此处