sortiere Ansichten Kommentare nach Abstimmungsergebnis unter Beibehaltung des Threads

7

Ich möchte Kommentare von Knoten anzeigen, die nach Abstimmungsergebnis geordnet sind (beliebtester Kommentar oben in der Liste). Ich habe das Voting-API- , Rate- und Views- Modul installiert . Fügen Sie dann Kommentaren eine Ja / Nein-Abstimmung hinzu und aktivieren Sie das Threading für Kommentare, damit Benutzer sich gegenseitig antworten können.

Ich habe eine Ansicht erstellt, um Kommentare in der beliebtesten Reihenfolge mit den folgenden Sortierkriterien anzuzeigen:

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

Das Problem besteht nun darin, dass beim Versuch, den Thread beizubehalten, das Thema nach dem Post-Datum (ASC / Disc) sortiert wird und die zweiten Sortierkriterien nicht angezeigt werden.

Wie kann ich Kommentare nach Abstimmungsergebnissen sortieren und dabei das Threading fortsetzen?

BEARBEITEN: Ansichten config

shekoufeh
quelle
Können Sie einen Screenshot Ihrer Ansichtskonfiguration veröffentlichen?
Longboardnode
@ Longboardnode ja natürlich. Ich füge es meiner Frage hinzu
shekoufeh
Warum verwenden Sie Aggregation?
Kein Sssweat
1
@NoSssweat, weil ich die Summe der Abstimmungsergebnisse brauche. Das Problem ist davon nicht sicher betroffen.
Shekoufeh
Was passiert, wenn Sie entfernen Comment: Thread (asc)?
Kein Sssweat

Antworten:

2

Hauptproblem

Derzeit gibt es keine Möglichkeit, alle Kommentare von Kindern und Enkelkindern an den Hauptelternteil (Original / allererster Elternteil) zu binden. Benötigen Sie auch eine Möglichkeit, den Hauptelternteil von allen Kindern zu trennen.

TL, DR-Lösung

Verwenden Sie das Feldansichtsmodul Ansichten, um die untergeordneten Elemente vom übergeordneten Hauptelement zu trennen und alle untergeordneten Elemente als Feld hinzuzufügen. Auf diese Weise können wir die Haupteltern nach Stimmen sortieren, ohne die Kinder und Enkelkinder zu beeinträchtigen.

Es gibt jedoch keine Möglichkeit, nur alle Kinder und Enkelkinder einer Haupteltern-CID zu zeigen. Erstellen Sie daher ein benutzerdefiniertes Modul, um dieses Problem zu lösen, damit wir die Ansichtsfeldtechnik verwenden können.

Detaillierte Lösung

Anforderungen :

Ansichtsfeldansicht , Entitäts-API , Haupt-PID (benutzerdefiniertes Modul unten).


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;

  }

}

Fügen Sie nun in den Kommentaren ein neues Feld mit dem Namen Haupt-PID mit dem Computernamen von hinzu field_main_pid. Sie können dies programmgesteuert oder über die Drupal-Benutzeroberfläche tun (das überlasse ich Ihnen).

Geben Sie hier die Bildbeschreibung ein

Verstecken Sie nun das Feld vor der Anzeige

Geben Sie hier die Bildbeschreibung ein


Aus Ihrer Sicht:

Fügen Sie in Feldern hinzu Comment: Rendered Comment(Dank Entity API)

Geben Sie hier die Bildbeschreibung ein

Fügen Sie in Feldern hinzu Comment ID

Geben Sie hier die Bildbeschreibung ein


Fügen Sie nun einen neuen Block hinzu

Geben Sie hier die Bildbeschreibung ein

Klicken Sie auf Block und ändern Sie den Anzeigenamen

Geben Sie hier die Bildbeschreibung ein

In Feldern hinzufügen Depth

Geben Sie hier die Bildbeschreibung ein

Fügen Sie in Feldern hinzu Comment: Rendered Comment(Dank Entity API)

Geben Sie hier die Bildbeschreibung ein

Mit den Stileinstellungen können Sie die untergeordneten Elemente mit CSS einrücken.

Beispiel:

.depth-1 { width: 480px; margin-left: 10px; }
.depth-2 { width: 470px; margin-left: 20px; }

Fügen Sie unter Filterkriterien hinzu Content: Main PID

Geben Sie hier die Bildbeschreibung ein

Nur der Hauptelternteil hat eine PID von 0, daher werden nur alle Kinder angezeigt

Fügen Sie dann Content: ThreadSortieren und Main PIDKontextfilter hinzu

Ihre Kinderansicht sollte also folgendermaßen aussehen:

Geben Sie hier die Bildbeschreibung ein


Zurück zur ersten Ansicht :

Fügen Sie unter Filterkriterien die Haupt-PID hinzu

Geben Sie hier die Bildbeschreibung ein

Diesmal gleich 0, da wir nur die Haupteltern wollen.

Fügen Sie nun in Felder hinzu Global: View(Dank Ansichten Feldansicht)

Geben Sie hier die Bildbeschreibung ein

Ihre Original- / Hauptansicht sollte folgendermaßen aussehen:

Wichtig: Fügen Sie hier einen Kontextfilter für NID hinzu (haben Sie das vergessen).

Geben Sie hier die Bildbeschreibung ein

Zuletzt fügen Sie unter Sortierkriterien das hinzu Votes Value(wird auf dem Screenshot nicht angezeigt, da ich mich nicht um die Installation von Voting API und Rate gekümmert habe) und entfernen Sie die Standardeinstellung Post date.

Kein Sssweat
quelle
Vielen Dank für Ihre vollständige Antwort. Es gibt zwei Probleme: Erstens funktioniert das Voting-API-Modul nicht, wenn ich nacheinander Felder in Ansichten hinzufüge. Ich meine, es funktioniert nur, wenn ich gerenderte Entitäten verwende. Zweitens kann ich Kommentaren kein Feld hinzufügen, da ich drei Registerkarten habe, in denen Kommentare nach ältesten, neuesten und beliebtesten sortiert sind. Die Sammlung von Anforderungen schränkt mich ein und macht mich verrückt.
Shekoufeh
@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 entityaber in meiner Antwort Comment: Rendered Commentrendert das Feld die Entität (Kommentar) ... (es ist nicht erforderlich, Felder einzeln , Titel, Text usw. hinzuzufügen), daher sollte es auch hier funktionieren. Hast du meine Antwort ausprobiert? Second, I can not add a field to comments because I have three tabs sorting comments by oldest, newest and most popular.Auf Ihrem Screenshot sehe ich dies nicht. Warum wirkt sich das Hinzufügen eines Felds auf Ihre Registerkarte aus?
Kein Sssweat
Wie haben Sie die Haupt-PID im Kontextfilter eingestellt? Setzen Sie es auf der Einstellungsseite des Kontextfilters auf "Alle Ergebnisse für das angegebene Feld anzeigen".
Shekoufeh
@ Shekoufeh yep.
Kein Sssweat
1
Die ursprüngliche Liste der Kommentare benötigt einen Kommentar: nid, um die Kommentare jedes Knotens von sich selbst anzuzeigen.
Shekoufeh