nerede koşul değiştirmek için hook_views_query_alter () nasıl kullanılır?


12

Görünümler sorgusunun nerede koşulunu değiştirmeye çalışıyorum. şimdiye kadar "siparişi" değiştirmeyi başardım ama nerede koşulunu nasıl değiştireceğimi bilmiyorum . Search_term'i kontrol etmek istiyorum ve büyük harfle yazılmışsa, sorguyu bulabilmek için küçük harfe dönüştürün. Ayrıca benim dil (farsça) sorgu çalışmadan önce onları değiştirmek için gereken bazı özel karakterler vardır. Herkes nereden başlayacağımı veya hangi kancaları veya views_handlers'ı kullanmamı sağlayabilir?

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

durumun şu anda olduğu yer için devel sonucu aşağıdaki gibidir. : views_combine% s% değerine eşit.

CONCAT_WS ('', node.title, '', field_data_field_translator.field_translator_target_id, '', field_data_field_translator.field_translator_target_id, '', field_data_field_gsit_book_gs


Kanca parametrelerini "@param ..." yorumuna yazmak gerekli değildir (önerilmez). Bu parametreler her kanca için daima aynıdır ve iyi belgelenmiştir.
wranvaud

Oldukça doğru, kullanımı en iyi@inheritdoc
ajmedway

Yanıtlar:


9

Değerini değiştiren bir durum koşulunun içeriğine erişebilirsiniz:

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

Orderby ile yaptığınız oldukça benzer. Ayrıca, özel nereye koşullar ekleyebilirsiniz ( https://api.drupal.org/api/views/plugins%21views_plugin_query_default.inc/function/views_plugin_query_default%3A%3Aadd_where/7 ve https://api.drupal.org/api/ görünümler / eklentiler% 21views_plugin_query_default.inc / function / views_plugin_query_default% 3A% 3Aadd_where_expression / 7 )


tanx çok, tam olarak aradığım şey
nooshinha


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

Bunu dene,

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

0

Tıpkı şu şekilde kullanabilirsiniz:

$query->add_where(1,'node.nid',$value,'=');  
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.