Điểm:0

Đang tải nội dung trong Chế độ xem thông qua tham chiếu thực thể anh chị em

lá cờ za

Tôi nghĩ điều tôi cần làm là sử dụng kết quả của một Chế độ xem Drupal để lọc kết quả của chế độ xem khác. Đây là những gì tôi đang cố gắng để thực hiện.

Tôi có 3 loại nội dung (loại nút): Blog, Bài đăng trên blog, Trang tiểu sử (còn gọi là Tác giả blog)

Bài đăng trên blog chứa một thực thể tham chiếu đến cả blog mà bài đăng đó phải có và một hoặc nhiều trang tiểu sử của tác giả.

Những gì tôi cần để có thể làm là lấy ID cho một blog nhất định và lấy lại tất cả các tác giả được liên kết thông qua một bài đăng trên blog được liên kết. Sau đó, xóa mọi bản sao để hiển thị danh sách tất cả các tác giả trong một "blog" cụ thể.

Tôi nghĩ rằng tôi có thể sử dụng một mối quan hệ. Nhưng vẫn còn mờ về cách nó sẽ hoạt động.

Làm thế nào tôi có thể thực hiện điều này?


CẬP NHẬT: Để làm rõ, tôi cần bắt đầu với ID Blog và sử dụng ID đó để tìm tác giả của bất kỳ bài đăng blog nào liên kết với ID thực thể blog đã nói. Sau đó lấy tập kết quả đó và khấu trừ nó. Tôi không lo lắng về việc khấu trừ. Tôi chỉ cần trợ giúp để tìm ra cách tải các tác giả thông qua mối quan hệ đó.

Đây là một sơ đồ về điều này:

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

Cảm ơn!

beltouche avatar
lá cờ cn
Có vẻ như bạn không cần nhiều Chế độ xem để thực hiện việc này từ mô tả của mình. Bạn có thể cho biết thêm chi tiết? Điểm bắt đầu là gì - blog hoặc bài đăng trên blog? Danh sách các tác giả này xuất hiện ở đâu?
Patrick avatar
lá cờ za
@beltouche Tôi đã thêm nhiều thông tin hơn, cũng như một sơ đồ mà tôi hy vọng sẽ giúp minh họa những gì tôi đang cố gắng hoàn thành. Vui lòng cho tôi biết nếu tôi có thể cung cấp bất kỳ thông tin nào khác.
Điểm:1
lá cờ cn

Tôi sẽ giả định rằng danh sách các tác giả này sẽ xuất hiện, ví dụ: dưới dạng một khối trên trang bài đăng trên blog, như trong "Các tác giả khác được liên kết với blog của bài đăng này." (Tôi cũng cho rằng bạn đang sử dụng Drupal 8 hoặc 9)

Bạn có thể làm điều này với các mối quan hệ:

  1. Mối quan hệ đầu tiên là thông qua trường ID blog của bài đăng trên blog để lấy blog
  2. Mối quan hệ tiếp theo sử dụng mối quan hệ đầu tiên với mối quan hệ "đảo ngược" thông qua cùng một trường để tìm tất cả các bài đăng trên blog tham chiếu đến blog đó
  3. Mối quan hệ thứ ba sử dụng mối quan hệ thứ hai để nhận các tác giả thông qua ID tác giả

Đây là một bước tôi khuyên bạn nên sử dụng các trường.

  1. Thêm mối quan hệ đầu tiên. Đặt cho nó một "Tiêu đề quản trị" dễ đọc vì các tên tích hợp sẵn của Drupal trở nên phức tạp rất nhanh.
  2. Để kiểm tra, hãy thêm trường tiêu đề của blog để xác nhận rằng bạn đã nhận được những gì mình mong đợi. (Bạn luôn có thể xóa nó sau nếu không cần.)
  3. Thêm mối quan hệ thứ hai, đảm bảo sử dụng mối quan hệ đầu tiên và cũng đặt cho nó một cái tên hay. Một lần nữa sử dụng một trường từ mối quan hệ mới để kiểm tra độ chính xác.
  4. Thêm mối quan hệ thứ ba để đảm bảo sử dụng mối quan hệ thứ hai ...

Bạn có thể muốn kiểm tra hộp "yêu cầu mối quan hệ" trong từng trường hợp.

Vâng, tôi có thể thấy bạn nhận được rất nhiều bản sao mà bạn sẽ phải xóa. Bạn có thể có thể loại bỏ một số bằng cách sử dụng Giao diện người dùng của Chế độ xem, nhưng điều đó luôn luôn khó khăn. Có thể bạn sẽ phải sử dụng móc xem để dọn dẹp mọi thứ.

Patrick avatar
lá cờ za
Ý tưởng là liệt kê tất cả các tác giả trên một trang blog.Về cơ bản, bất kỳ tác giả nào có bài đăng trong blog nhất định đều phải hiển thị khuôn mặt của họ trên trang blog.
Patrick avatar
lá cờ za
Cách tiếp cận thú vị. Tôi không nghĩ đến việc sử dụng mối quan hệ thứ 3. Phải tìm ra cách mà phần đó sẽ liên kết với nhau. Nhưng tôi thích cách tiếp cận.
beltouche avatar
lá cờ cn
Nếu bạn đang bắt đầu trên trang blog, thay vì một bài đăng trên blog, bạn sẽ loại bỏ mối quan hệ đầu tiên mà tôi đã liệt kê.
Patrick avatar
lá cờ za
Đó cũng là nơi tôi hạ cánh. Tôi không thể yêu cầu Drupal xây dựng mối quan hệ hoàn toàn đúng thông qua giao diện người dùng. Vì vậy, tôi đã phải hack nó trong suốt quãng đường còn lại. Nhưng tôi sẽ công nhận bạn vì đã giúp tôi đạt được điều đó.
Patrick avatar
lá cờ za
Đối với bất kỳ ai khác đọc điều này trong tương lai, hãy xem câu trả lời của tôi bên dưới để biết cách tiếp cận cuối cùng của tôi về vấn đề này.
beltouche avatar
lá cờ cn
Tôi phải thừa nhận, tôi vẫn ngạc nhiên rằng điều này không thể thực hiện được hoàn toàn trong giao diện người dùng (ngoại trừ các bản sao). Cảm ơn mặc dù. Tôi rất vui vì đã có thể giúp bạn tìm ra giải pháp.
Patrick avatar
lá cờ za
Có lẽ có một cách mà tôi chỉ mất tích. Nhưng thành thật mà nói, tôi nghĩ rằng giao diện người dùng cũng gặp khó khăn khi cố gắng đơn giản hóa quá mức tên của các mối quan hệ. Mà gây nhầm lẫn vấn đề.
Điểm:0
lá cờ za

Được rồi, vì vậy sau khi phân tích Chế độ xem Drupal thêm một chút và truy vấn từ nó, tôi đã làm điều này (thực ra là lấy cảm hứng từ gợi ý trong câu trả lời từ @beltouche).

Vì vậy, tôi thiết lập mối quan hệ bằng cách sử dụng trường tham chiếu của tác giả bài đăng trên blog. Đặt nó theo yêu cầu. Sau đó, tôi thiết lập mối quan hệ bắt buộc thứ hai thông qua trường tham chiếu blog và yêu cầu nó sử dụng mối quan hệ đầu tiên. Mối quan hệ thứ hai này sau đó được sử dụng bởi bộ lọc theo ngữ cảnh chấp nhận giá trị của ID blog và tìm kết quả theo cách đó.

Tiếp theo, tôi thấy rằng truy vấn đã thực sự gần và chỉ cần sửa đổi hai phép nối. Vì vậy, tôi đã hack nó bằng cách sử dụng thay đổi truy vấn (chi tiết bên dưới). Cuối cùng, tôi đặt "Sử dụng tập hợp" thành "Có".

Đây là mã của tôi:

<?php
function my_module_views_query_alter(ViewExecutable $view, QueryPluginBase $query) {
  if ($view->id() == 'tác giả' && $view->current_display == 'tác giả_eva') {
    /*
     * Về cơ bản những gì tôi đã làm ở đây là buộc nó phải xây dựng các mối quan hệ theo cách mà tôi biết là hiệu quả
     * mà tôi đã kiểm tra bằng cách viết lại truy vấn theo cách thủ công và kiểm tra cơ sở dữ liệu.
     */
    $table_authors_field_data = $query->getTableInfo('blog_post_authors_node_field_data');

    if (!empty($table_authors_field_data)) {
      $table_authors_field_data['join']->leftField = 'blog_post_authors_target_id';
    }

    $table_node_blog = $query->getTableInfo('blog_post_authors_node_field_data__node__blog');

    if (!empty($table_node_blog)) {
      $table_node_blog['join']->field = 'entity_id';
      $table_node_blog['join']->leftField = 'entity_id';
      $table_node_blog['join']->leftTable = 'node__blog_post_authors';
    }
  }
}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.