主な問題
現在、すべての子と孫のコメントをメインの親(元の/最初の親)に関連付ける方法はありません。また、メインの親をすべての子から分離する方法が必要です。
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;
}
}
コメントで、マシン名がのMain PIDという新しいフィールドを追加しますfield_main_pid
。これはプログラムで、またはDrupal UIを使用して行うことができます(これはあなたにお任せします)
次に、フィールドを表示から非表示にします
あなたの見解では:
フィールドにComment: Rendered Comment
(Thanks to Entity API)を追加します
フィールドに追加 Comment ID
新しいブロックを追加します
ブロックをクリックして、表示名を変更します
フィールドに追加 Depth
フィールドにComment: Rendered Comment
(Thanks to 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
。