it-swarm-vi.com

Làm cách nào để sử dụng hook_view_query_alter ()?

Theo những gì được báo cáo trong tài liệu cho hook_view_query_alter () , tôi đã tạo một tệp có tên alterform.views.inc và đặt nó vào một mô-đun được kích hoạt có tên alterform. Tôi đã thêm đoạn mã sau vào alterform.views.inc. nhưng nó không hoạt động.

function alterform_views_query_alter(&$view, &$query) {
  switch($view->name) {
    case 'myViewName':  
      echo 'test test'; // test       
      $query->orderby[0] = "FIELD(node.type, 'story', 'page', 'productTypeC', 'productTypeD') ASC";
      $query->orderby[1] = "node_title ASC";
      break;
  }
}

tại sao nó không xuất "kiểm tra thử nghiệm"? Có gì sai với mã của tôi?

vẫn không có đầu ra của thử nghiệm và quan điểm. Có gì sai với mã của tôi? cảm ơn bạn

20
enjoylife

Đúng. Để "làm" bất cứ điều gì có lượt xem trong một mô-đun, bạn phải triển khai hook_view_api. Nếu không có điều này, mô-đun của bạn sẽ không được nhận ra bởi Lượt xem, bao giờ (AFAIK).

Vui lòng thêm phần sau vào mã mô-đun của bạn:

/**
 * Implementation of hook_views_api().
 */
function alterform_views_api() { // your module name into hook_views_api
  return array(
    'api' => 2,
    // might not need the line below, but in any case, the last arg is the name of your module
    'path' => drupal_get_path('module', 'alterform'),
  );
}

Điều này sẽ sửa nó để mô-đun của bạn ít nhất được nhận ra, sau đó bạn có thể bắt đầu gỡ lỗi nó :)

Một cách hay để bắt đầu gỡ lỗi một khung nhìn (tức là một bước bé) là đặt dpm($view); ngay khi bắt đầu chức năng khung nhìn bạn đang triển khai. Trong hầu hết các trường hợp, điều đó sẽ đưa thông tin lên màn hình sẽ giúp bạn biết bạn đang ở đâu. Sẽ đề nghị làm điều này với devel.module được cài đặt/bật.

Chỉnh sửa: Điều này giả định Lượt xem 2 và Drupal 6. Tốt nhất bạn nên hỏi xung quanh nếu đó không phải là vũ khí bạn chọn.

22
NikLP

bạn có thể kiểm tra 3 điều:

  • xóa bộ nhớ ẩn của bạn đi
  • tải xuống và kích hoạt Devel ,
  • sử dụng dpm() thay vì echo()
  • kiểm tra $view->name với dpm()
4
Manu

Bạn cần đặt tệp yourmodule.view.inc trong thư mục mô-đun, không nằm trong thư mục con hoặc Chế độ xem không thể tự động lấy nó.

3
shaneonabike
    $query->orderby[0] = "FIELD(node.type, 'story', 'page', 'productTypeC', 'productTypeD') ASC";

nên là

    $query->orderby[0]['field'] = "field_name ASC";
2
tan

nếu bạn đang sử dụng một thư mục cho yourmodule.view.inc, bạn cần đề cập đến đường dẫn của nó trong tệp mô-đun, sử dụng mã tương tự như sau:

    'path' => drupal_get_path('module', 'mymodule') . '/subdirectory/';
1
tan