bagaimana cara menggunakan hook_views_query_alter () untuk mengubah kondisi di mana?

12

Saya mencoba mengubah kondisi permintaan tampilan. sampai sekarang saya berhasil mengubah "order by" , tetapi saya tidak tahu bagaimana mengubah kondisi di mana . Saya ingin memeriksa search_term dan jika itu dalam huruf besar, ubah menjadi huruf kecil sehingga kueri dapat menemukannya. juga ada beberapa karakter khusus dalam bahasa saya (persia) yang harus saya ganti sebelum kueri berjalan. ada yang bisa membantu saya di mana untuk memulai atau apa hooks atau views_handlers untuk digunakan?

<?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);
  }
}
?>

hasil pengembangan untuk kondisi adalah sebagai follow sekarang. : views_combine sama dengan% s%.

CONCAT_WS ('', node.title, '', field_data_body.body_value, '', field_data_field_author.field_author_target_id, '', field_data_field_translator.field_translator_target_id, '', bidang_data_bidang_book_tags.blog_blog_tags.php

nooshinha
sumber
Tidak perlu (tidak disarankan untuk) menulis parameter kail di komentar "@param ...". Parameter ini selalu sama dan didokumentasikan dengan baik untuk setiap kait.
wranvaud
Benar sekali, terbaik untuk digunakan@inheritdoc
ajmedway

Jawaban:

9

Anda dapat mengakses konten kondisi yang mengubah nilainya:

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

Cukup mirip dengan yang Anda lakukan dengan orderby. Anda juga dapat menambahkan kondisi khusus tempat ( https://api.drupal.org/api/views/plugins%21views_plugin_query_default.inc/function/views_plugin_query_default%3A%3Aadd_where/7 dan https://api.drupal.org/api/ views / plugins% 21views_plugin_query_default.inc / function / views_plugin_query_default% 3A% 3Aadd_where_expression / 7 )

Jose Daniel
sumber
tanx banyak, itu persis apa yang saya cari
nooshinha
14

Untuk menambahkan klausa baru tempat Anda dapat menggunakan, add_where

Sebagai contoh :

$query->add_where(1,'taxonomy_term_data_node.tid', $value, 'NOT IN');
Rohith Pv
sumber
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";
  }
}
Drock
sumber
0

Coba ini,

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

Anda dapat menggunakan seperti

$query->add_where(1,'node.nid',$value,'=');  
Fawwad
sumber