投票結果順に並べられたノードのコメントを表示したい(リストの一番上にある最も人気のあるコメント)。 投票API 、 rate および views モジュールをインストールしました。次に、yes/no投票をコメントに追加し、コメントのスレッド化を有効にして、ユーザーが互いに返信できるようにします。
以下のソート基準を使用して、最も一般的な順序でコメントを表示するビューを作成しました。
Comment: Thread (asc)
SUM(Votes: Value)
ここで問題は、ビューがスレッドを維持しようとすると、テーマを投稿日(asc/disc)でソートし、2番目のソート基準が表示されないことです。
では、スレッド結果を維持したまま投票結果でコメントを並べ替えるにはどうすればよいですか?
主な問題
現在、すべての子供と孫のコメントをメインの親(元の/初めての親)に関連付ける方法はありません。また、メインの親をすべての子から分離する方法が必要です。
TL、DRソリューション
ビューフィールドビューモジュールを使用して、子をメインの親から分離し、すべての子をフィールドとして追加します。このようにして、子供や孫に影響を与えることなく、主要な親を投票で並べ替えることができます。
ただし、メインの親CIDのすべての子と孫を表示する方法はありません。したがって、この問題を解決するカスタムモジュールを作成して、フィールドテクニックを使用できるようにします。
要件:
ビューフィールドビュー 、 エンティティAPI 、メインPID(以下のカスタムモジュール)。
main_pid.info
name = Main PID
description = Links all children and grandchildren comments to the main parent by saving main parent cid into main_parent_pid field when comment is saved.
package = custom
core = 7.x
main_pid.module
<?php
/**
* Implements hook_comment_presave()
*/
function main_pid_comment_presave($comment) {
$pid = $comment->pid;
if ($pid > 0){
while ($pid > 0) {
// Implements comment_load()
$load_comment = comment_load($pid);
$pid = $load_comment->pid;
$cid = $load_comment->cid;
}
$comment->field_main_pid[LANGUAGE_NONE][0]['value'] = $cid;
}
elseif ($pid == 0) {
$comment->field_main_pid[LANGUAGE_NONE][0]['value'] = 0;
}
}
コメントに、マシン名がfield_main_pid
のMain PIDという新しいフィールドを追加します。これはプログラムで、またはDrupal UIを使用して行うことができます(これはあなたにお任せします)
次に、フィールドを表示しないようにします
あなたの見解:
フィールドにComment: Rendered Comment
を追加します(Entity APIに感謝)
フィールドにComment ID
を追加します
新しいブロックを追加します
ブロックをクリックして、表示名を変更します
フィールドにDepth
を追加します
フィールドにComment: Rendered Comment
を追加します(Entity APIに感謝)
スタイル設定では、CSSを使用して子をインデントできます。
例:
.depth-1 { width: 480px; margin-left: 10px; }
.depth-2 { width: 470px; margin-left: 20px; }
フィルター基準で、Content: Main PID
を追加します
メインの親のみPIDが0であるため、すべての子のみが表示されます
次に、Content: Thread
をソートに追加し、Main PID
をコンテキストフィルターに追加します
したがって、Children Viewは次のようになります。
最初のビューに戻る:
フィルター基準にメインPIDを追加します
今回はメインの親だけが必要なので、0に等しくなります。
次に、フィールドにGlobal: View
を追加します(ビューフィールドのおかげでビュー)
あなたのオリジナル/メインビューは次のようになります:
重要:NIDのコンテキストフィルターをここに追加します(これを行うのを忘れていました)。
最後に、並べ替え基準でVotes Value
を追加し(私は投票APIとレートをインストールする必要がなかったため、スクリーンショットには表示されていません)、デフォルトのPost date
を削除します。