Cách thức xây dựng trình duyệt phân loại đơn giản có độ sâu tùy ý


23

Tôi đã dành nhiều ngày cố gắng để xác định một cách sạch sẽ để làm như sau:

  1. Hiển thị danh sách tất cả các thuật ngữ cấp cao nhất trong từ vựng với các liên kết đến các thuật ngữ con của chúng
  2. Khi nhấp vào một liên kết, được đưa đến một danh sách những đứa trẻ của những điều khoản đó.
  3. Quảng cáo infinitum cho đến thời hạn cấp thấp nhất, trong đó một danh sách các nút được gắn thẻ với thuật ngữ đó sẽ được hiển thị.

Đây có vẻ như là chức năng khá phổ biến nhưng tôi không thể tìm thấy bất kỳ giải pháp nào có thể xử lý độ sâu tùy ý, đặc biệt nếu không phải tất cả các cây hạn đều xuống cùng độ sâu.

Một giải pháp lý tưởng sẽ là giải pháp sử dụng Chế độ xem 3, Bối cảnh, EntityFieldQueries hoặc bất kỳ thứ gì khác được hỗ trợ tốt trong Drupal 7.

Tôi có thể thực hiện gần như chính xác những gì tôi muốn bằng cách tạo một chế độ xem đơn giản với ba nút: mối quan hệ hạn (thuật ngữ, cha mẹ của thuật ngữ và cha mẹ của thuật ngữ) và người dùng cho các bộ lọc theo ngữ cảnh liên tiếp. Vấn đề duy nhất với điều này là nếu có một nút có độ sâu quá nhỏ, nó sẽ được liệt kê là "Chưa được phân loại" và tạo ra một liên kết chết. Thay vì làm điều đó tôi muốn nó liên kết với thuật ngữ con tiếp theo có sẵn.

Câu trả lời:


23

Tôi đã tìm ra một cách để làm điều này chỉ với mô-đun Views. Nó không hoàn hảo - nó không tạo ra một URL đẹp và đường biên với dòng phân loại theo cách mà giải pháp của tôi cho phân loại theo một độ sâu duy nhất sẽ làm.

Trình duyệt độ sâu tĩnh

Đối với phân loại độ sâu tĩnh (trong đó tất cả các thuật ngữ có cùng độ sâu của thuật ngữ con), bạn sẽ làm như sau:

  1. Tạo chế độ xem các nút
  2. Thêm mối quan hệ với thuật ngữ phân loại (Thời hạn)
  3. Thêm mối quan hệ với cha mẹ phân loại thuật ngữ, có thể truy cập thông qua Thuật ngữ (Phụ huynh)
  4. Thêm mối quan hệ với cha mẹ hạn phân loại, có thể truy cập thông qua Parent (Parent Parent)
  5. Lặp lại bước 4 nhiều lần nếu cần thiết cho độ sâu phân loại của bạn.
  6. Thêm các bộ lọc theo ngữ cảnh cho từng bộ lọc và đảm bảo chúng theo đúng thứ tự. Đặt để hiển thị tóm tắt khi bộ lọc không có trong URL.
  7. Bạn có thể muốn ghi đè lên mẩu bánh mì và tiêu đề cho mỗi bộ lọc.
  8. ???
  9. LỢI NHUẬN

Trình duyệt độ sâu biến

Đối với phân loại độ sâu thay đổi (trong đó một số cây hạn có mức độ làm tổ sâu hơn các loại khác), thì phức tạp hơn một chút:

  1. Thêm một thuật ngữ cấp cao mới (Foo) vào từ vựng của bạn và đặt tất cả các thuật ngữ khác theo nó.
  2. Tạo chế độ xem các thuật ngữ với một trang hiển thị tên thuật ngữ
  3. Thêm bộ lọc theo ngữ cảnh: Thuật ngữ phân loại: Thuật ngữ cha mẹ
  4. Khi giá trị mặc định không có trong URL, hãy cung cấp giá trị mặc định
  5. Đặt giá trị mặc định thành tên thuật ngữ cấp cao nhất của bạn (Foo)
  6. Chỉ định tiêu chí xác nhận
    • Trình xác nhận: thuật ngữ phân loại
    • Tiêu chí: tên từ vựng của bạn
    • Loại giá trị bộ lọc: Tên thuật ngữ được chuyển đổi thành ID hạn
  7. Nhấp vào nút "+ Thêm" ở đầu bảng điều khiển Chế độ xem để thêm Tệp đính kèm vào chế độ xem.
  8. Chỉ thêm vào tệp đính kèm này (ghi đè) Mối quan hệ: Thuật ngữ phân loại: Nội dung có thời hạn
  9. Chỉ thêm vào phần đính kèm này (ghi đè) hiển thị: các trường: tiêu đề nút được liên kết với các nút và loại bỏ (chỉ từ tệp đính kèm này!) Hiển thị: các trường: tên thuật ngữ
  10. Chỉ thêm vào tệp đính kèm này (ghi đè) bộ lọc theo ngữ cảnh: Thuật ngữ phân loại: Tên
  11. Khi giá trị bộ lọc không khả dụng, hãy cung cấp giá trị mặc định: Giá trị thô từ URL: Thành phần đường dẫn: 2 (hoặc nhiều hơn nếu đường dẫn Trang của bạn có> 1 thành phần)
  12. Cài đặt tệp đính kèm: Đính kèm vào: [tên của màn hình trang bạn vừa thực hiện]
  13. ???
  14. LỢI NHUẬN

Ảnh chụp màn hình UI của Lượt xem để tham khảo: nhập mô tả hình ảnh ở đây


Làm tốt lắm! Nâng cao cả câu hỏi và câu trả lời của bạn - có vẻ như là điều khá phổ biến cần phải làm và giải pháp của bạn tốt hơn bất cứ điều gì tôi tìm thấy trong khi ban đầu cố gắng trả lời.
gửi

8
  1. Tạo một cái nhìn của loại phân loại
  2. Thêm bộ lọc theo ngữ cảnh của loại Thuật ngữ phân loại: Thuật ngữ phụ huynh
  3. Đặt Cung cấp giá trị mặc định và giữ nó là cố định. cung cấp ID hạn của thuật ngữ phụ huynh hàng đầu
  4. Thêm ID thuật ngữ phân loại dưới dạng trường và loại trừ nó khỏi màn hình
  5. Thêm một Tên thuật ngữ phân loại nhấp vào ngoài đặt trường này làm liên kết; cung cấp liên kết dưới dạng "path-you-set-in-view / [tid]"
    Lưu ý: Bạn nên bỏ chọn "Liên kết trường này với trang thuật ngữ phân loại của nó"

Khi bạn truy cập trang xem, bạn sẽ thấy con cái của cha mẹ hàng đầu; theo ví dụ bạn sẽ nhận được:

  • hạn1
  • nhiệm kỳ 2

Khi bạn nhấp vào term1, bạn sẽ nhận được các con. Cho đến khi bạn đạt hạn1.1.1. Bạn sẽ không nhận được bất kỳ kết quả nào nếu bạn nhấp vào term1.1.1. Để đạt được điều đó, chúng ta cần tạo thêm một khối khung nhìn trong khung nhìn trên.

  1. Thêm một khối
  2. Xóa bộ lọc theo ngữ cảnh hiện tại và trường
    Lưu ý: Khi bạn xóa chúng, hãy đảm bảo bạn chọn Trang này (Over Ride) từ trình đơn thả xuống ở trên cùng bên cạnh Đối với những người khôn ngoan khác, các trường và bộ lọc theo ngữ cảnh bạn đã tạo trong trang cũng sẽ biến mất .
  3. Thêm bộ lọc theo ngữ cảnh mới Thuật ngữ phân loại: ID hạn
  4. Thêm mối quan hệ Thuật ngữ phân loại: Nội dung có thời hạn
  5. Thêm Tiêu đề nội dung và bạn sử dụng mối quan hệ từ trình đơn thả xuống ở trên cùng.
  6. Lưu chế độ xem và quay lại Trang chúng tôi tạo (Đây là điều quan trọng khác mà bạn không thể hoàn thành bước tiếp theo
  7. Thêm một trường trong FOOTER HOẶC ĐẦU
  8. Chọn "Toàn cầu: Khu vực xem" từ danh sách và chọn khối chúng tôi đã tạo từ Chế độ xem thả xuống để chèn trong khi bạn ở đó kiểm tra Kế thừa các bộ lọc theo ngữ cảnh để chúng tôi cũng có thể chuyển giá trị từ chế độ xem này sang khối
  9. Kiểm tra Hiển thị ngay cả khi chế độ xem không có kết quả để khi chế độ xem này không hiển thị kết quả, khối vẫn sẽ được hiển thị

Lưu chế độ xem, và bạn đã hoàn tất.


Tôi làm theo lời giải thích rõ ràng về Mohammed Shameem. Cảm ơn bạn, làm việc hoàn hảo !!
Steven

3

Tôi nghĩ những gì bạn muốn là Views Tree , một mô-đun đóng góp sử dụng Chế độ xem để xây dựng một cây các thuật ngữ phân loại.

(Hãy cho tôi một giây và tôi sẽ viết nhanh cách sử dụng nó để xem các trường thuế)

Rõ ràng mô-đun đó có một vấn đề ngăn nó làm việc với các điều khoản phân loại. Boo.

Điều đó nói rằng, tôi đã tìm thấy đoạn mã sau dường như làm những gì bạn muốn (bạn có thể làm cho nó hiển thị / ẩn các phần tử thông qua một số mã jQuery khá thô sơ):

<?php

// The ID of the taxonomy vocabulary for which you'd like to create a nested list
$vid = 10;

$depth = 0;
$num_at_depth = 0;
$tree = taxonomy_get_tree($vid);

print "<ul class=\"menu\">\n<li>";
foreach ($tree as $term) {
  $diffdepth = 0;
  if ($term->depth > $depth) {
    print "\n<ul>\n<li>";
    $depth = $term->depth;
    $num_at_depth = 0;
  }
  if ($term->depth < $depth) {
    $diffdepth = $depth - $term->depth;
    while ($diffdepth > 0) {
      print "</li>\n</ul>\n";
      $diffdepth--;
    }
    $depth = $term->depth;
  }
  if (($term->depth == $depth) && ($num_at_depth > 0)) {
    print "</li>\n<li>";
  }
  print l($term->name, 'taxonomy/term/' . $term->tid);
  $num_at_depth++;
}
print "</li>\n</ul>\n";

Thông qua " danh sách danh mục lồng nhau với các liên kết đến các trang ".


Tôi đã kích hoạt mô-đun đó và thử trải nghiệm với nó và tôi có hai vấn đề: 1. Tôi nghi ngờ nó chỉ cung cấp cho bạn một danh sách phẳng, không phải trải nghiệm duyệt nhiều trang và 2. Tôi không thể làm việc được. Một cách làm sẽ hữu ích nhất.
beth

Cập nhật câu trả lời. Lời xin lỗi, rõ ràng Views Tree có một vấn đề mở lại: sử dụng thuật ngữ phân loại. Câu trả lời thay thế được đăng.
aendrew

Điều đó dường như đưa ra một danh sách lồng đơn giản hơn là một trình duyệt được phân trang liên tục.
beth

@beth - Nó có đủ nếu tôi viết một số jQuery hiển thị / ẩn các phần tử của danh sách đó khi các mục cha / con được nhấp không?
aendrew

Tôi không muốn nó phụ thuộc vào JavaScript.
beth

0

Nếu bạn chỉ muốn có một bộ các trang duyệt phân loại động, thì tôi sẽ đi theo cách sau, yêu cầu mô-đun 3 Chế độ xem + Phân loại cho phép bạn sử dụng Chế độ xem để hiển thị nội dung của taxonomy/term/%các trang:

  1. Điều khoản cấp cao nhất - liệt kê các điều khoản có cha mẹ là null
  2. Điều khoản cấp trung - liệt kê các điều khoản có cha mẹ KHÔNG phải là null. Không có kết quả: hiển thị Xem # 3
  3. Các nút có Điều khoản - liệt kê các nút được gắn thẻ với các điều khoản.

Vì Chế độ xem 1 và 2 có thể sẽ được theo chủ đề theo cách tương tự, bạn có thể xem xét việc hợp nhất chúng dưới dạng hiển thị thành một Chế độ xem - có thể quản lý dễ dàng hơn.

Tôi đã sử dụng thành công phương pháp đó cho phân loại học của tôi. May mắn thay, nó đồng nhất ở mỗi cấp độ - một nhánh nhất định kết thúc bằng một trong hai lá (nút) hoặc nhánh (thuật ngữ), nhưng không phải cả hai. Nếu đây là một hạn chế, xin vui lòng kiểm tra nó đầu tiên.

Tất nhiên đây là một "mã giả". Bạn muốn thiết lập các xác nhận và bộ lọc và một mẫu pathauto đẹp mắt, logic để phản ánh cấu trúc.

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.