2

Drupal 6を使用していて、ノードに複数のフラグがあり、それぞれに次のような値があります:興味深い、退屈な、インテリジェントな、面白い、虐待的ななど。ビューは現在、個々のフラグのフラグ数で結果を並べ替えることができますが、各ノートのすべてのフラグの合計フラグ数でノードを並べ替えます。'rate'モジュールはこれを行うのにかなり近いですが、flag solrモジュールを使用してフラグによる検索を可能にするために、flagモジュールを使用する必要があります。どこから始めればいいのかわからない...私がとることができるアプローチについて何か提案はありますか?

現在のビュークエリは次のとおりです。

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

2 に答える 2

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

ビューにすべてのフラグカウントを追加したことを確認してください->並べ替え基準:)

于 2012-08-09T04:30:05.353 に答える
1

ビューにすべてのフラグ関係とフラグカウントをすでに追加していることを考えると、実行前のビューを使用してすべてのカウントを追加し、並べ替えることができます。

アップデート

関係とフィールドにすべてのフラグカウントをすでに追加していることを願っています。

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

重要

  • 'ソート基準'からすべてを削除したことを確認してください
  • 'フィールド'にすべてのフラグカウントを追加したことを確認してください
于 2012-07-31T06:47:26.820 に答える