sắp xếp lượt xem bình luận bằng cách giữ kết quả bình chọn


7

Tôi muốn hiển thị bình luận của các nút được sắp xếp theo kết quả bỏ phiếu (bình luận phổ biến nhất ở đầu danh sách). Tôi đã cài đặt mô-đun bỏ phiếu , tỷ lệlượt xem . Sau đó thêm một biểu quyết có / không vào bình luận và cho phép xâu chuỗi các bình luận để cho phép người dùng trả lời lẫn nhau.

Tôi đã tạo một chế độ xem để hiển thị các nhận xét theo thứ tự phổ biến nhất với các tiêu chí sắp xếp sau:

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

Bây giờ vấn đề là khi các khung nhìn cố gắng giữ luồng, nó sắp xếp chủ đề theo ngày đăng (asc / đĩa) và không thấy tiêu chí sắp xếp thứ hai.

Vì vậy, làm thế nào tôi có thể sắp xếp ý kiến ​​bằng cách bỏ phiếu kết quả giữ luồng?

BIÊN TẬP: cấu hình lượt xem


bạn có thể đăng một ảnh chụp màn hình của cấu hình xem của bạn?
longboardnode

@longboardnode tất nhiên rồi. Tôi thêm nó vào câu hỏi của mình
shekoufeh

Tại sao bạn sử dụng tổng hợp?
Không có Sssweat

1
@NoSssweat vì tôi cần tổng kết quả bầu chọn. Nó không ảnh hưởng đến vấn đề chắc chắn.
shekoufeh

Điều gì xảy ra nếu bạn loại bỏ Comment: Thread (asc)?
Không có Sssweat

Câu trả lời:


2

Vấn đề chính

Hiện tại không có cách nào để buộc tất cả các bình luận của con cháu vào Cha mẹ chính (cha mẹ ban đầu / đầu tiên). Ngoài ra, cần một cách để tách cha mẹ chính khỏi tất cả trẻ em.

Giải pháp TL, DR

Sử dụng mô-đun khung nhìn trường xem để tách con cái khỏi cha mẹ chính và thêm tất cả con cái dưới dạng một trường. Bằng cách đó, chúng tôi có thể sắp xếp các Phụ huynh chính theo Phiếu bầu mà không ảnh hưởng đến con cháu.

Nhưng không có cách nào để chỉ cho tất cả con cháu của CID chính; do đó, tạo một mô-đun tùy chỉnh để giải quyết vấn đề này, vì vậy chúng tôi có thể sử dụng kỹ thuật trường xem.

Giải pháp chi tiết

Yêu cầu :

Chế độ xem trường , API thực thể , PID chính (mô-đun tùy chỉnh bên dưới).


chính_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;

  }

}

Bây giờ trong các bình luận thêm một trường mới gọi là Main PID với tên máy của field_main_pid. Bạn có thể thực hiện việc này theo chương trình hoặc sử dụng Giao diện người dùng Drupal (Tôi sẽ để việc này tùy thuộc vào bạn)

nhập mô tả hình ảnh ở đây

Bây giờ, ẩn trường khỏi màn hình

nhập mô tả hình ảnh ở đây


Theo quan điểm của bạn:

Trong các trường, thêm Comment: Rendered Comment(Nhờ API thực thể)

nhập mô tả hình ảnh ở đây

Trong các trường, thêm Comment ID

nhập mô tả hình ảnh ở đây


Bây giờ thêm một khối mới

nhập mô tả hình ảnh ở đây

Nhấp vào khối và thay đổi tên hiển thị

nhập mô tả hình ảnh ở đây

Trong các trường thêm Depth

nhập mô tả hình ảnh ở đây

Trong các trường, thêm Comment: Rendered Comment(Nhờ API thực thể)

nhập mô tả hình ảnh ở đây

Các cài đặt kiểu sẽ cho phép bạn thụt lề trẻ em bằng CSS.

Thí dụ:

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

Trong Tiêu chí lọc, thêm Content: Main PID

nhập mô tả hình ảnh ở đây

Chỉ có cha mẹ chính có PID bằng 0, do đó, điều này sẽ chỉ hiển thị tất cả các con

Sau đó thêm Content: Threadvào Sắp xếp và Main PIDtrong Bộ lọc ngữ cảnh

Vì vậy, Chế độ xem trẻ em của bạn sẽ giống như thế này:

nhập mô tả hình ảnh ở đây


Quay trở lại Chế độ xem đầu tiên :

Trong Tiêu chí lọc, thêm PID chính

nhập mô tả hình ảnh ở đây

Lần này bằng 0, vì chúng tôi chỉ muốn cha mẹ chính.

Bây giờ trong Trường, thêm Global: View(Cảm ơn Chế độ xem trường)

nhập mô tả hình ảnh ở đây

Chế độ xem ban đầu / chính của bạn sẽ trông như thế này:

Quan trọng: Thêm bộ lọc theo ngữ cảnh của NID tại đây (quên làm điều đó).

nhập mô tả hình ảnh ở đây

Cuối cùng, trong Tiêu chí sắp xếp, hãy thêm Votes Value(Không hiển thị trên ảnh chụp màn hình vì tôi không bận tâm cài đặt API và tỷ lệ bỏ phiếu) và xóa mặc định Post date.


cảm ơn rất nhiều vì câu trả lời đầy đủ của bạn có hai vấn đề: thứ nhất, nếu tôi thêm các trường trong các khung nhìn từng cái một thì mô-đun API bỏ phiếu không hoạt động. Tôi có nghĩa là nó hoạt động chỉ khi tôi sử dụng thực thể kết xuất. Thứ hai, tôi không thể thêm trường vào nhận xét vì tôi có ba tab sắp xếp nhận xét theo cũ nhất, mới nhất và phổ biến nhất. Vì vậy, bộ sưu tập các yêu cầu giới hạn tôi và nó đang làm tôi phát điên.
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 entitynhưng trong câu trả lời của tôi, Comment: Rendered Commenttrường hiển thị thực thể (bình luận) ... (không cần thêm từng trường một, tiêu đề, nội dung, v.v.), vì vậy nó cũng hoạt động ở đây. Bạn đã thử câu trả lời của tôi? Second, I can not add a field to comments because I have three tabs sorting comments by oldest, newest and most popular.Trên ảnh chụp màn hình của bạn tôi không thấy điều này, tại sao việc thêm một trường lại ảnh hưởng đến tab của bạn?
Không có Sssweat

Làm thế nào bạn thiết lập PID chính trong Bộ lọc ngữ cảnh? đặt thành "Hiển thị tất cả kết quả cho trường được chỉ định" trong trang cài đặt Bộ lọc ngữ cảnh?
shekoufeh

@shekoufeh vâng.
Không có Sssweat

1
danh sách các bình luận ban đầu cần bình luận: nid để hiển thị bình luận của từng nút của chính họ.
shekoufeh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.