Sortieren von Kommentaren vom neuesten zum ältesten
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?
Finden Sie einen Hinweis: \ Drupal \ Core \ Entity \ EntityViewBuilder :: viewMultiple, wusste aber immer noch nicht, wie man bestellt
bluesky_still
Antworten:
5
Wenn Sie der Abfrage ein Tag CommentStorage::loadThreadhinzufügen comment_filter, können Sie den hook_query_TAG_alterHook 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';}}}
Vielen Dank @Stanislav Agapov Ich musste Ihren Code ändern. Für mich funktioniert dieses: 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'; } }
sgoelz
1
@seb Ihre Lösung funktioniert für Threaded beginnt. Für flache Kommentarlisten funktioniert meins. Ich habe meine Antwort aktualisiert. Vielen Dank!
Stanislav Agapov
Ihre Lösung für Thread-Kommentare wird nicht richtig sortiert, sodass die neuesten Antworten visuell über den übergeordneten Kommentaren angezeigt werden. @ Echo Ansatz mit dem Einstellen toroderund Sortieren nach threadgearbeitet
Alex Skrypnyk
4
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';}}}
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');}
Antworten:
Wenn Sie der Abfrage ein Tag
CommentStorage::loadThread
hinzufügencomment_filter
, können Sie denhook_query_TAG_alter
Hook verwenden, um die Reihenfolge der Kommentare zu ändern:quelle
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 nachthread
gearbeitetAngenommen, 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".
quelle
Sie können eine Kommentaransicht erstellen und dort sortieren.
quelle
Für Drupal 8 können Sie das nächste Modul verwenden: Reihenfolge der Kommentare.
Link: https://www.drupal.org/project/comments_order
quelle
core / modules / comment / src / CommentStorage.php Zeile 302. Ich denke, der einzige Weg ist, den Core zu hacken! & nur für FLAT Modul.
quelle