Làm thế nào để sử dụng hook_view_query_alter () để sửa đổi điều kiện ở đâu?


11

Tôi đang cố gắng sửa đổi điều kiện nơi truy vấn lượt xem. Cho đến bây giờ tôi đã thành công với việc thay đổi "thứ tự bằng" , nhưng tôi không biết làm thế nào để thay đổi điều kiện . Tôi muốn kiểm tra search_term và nếu nó được viết hoa, hãy chuyển đổi nó thành chữ thường để truy vấn có thể tìm thấy nó. cũng có một số ký tự đặc biệt trong ngôn ngữ của tôi (Ba Tư) mà tôi cần thay thế chúng trước khi truy vấn chạy. bất cứ ai có thể giúp tôi bắt đầu từ đâu hoặc sử dụng hook hay view_handlers nào?

<?php
/**
 * Implementation of hook_views_query_alter
 * @param type $view
 * @param type $query
 */
function nashreneydev_views_query_alter(&$view, &$query) {
  //krumo($query);
  //krumo($view);
  if ($view->name == 'custom_search') {
    $search_term = $view->exposed_raw_input['combine'];

    **//$query->where[0]['conditions'][0]['field']= "?????";**
    $view->query->orderby[1]['field'] = "CASE node_type WHEN 'product_display' THEN 1 ELSE 2 END";
    $view->query->orderby[1]['direction'] = "ASC";
    $view->query->orderby[0]['field'] = "CASE node_title WHEN '".$search_term."' THEN 1 ELSE 2 END";
    $view->query->orderby[0]['direction'] = "ASC";
    //krumo($view->query->orderby);
  }
}
?>

kết quả phát cho điều kiện như sau là ngay bây giờ. : lượt xem_combine bằng% s%.

CONCAT_WS ('', node.title, '', field_data_body.body_value, '', field_data_field_master.field_master_target_id, '', field_data_field_translator.field_translator_target_id


Không cần thiết (không khuyến khích) viết các tham số của hook trong nhận xét "@param ...". Các tham số này luôn giống nhau và được ghi lại rõ ràng cho mọi hook.
wranvaud

Hoàn toàn đúng, tốt nhất để sử dụng@inheritdoc
ajmedway

Câu trả lời:


9

Bạn có thể truy cập nội dung của một điều kiện trong đó sửa đổi giá trị của nó:

$query->where[0]['conditions'][0]['value'] = 'something...';

Khá giống với những gì bạn đã làm với orderby. Ngoài ra, bạn có thể thêm tùy chỉnh trong điều kiện ( https://api.drupal.org/api/view/plugins%21view_plugin_query_default.inc/feft/view_plugin_query_default%3A%3Aadd_where/7https://api.drupal.org/api/ lượt xem / plugin% 21view_plugin_query_default.inc / function / Views_plugin_query_default% 3A% 3Aadd_where_expression / 7 )


tanx rất nhiều, đó chính xác là những gì tôi đang tìm kiếm
nooshinha

14

Để thêm một mệnh đề where mới mà bạn có thể sử dụng, add_where

Ví dụ :

$query->add_where(1,'taxonomy_term_data_node.tid', $value, 'NOT IN');

2
function mymodule_views_query_alter(&$view, &$query) {
  // Term id's to unset from result set.
  $tids = array(346,355,359);
  if ($view->name == 'yourviewname') {

    $query->add_where(1,'taxonomy_term_data_node.tid', $tids, 'NOT IN');
    $query->orderby[0]['field'] = "CASE WHEN taxonomy_term_data_taxonomy_term_hierarchy.weight IS NULL THEN taxonomy_term_data_node.weight ELSE taxonomy_term_data_taxonomy_term_hierarchy.weight END";
    $query->orderby[0]['direction'] = "ASC";
    $query->orderby[1]['field'] = "taxonomy_term_data_node.weight";
    $query->orderby[1]['direction'] = "ASC";
  }
}

0

Thử đi,

 $location_value = strtolower($string);
 $query->where[1]['conditions'][0] = array('field'=>"node.title","value"=>'%'.$location_value.'%',"operator"=>"LIKE");

0

Bạn có thể sử dụng giống như

$query->add_where(1,'node.nid',$value,'=');  
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.