it-swarm.com.de

Sortieren von Kommentaren vom neuesten zum ältesten

Wie soll ich Drupal 8 konfigurieren, um Kommentare vom neuesten zum ältesten zu sortieren, ähnlich wie das Modul Comment Goodness in Drupal 7) ?

7
pooceger

Wie CommentStorage::loadThread fügt hinzu comment_filter Tag zu seiner Abfrage können Sie hook_query_TAG_alter Hook zum Ändern der Kommentarreihenfolge:

/**
 * Implements hook_query_TAG_alter() for comment_filter tag.
 *
 * @see CommentStorage::loadThread().
 */
function mymodule_query_comment_filter_alter(Drupal\Core\Database\Query\AlterableInterface $query) {
  // Change comment order to DESC for 'comment' field.
  if ($query->getMetaData('field_name') == 'comment') {
    /** @var \Drupal\Core\Database\Query\SelectInterface $query */
    $order_by = &$query->getOrderBy();
    // 'c.cid' is for flat comment lists.
    if (isset($order_by['c.cid']) && $order_by['c.cid'] == 'ASC') {
      $order_by['c.cid'] = 'DESC';
    }
    // 'torder' is for threated comment lists.
    if (isset($order_by['torder']) && $order_by['torder'] == 'ASC') {
      $order_by['torder'] = 'DESC';
    }
  }
}
5

Angenommen, der Computername Ihres Kommentarfelds lautet field_comments, fügen Sie diesen Code in ein Modul ein, um absteigende Kommentare zu erhalten. Ich hatte Probleme mit Thread-Kommentaren, aber dies funktioniert, da es die Abfrage durch die c.thread-Datenbankspalte ändert, anstatt nur 'torder'.

/**
 * Implements hook_query_TAG_alter() for comment_filter tag.
 *
 * @see CommentStorage::loadThread().
 */
function MYMODULE_query_comment_filter_alter(Drupal\Core\Database\Query\AlterableInterface $query) {

  // Change comment order to DESC for 'comment' field.
  if ($query->getMetaData('field_name') == 'field_comments') {

    $order_by = &$query->getOrderBy();
    $expressions = &$query->getExpressions();
    // Sorting for threaded comments.
    if (isset($order_by['torder']) && $order_by['torder'] == 'ASC') {
      // Get rid of the expressions that prepare the threads for ASC ordering.
      unset($expressions['torder']);
      unset($order_by['torder']);
      // Simply order by the thread field.
      $order_by['c.thread'] = 'DESC';
    }

  }

}
4
echo

Sie können eine Kommentaransicht erstellen und dort sortieren.

2
No Sssweat

Für Drupal 8) können Sie das nächste Modul verwenden: Kommentarreihenfolge.

Link: https://www.drupal.org/project/comments_order

Dieses Modul bietet die Möglichkeit, die Reihenfolge der Kommentare (Sortierfunktion) in Drupal 8.) zu ändern. Sie können die Reihenfolge der Kommentare (neueste zuerst oder älteste zuerst) pro Knotentyp auswählen und Ihr Kommentartypfeld unter "Felder verwalten" bearbeiten "Registerkarte (Seite zur Verwaltung des Knotentyps).

Nicht nur flach, sondern auch in Gewindedisplay! Wenn Sie die Thread-Anzeige verwenden, können Sie auswählen, wie untergeordnete Kommentare sortiert werden sollen. Beispiele unten.

1
Kirill Loboda

core/modules/comment/src/CommentStorage.php Zeile 302. Ich denke, der einzige Weg ist, den Core zu hacken! & nur für FLAT Modul.

    if ($mode == CommentManagerInterface::COMMENT_MODE_FLAT) {
  $query->orderBy('c.cid', 'DESC');
}
else {
  // See comment above. Analysis reveals that this doesn't cost too
  // much. It scales much much better than having the whole comment
  // structure.
  $query->addExpression('SUBSTRING(c.thread, 1, (LENGTH(c.thread) - 1))', 'torder');
  $query->orderBy('torder', 'ASC');
}
0
bluesky_still