php - 按具有多个标志的节点的标志总数对 Drupal 6 View 进行排序

标签 php sorting drupal-6 drupal-modules drupal-views

我正在使用 Drupal 6,并且我的节点上有多个标志,每个标志都有一个值,例如:有趣、无聊、聪明、有趣、滥用等。Views 目前能够按每个单独标志的标志计数对结果进行排序,但是我需要根据每个音符上所有标志的总组合标志计数对节点进行排序。 “rate”模块非常接近这样做,但我需要使用 flag 模块,以便我可以使用 flag solr 模块来允许按标志搜索。我真的不知道从哪里开始......关于我可以采取的方法有什么建议吗?

这是当前的 View 查询;

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 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;
  }
}

确保您在 View -> 排序条件中添加了所有标志计数:)

关于php - 按具有多个标志的节点的标志总数对 Drupal 6 View 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11728986/

相关文章:

php - 如何选择 ORM

javascript - 如何在更改 zend 框架布局中的页面时添加 css 类(active)

string - 如何生成用于对相似文本短语进行排序的值?

drupal - 为匿名用户和登录用户显示不同的内容

session - 如何在 Drupal 中将值设置到 cookie 或 session 中

php - Drupal 以编程方式删除节点类型和/或 cck 字段

php - Symfony 模板 - 包括 css

php - 如何允许 php 文件仅由站点调用,而不是通过 Inspect Element 或 URL 调用

Java:移位/旋转对象数组

java - 数组越界 [ArrayList 的冒泡选择]