it-swarm-vi.com

Có thể tự động đặt cài đặt máy nhắn tin của Lượt xem không?

Ví dụ, bạn có chế độ xem hiển thị khi xem một loại nút nhất định, nhưng bạn muốn cài đặt máy nhắn tin khác nhau cho từng nút riêng lẻ. Tôi đã nghĩ đến việc tạo một trường CCK như "cài đặt máy nhắn tin" và sau đó cung cấp cho nó một tùy chọn số nguyên của x-y. Nhưng tôi không biết liệu bằng cách nào đó có thể tự động cắm trường đó vào cài đặt của Chế độ xem hay không. Hoặc có một cách khác để làm điều này có thể?

13
Jay

Móc xem mà bạn muốn sử dụng là hook_views_pre_build được gọi trước khi truy vấn được xây dựng. Bây giờ điều này là giả sử bạn có một số kinh nghiệm phát triển mô-đun cơ bản và bạn đã quen với api lượt xem.

Bạn sẽ có thể làm:

/*
 * Implementation of hook_views_pre_build().
 */
function hook_views_pre_build(&$view) {

  // Make sure this is only for the specific view you want to modified
  if ($view->name == "foo_bar") {

    // Get the x-y value from where you're storing it (in your example the node object).
    $pager_count = get_count_for_this_node();

    // Lets also make sure that this is a number so we won't destroy our view.
    if (is_numeric($pager_count)) {

      // Now lets set the pager item to what ever out count is.
      $view->pager['items_per_page'] = $pager_count;
    }
  }
}

Ở trên, chúng tôi đang sử dụng móc khung nhìn được gọi trước khi truy vấn chế độ xem được tạo theo cách máy nhắn tin và mọi thứ khác sẽ phản ánh sự thay đổi.

Lời cảnh báo: khung nhìn chỉ nên được sử dụng nếu bạn hiểu chuyện gì đang xảy ra. Đoạn mã trên được viết cho lượt xem-2.x.

Hi vọng điêu nay co ich.

18
ericduran

Cho Drupal 7, Chỉ nên viết như sau:

$view->items_per_page = $pager_count;

Trong ví dụ:

/**
 * Implements hook_views_pre_build().
 */
function module_name_views_pre_build(&$view) {
  if ($view->name == "foo_bar" && $view->current_display == 'foo_display') {
    $pager_count = get_count_for_this_node();
    if (is_numeric($pager_count)) {
      $view->items_per_page = $pager_count;
    }
  }
}

Tôi sử dụng ví dụ mã bởi @ericduran.

2
heilop

Để cập nhật kết quả lượt xem và máy nhắn tin trong hook_view_pre numnder, bạn có thể làm như sau:

<?php

/**
 * Implementation of hook_views_pre_render().
 */
function MODULENAME_views_pre_render(&$view) {
  if ($view->name == 'my_view' && $view->current_display == 'my_display') {
    // View result update logic.
    // e.g.
    // $result = array();
    // foreach ($view->result as $k => $row) {
    //   if (whatever is your condition) {
    //     $result[$k] = $row;
    //   }
    // }

    // Assuming $result has data as per your logic.
    // Update the pager according to result.
    $view->query->pager->total_items = count($result);
    $view->query->pager->update_page_info();
    // Add results to view.
    $view->result = $result;
  }
}

Điều này sẽ làm việc !! ;)

1
tanmayk

Bạn nên sử dụng chức năng xem tiền xử lý

/*
 * Implementation of hook_views_pre_render().
 */
function MYMODULE_views_pre_render(&$view){
  // $view->name
  // $view->current_display
  // ...
  // look for other variables in $view object
}
1
dobeerman

Mã của @tanmayk đã lừa tôi. Trong hook_view_pre numnder chỉ thêm 2 dòng mã này

$view->query->pager->total_items = $nr;
$view->query->pager->update_page_info();

Nhưng tôi không cần thêm kết quả vào khung nhìn.

0
adevms