Tôi đang ở điểm kinh nghiệm của Drupal nơi tôi đang cố gắng giải quyết các thách thức thiết kế trang web ở cấp mã tùy chỉnh bằng cách sử dụng API Drupal và Lượt xem. Như thường lệ, nỗ lực giải quyết vấn đề rõ ràng đơn giản của tôi đã cho tôi thấy tôi chưa biết bao nhiêu!
Tôi có một trường tham chiếu nút chỉ đến nội dung 'các sự kiện liên quan' được sử dụng bởi nhiều loại nội dung và danh mục con khác nhau cho mỗi loại này. Trong khi tôi có thể tạo mối quan hệ và hiển thị 'sự kiện liên quan' để xem, có vấn đề. Đối với một, tôi muốn các sự kiện liên quan được đặt trong một khối riêng biệt và hiển thị một danh sách các sự kiện liên quan cho toàn bộ danh sách các bài báo được cung cấp bởi chế độ xem. Lượt xem không xử lý bất kỳ sự trùng lặp nào cho nhiều mục đích có cùng tham chiếu 'các sự kiện liên quan'. Ngoài ra, tôi sẽ phải tạo các chế độ xem 'sự kiện liên quan' riêng biệt cho từng loại nội dung và danh mục con sẽ có số lượng khá lớn.
Nếu tôi có thể tạo một chế độ xem sự kiện liên quan riêng biệt có thể chấp nhận danh sách các số liệu dưới dạng đối số, thì chế độ xem sự kiện có liên quan có thể được đơn giản hóa. Vì vậy, câu hỏi của tôi là làm thế nào để đi về điều này. Mặc dù có thể có thể từ bên trong các khung nhìn, tôi đang tìm kiếm một giải pháp php mô-đun tùy chỉnh , vì vậy tôi cần phải đạt được những điều sau:
Trích xuất kết quả của bất kỳ chế độ xem 'loại nội dung' nào dưới dạng danh sách các đối số. Ngoài việc hiển thị kết quả xem, tôi cần tải danh sách NID đang được hiển thị.
Gọi chế độ xem thực tế có liên quan và chuyển danh sách các giá trị cho nó để sử dụng làm bộ lọc hoặc bộ lọc theo ngữ cảnh trong chế độ xem 'sự kiện liên quan'.
Thông tin thêm:
Sử dụng chiến lược này, tôi bắt đầu bằng cách xác định chế độ xem và cố gắng trích xuất kết quả từ nó. Nỗ lực này đã dẫn đến một vấn đề tìm kiếm kết quả trong đối tượng xem ( xem câu hỏi này ). Khi tôi nhận được kết quả, tôi sẽ cần tạo một chế độ xem khác có các kết quả đó dưới dạng bộ lọc. Tôi đã thấy các khung nhìn được triển khai từ mã bao gồm các tệp trong đó tất cả các tham số được mã hóa, nhưng không tìm thấy các ví dụ xác định và tạo chế độ xem và thao tác các kết quả bằng hàm php. Bất kỳ ví dụ hoặc liên kết sẽ được đánh giá cao.
Vì vậy, xa:
Hai câu trả lời đã giải quyết quá trình áp dụng kết quả của một khung nhìn và đặt nó vào một khung nhìn khác như một bộ lọc theo ngữ cảnh. Nhưng tôi vẫn phải đối mặt với vấn đề có hàng tá loại nội dung với ít nhất một tá các biến thể của khung nội dung trong mỗi loại. Thay vì liên kết trực tiếp từng chế độ xem với các sự kiện có liên quan, tôi sẽ cần có bất kỳ chế độ xem nội dung view1 nào của tôi chuyển kết quả của nó sang một chế độ xem 'thực tế liên quan' riêng biệt.
CONTENT TYPE SUB-CATEGORY RELATED FACT (nid)
Type 1 --------- General Info 101, 105
Specifications 103, 105
Inspections 102
Quality
etc...
Type 2 ----------General Info 101, 106
Specifications 102, 103
Cost factors 107
etc...
View1 tìm thấy một loại nội dung cụ thể và chứa các bài viết thể loại phụ khác nhau được sắp xếp theo giá trị trong trường danh mục con. Ngoài ra, nó chứa một trường tham chiếu nút cho các sự kiện liên quan. Xem một bộ lọc cho loại nội dung và danh mục con và có các trường được hiển thị để hiển thị và trường được ẩn với các nút tham chiếu thực tế liên quan đến thte.
Bộ lọc View2 cho các bài viết 'thực tế liên quan' và chứa bộ lọc theo ngữ cảnh được đặt cho nid (mặc dù cài đặt áp dụng cho URL)
Sử dụng mã trong câu trả lời của Letharion, vòng lặp foreach trong dòng 6 đang tổng hợp danh sách ID bài viết, không phải id thực tế liên quan (các bài viết giữ tham chiếu đến các sự kiện liên quan, nhưng các sự kiện liên quan không có tham chiếu nút cho các bài viết) . Tôi cần trích xuất id thực tế liên quan từ trường thực tế trong mỗi nút. Tôi đã bao gồm trường sự kiện trong định nghĩa View1, nhưng không thể tìm thấy kết quả vì lệnh dpm (nút $); đã bị sập và tôi không biết nơi các giá trị được lưu trữ trong mảng.
Vì sẽ có nhiều hơn một View1 được nhân bản cho các loại nội dung khác nhau, tôi nghĩ rằng có thể có ý nghĩa khi sử dụng hook_view_post_execute và đã mã hóa nó như sau:
function mymodule_views_post_execute (&$sourceview) {
$nids = '';
foreach($sourceview->result as $node) {
$nids += $node->nid . ','; //I need field name for $node->facts
}
$nids = rtrim($nids, ',');
$view = views_get_view('get_related');
//dpm($nids); // Fatal error: Cannot unset string offsets...
$view->execute_display('panel_pane_1', array($nids));
}
Cuối cùng, tôi không chắc chắn liệu tôi có phải điều hướng màn hình của màn hình đến vị trí thích hợp hay không, điều này được thực hiện đơn giản bằng cách đặt ngăn nội dung sự kiện liên quan vào vị trí bảng thông qua Giao diện người dùng và để bảng điều khiển xử lý phần còn lại.