2012-07-30 55 views
2

我使用Drupal的6和對我的節點多個標誌每一個值,如:有趣的,無聊的,聰明的,有趣的,辱罵性的,等意見是目前能夠通過每個單獨標誌的標誌計數對結果進行排序,但是我需要按照每個音符上所有標誌的總組合標誌計數對我的節點進行排序。 'rate'模塊相當接近這樣做,但我需要使用flag模塊,以便我可以使用flag solr模塊來允許通過標誌進行搜索。我真的不知道從哪裏開始...對於我可以採取的方法有什麼建議?排序總標誌一個Drupal 6視圖計數節點帶有多種標誌

這裏的當前觀點查詢;

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

回答

2

嗨好像你不能添加字段,所以我們可以嘗試備用方法

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

確保您添加的所有標誌計數視圖 - >排序標準:)

1

考慮您已經添加在視圖中的所有標誌的關係,標誌數,它有良好的可使用視圖前執行添加所有計數和排序

更新

希望你已經添加的所有標誌算上relatioship和領域..現在的代碼添加'

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

重要

  • 請確保您所有的「分類標準」
  • 刪除確保您在添加 所有標誌計數「字段」
+0

我不知道在哪裏送撻......一些示例代碼的機會? – Meggy 2012-07-31 10:24:45

+0

我不清楚'<添加所有計數>'位。我試過使用; <?PHP函數flagcountview_views_pre_execute(&$視圖){ 如果($視圖 - >名== '音頻'){$ SQL = $視圖 - > build_info [ '查詢']; $ flag = flag_get_flag('funny')or die('no「funny」flag「); $ flag_count = $ flag-> get_count($ node-> nid); $ sql。=「ORDER BY $ flag_count ASC」; $ view-> build_info ['query'] = $ sql; }} 道歉 – Meggy 2012-08-01 14:36:48

+0

不理解如何正確格式化這些評論... – Meggy 2012-08-01 14:39:53