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


20

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.incvà đặ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


Không bao giờ sử dụng nó, nhưng có thể là bạn phải bao gồm / yêu cầu alterform.views.incbên trong mô-đun của bạn và bạn đã không làm điều đó?
nonsenz

tôi đã đặt tệpformform.view.inc trong tệp mô-đun thay thế của mình
enjoylife

Làm thế nào để bao gồm / yêu cầu sự thay đổi.view.inc trong mô-đun của bạn? cảm ơn bạn
năm11

Câu trả lời:


22

Đú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 diện bởi Chế độ 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 tốt để 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 thực hiện. 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.


Điều này hoạt động tốt :)
kalidasan

4

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->namevớidpm()

tôi đã xóa bộ nhớ cache và echo $ view-> name. nhưng vẫn không có bất kỳ đầu ra nào về tên lượt xem trong khối lượt xem.
enjoylife

kỳ dị. Tôi thường không dựa vào tiếng vang ... Nhân tiện, tôi nhận thấy một lỗi nhỏ trong mã của bạn, có "}" không phải là ... lỗi dán không?
Manu

nhưng khi tôi print_r ($ lượt xem) vẫn không có bất kỳ đầu ra nào về tiêu đề trong khối lượt xem.
năm11

print_r ($ view) không nên in bất cứ thứ gì ngoài print_r ($ view) có. Bạn đã đặt điều này trước khi chuyển đổi?
Manu

3

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ó.


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

nên là

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

1

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/';
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.