it-swarm-vi.com

Thực hiện chế độ xem mà không hiển thị

Tôi muốn lập trình thực hiện một chế độ xem (cung cấp đối số) và nhận kết quả thô mà không hiển thị. Có thể không?

Khi tôi sử dụng $view->preview('default', $args); nó sẽ chuyển đổi kết quả thành HTML. Tôi biết tôi có thể sử dụng $view->result để lặp lại các kết quả thô, nhưng kết xuất được tùy chỉnh mà tôi đang sử dụng cho một số trường là lỗi và cung cấp cho tôi WSOD (Tôi không có hứng thú hoặc khả năng sửa chữa trình kết xuất, đó là trường hợp Edge :))

Tôi đang sử dụng Lượt xem 3 với Drupal 7

8
Daniel

Đã có một chức năng thực hiện chính xác những gì bạn muốn:

  $result = views_get_view_result('my_view_name', 'default', $arg1, $arg2, ...);

Đọc thêm tại trang của nó tại api.drupal.org:

https://api.drupal.org/api/view/view.module/feft/view_get_view_result/7

7
Alexar

$ view-> preview () thường được sử dụng để chỉ xem màn hình, vì vậy nói cách khác, nó sẽ hiển thị thông qua định dạng đã chỉ định.

$ view-> exec_display () cũng trả về màn hình ở định dạng có liên quan được chỉ định trong dạng xem.

Tôi nghĩ rằng bạn có thể phải dẫn đến việc thực hiện truy vấn trực tiếp, tức là db_query ()

3
Colin McClure

Bạn sẽ nhận được một số thành công nếu bạn bỏ view::preview() vào mã của riêng bạn, nhưng thay đổi nó để thay vì gọi ->display_handler->preview(), nó sẽ gọi ->execute() thay vào đó:

$view = views_get_view($view_name);
$view->set_display($display_name);
$view->preview = TRUE;
$view->pre_execute($args);
$view->execute($display_name);

Điều này sẽ hoạt động bởi vì, đối với hầu hết các trình xử lý hiển thị, lệnh gọi ...->display_handler->preview() thực sự chỉ là một trình bao bọc xung quanh một cuộc gọi trở lại view::render(). Mà chính nó bắt đầu bằng cách gọi $this->execute(...).

0
J-P