Wie sollte ich Drupal 8 so konfigurieren, dass Kommentare vom neuesten zum ältesten sortiert werden, ähnlich wie das Modul " Kommentargüte" in Drupal 7?
Wie sollte ich Drupal 8 so konfigurieren, dass Kommentare vom neuesten zum ältesten sortiert werden, ähnlich wie das Modul " Kommentargüte" in Drupal 7?
Antworten:
Wenn Sie der Abfrage ein Tag CommentStorage::loadThread
hinzufügen comment_filter
, können Sie den hook_query_TAG_alter
Hook verwenden, um die Reihenfolge der Kommentare zu ändern:
/**
* 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';
}
}
}
if ($query->getMetaData('field_name') == 'comment') { /** @var \Drupal\Core\Database\Query\SelectInterface $query */ $order_by = &$query->getOrderBy(); if (isset($order_by['torder']) && $order_by['torder'] == 'ASC') { $order_by['torder'] = 'DESC'; } }
toroder
und Sortieren nach thread
gearbeitet
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 dadurch die Abfrage durch die Datenbankspalte c.thread geändert wird, 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';
}
}
}
Sie können eine Kommentaransicht erstellen und dort sortieren.
Für Drupal 8 können Sie das nächste Modul verwenden: Reihenfolge der Kommentare.
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 auf der Registerkarte "Felder verwalten" (Seite zur Verwaltung des Knotentyps) bearbeiten.
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.
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');
}