別の質問の助けを借りて:ビューで各分類用語の最新ノードを表示する必要なビューを作成できましたが、各用語のすべての投稿が表示されます(用語ごとにグループ化されます)?各用語を最新の投稿のうち3つだけを表示するように制限するにはどうすればよいですか。
例えば
期間1-
投稿1-
投稿2-
投稿3
期間2-
投稿1-
投稿2-
投稿3
期間3-
投稿1-
投稿2-
投稿3
別の質問の助けを借りて:ビューで各分類用語の最新ノードを表示する必要なビューを作成できましたが、各用語のすべての投稿が表示されます(用語ごとにグループ化されます)?各用語を最新の投稿のうち3つだけを表示するように制限するにはどうすればよいですか。
例えば
期間1-
投稿1-
投稿2-
投稿3
期間2-
投稿1-
投稿2-
投稿3
期間3-
投稿1-
投稿2-
投稿3
回答:
必要なノードが1つだけの場合は、「代表ノード」関係を使用できます。ただし、各用語ごとに3つのノードが必要な場合は、ビューフィールドビューなどを使用します。
1)コンテンツの「子」ビューを作成します。このようなもの:
分類用語の引数、ポケットベルの制限、ソートなどを追加します。
これで、このビューを別のビューに添付できます。
2)分類法ビューを作成します。
非表示の用語IDフィールドを追加してから、「Global:View」フィールドを追加します。
キャッシングを設定することを忘れないでください。以下からのビューフィールドを表示ページ:
このモジュールをビューのキャッシュと組み合わせて使用することを強くお勧めします。ビューコンテンツキャッシュとキャッシュアクションは、ビューをキャッシュする良い方法です。
さらに調査すると、Peek Summaryはまさにあなたが望むものであるように思われます。ドキュメントのスクリーンショットはDrupal 6用であり、Drupal 7では若干異なるため、更新されたスクリーンショットを添付しました。
制限するグループごとにページャーを編集する必要がありますが、これは残念です。1つのグループのポケットベルを編集すると、すべてのグループの設定が変更されます。グループの総数とは異なるグループごとのノードの数を表示したい場合は、「コンテキストフィルター」の下の「フォーマット」設定(紫色の最初のスクリーンショット)でそれをオーバーライドします。
基本的に[n]グループの[n]ビューを作成するというデメリットがあります。これは、使用するグループの数によってはパフォーマンスの問題になる可能性がありますが、クエリは表示するセットのみに制限されます。ユースケースによっては、これによりパフォーマンスが向上する場合があります。いつものように、責任を持ってキャッシュしてください。
コードでこれを制限する方法は、次のようなものをカスタムモジュールに追加することです。
function custom_views_pre_render(&$view) {
//get the rows from the view just before render
$results = $view->result;
//create a counter
$count = '';
//we're going to built up a new $result array
$new_results = array();
//iterate through each view row
foreach($results as $result) {
//find the taxonomy term
$term = $result->taxonomy_term_data_name;
//add the term to a string of all the terms we've seen so far
$count .= $term;
//make sure to separate them with spaces to make them easier to count
$count .= ' ' ;
//count how many rows have the same term as the current one
$term_count = array_count_values(str_word_count($count, 1));
if($term_count[$term] <= 3){
//if this is the third or fewer row with this term, add it to the new result array
$new_results[] = $result;
}
}
//instead of the normal view output, only show the results we put in our array.
$view->result = $new_results;
}
これは、関係を介してノードに接続されている分類用語のビュー用です。ノードのビューだけがある場合、走行距離は異なる場合があります。
用語ごとに3つ以上の表示はできませんが、これはクエリが各用語のすべての結果を返すことを妨げないため、SQLのパフォーマンスはまったく向上しません。用語ごとに非常に多くの結果がある場合、CTools Page Managerのようなものを使用して、個別のビューパネル表示を作成し、それらをすべて1つの領域に配置して、巨大なクエリを実行しないようにします。
いつものように、実稼働環境でこのようなものをキャッシュしたいと思うでしょう。
Hook_views_pre_build()
またはhook_build_pre_execute()
パフォーマンスヒットを減らすこのようなものに使用できるかもしれませんが、私はそれらに精通していません。または、前にこの質問に対する私の答えが好きかもしれません。