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


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 )


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');

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

Coba ini,

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

0

Anda dapat menggunakan seperti

$query->add_where(1,'node.nid',$value,'=');  
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.