Câu trả lời:
Khi CommentStorage::loadThread
thêm comment_filter
thẻ vào truy vấn của nó, bạn có thể sử dụng hook_query_TAG_alter
hook để thay đổi thứ tự nhận xét:
/**
* 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
việc sắp xếp và sắp xếp bằng cách thread
làm việc
Giả sử tên máy của trường nhận xét của bạn là field_comments , hãy đặt mã này vào một mô-đun để nhận các bình luận giảm dần. Tôi đã gặp rắc rối với các nhận xét theo luồng, nhưng điều này hoạt động vì nó thay đổi truy vấn của cột cơ sở dữ liệu c.thread thay vì chỉ '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';
}
}
}
Bạn có thể tạo một cái nhìn bình luận và sắp xếp chúng ở đó.
Đối với Drupal 8, bạn có thể sử dụng mô-đun tiếp theo: Thứ tự nhận xét.
Liên kết: https://www.drupal.org/project/comments_order
Mô-đun này cung cấp để thay đổi thứ tự nhận xét (chức năng sắp xếp) trong Drupal 8. Bạn có thể chọn thứ tự nhận xét (mới nhất trước hoặc cũ nhất trước) cho mỗi loại nút, chỉnh sửa trường loại nhận xét của bạn trên tab "Quản lý trường" (trang quản trị loại nút).
Không chỉ trong căn hộ, mà còn trong màn hình ren! Nếu bạn sử dụng hiển thị theo luồng, bạn có thể chọn cách sắp xếp các nhận xét của trẻ. Ví dụ dưới đây.
lõi / mô-đun / bình luận / src / CommentStorage.php dòng 302. Tôi nghĩ cách duy nhất là hack lõi! & chỉ dành cho mô-đun FLAT.
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');
}