スレッドの結果を保持する投票結果によってビューのコメントを並べ替える


7

投票結果順に並べられたノードのコメントを表示したい(リストの一番上にある最も人気のあるコメント)。投票APIレートビューモジュールをインストールしました。次に、yes / no投票をコメントに追加し、コメントのスレッド化を有効にして、ユーザーがお互いに返信できるようにします。

以下のソート基準を使用して、コメントを最も一般的な順序で表示するビューを作成しました。

Comment: Thread (asc)
SUM(Votes: Value)

ここで問題は、ビューがスレッドを維持しようとすると、テーマを投稿日(asc / disc)でソートし、2番目のソート基準が表示されないことです。

では、スレッドを維持したまま投票結果でコメントを並べ替えるにはどうすればよいですか?

編集: ビュー構成


ビュー構成のスクリーンショットを投稿できますか?
longboardnode 2017年

@longboardnodeはい、もちろんです。私はそれを私の質問に追加します
shekoufeh 2017年

なぜ集約を使用するのですか?
Sssweatなし17

1
@NoSssweat投票結果の合計が必要なため。確かに問題には影響しません。
shekoufeh 2017

削除するとどうなりますComment: Thread (asc)か?
Sssweatなし17

回答:


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;

  }

}

コメントで、マシン名がの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


あなたの完全な答えをたくさんありがとう。2つの問題があります。最初に、ビューにフィールドを1つずつ追加すると、投票APIモジュールが機能しません。つまり、レンダリングされたエンティティを使用するときだけ機能します。次に、コメントを古い順、新しい順、人気順でソートする3つのタブがあるため、コメントにフィールドを追加できません。したがって、要件のコレクションは私を制限し、それは私を夢中にさせています。
シェコウフェ2017

@shekoufehですI add fields in views one by one the vote API module does not work. I mean it works just when I use rendered entityが、私の答えでは、Comment: Rendered Commentフィールドはエンティティ(コメント)をレンダリングします(タイトル、本文など、フィールドを1つずつ追加する必要はありません)。したがって、ここでも機能するはずです。私の答えを試してみましたか?Second, I can not add a field to comments because I have three tabs sorting comments by oldest, newest and most popular.スクリーンショットではこれが表示されませんが、フィールドを追加するとタブに影響するのはなぜですか?
Sssweatなし2017

コンテキストフィルターでメインPIDをどのように設定しましたか?コンテキストフィルター設定ページで「指定したフィールドのすべての結果を表示する」に設定しますか?
shekoufeh 2017

@shekoufehうん。
Sssweatなし2017

1
コメントの元のリストには、各ノードのコメントを表示するためにcomment:nidが必要です。
shekoufeh 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.