Câu trả lời:
Phải mất một chút để tìm hiểu các móc xem. Bạn có biết về xem tập tin mẫu? Nếu vậy, một cách nhanh chóng và bẩn để làm điều đó là kiểm tra xem có bao nhiêu hàng trong tệp mẫu xem mức cao nhất mà đầu ra hiển thị. Nếu bạn đã cài đặt mô-đun dpm($variables)
Devel, bạn có thể trong view-view.tpl.php (có thể bạn sẽ muốn sử dụng đầu ra hiển thị duy nhất cho chế độ xem của mình).
Tôi không thể nhớ nơi nào, nhưng một nơi nào đó $variables
là một hàng đếm; bạn có thể thêm logic vào tệp mẫu để không in ra $rows
nếu nó không đáp ứng tiêu chí của bạn.
Dựa trên gợi ý mà googletorp đã đưa ra, giải pháp đơn giản của tôi là đưa cái này vào template.php của tôi:
function MY_THEME_NAME_preprocess_views_view(&$vars) {
if ($vars['display_id'] == 'MY_DISPLAY_ID' && count($vars['view']->result) < 2) {
$vars['view']->result = NULL;
}
}
Trong trường hợp này tôi đang ẩn chế độ xem nếu nó có ít hơn hai kết quả.
Cảm ơn rất nhiều!
Bạn có thể trong một hàm tiền xử lý mẫu có thể dễ dàng phát hiện số lượng kết quả (hàng) mà một khung nhìn có và đặt đầu ra thành một chuỗi trống nếu đó là trường hợp.
Để làm việc này, bạn có thể cần thực hiện một chút công việc trong mẫu, vì Chế độ xem luôn thêm một số gói HTML mà bạn có thể không muốn nếu chế độ xem trống.
Tôi có thể dễ dàng thực hiện nhất trong hàm tiền xử lý template_pre process_view_view () . Bạn có thể tham khảo giao diện lượt xem để có gợi ý về các mẫu.
views-view.tpl.php
tệp có <?php if ($rows): ?> ... <?php endif; ?>. My understanding currently is there is no way to eliminate the extraneous wrapper HTML otherwise. If the
biến $ rows` đã có sẵn cho tôi trong tệp đó, tại sao tôi lại phải làm thêm template.php
?
Nếu lý do cho điều này chủ yếu theo định hướng hiển thị (ví dụ: bạn đang xây dựng lưới và muốn buộc số lượng vật phẩm chẵn / lẻ) thì tôi cho rằng việc thêm logic tùy chỉnh ở lớp chủ đề chắc chắn là logic nhất. Các câu trả lời khác đã bao gồm điều này tôi nghĩ. Tuy nhiên, vấn đề mà chúng tôi tìm thấy là một số biến số xem có thể cần phải thay đổi (ví dụ $view->result = NULL
:), không thể thay đổi một cách an toàn như là một phần của chức năng tiền xử lý. Dường như các chế độ lưu trữ nội bộ xem có thể tạo ra một số biến theo cách mà một số kết hợp cài đặt bộ đệm "đầu ra được kết xuất" và "kết quả truy vấn" có thể không tương thích với bất kỳ giải pháp hiện có nào.
Một cách khác là thay đổi kết quả của chính truy vấn được thực hiện, cung cấp điều khiển ở mức thấp hơn nhiều. Điều này cũng có thể giải quyết một số vấn đề với việc ẩn đánh dấu trình bao bọc vì nó mô phỏng kết quả "trống" được đặt ngay cả trước khi đánh dấu được tạo.
/**
* Implements hook_views_post_execute().
*/
function MYMODULE_views_post_execute(&$view) {
$view_name = 'myviewname';
$view_display = 'mydisplay';
// Don't show the view if there is only one item.
if ($view->name == $view_name && $view->current_display == $view_display && count($view->result) < 2) {
$view->result = array();
}
}
Tất nhiên điều này không thể được thực hiện trong một chủ đề vì nó không liên quan đến chủ đề hoặc thay đổi hook, nhưng tôi nghĩ nó vẫn đáng chú ý cho những người quan tâm đến câu hỏi này.
Trong một số trường hợp, loại điều kiện này sẽ được đặt tốt hơn trong chế độ xem, để người xây dựng hiểu những gì đang xảy ra trong bối cảnh xem chỉnh sửa, không phải trong một số mô-đun hoặc móc chủ đề khác.
Nếu bạn muốn có logic này được bao gồm trên trang chỉnh sửa chế độ xem thì bạn có thể làm điều này:
<?php $view = views_get_current_view(); if ( count($view->result) < 5 ) { $view->result = null; } ?>
Bạn cũng có thể làm điều này bằng cách sử dụng khuôn mẫu chủ đề:
views-view.php
vào thư mục chủ đề / mẫu của bạnviews-view--view-name--display-name.tpl.php
if (count($rows) < $n):
vào mã của bạn để thao tác dựa trên số lượng kết quả nếu cần