web-dev-qa-db-fra.com

comment utiliser hook_views_query_alter () pour modifier où condition?

J'essaie de modifier la condition where d'une requête de vues. jusqu'à présent, j'ai réussi à modifier "ordre par", mais je ne sais pas comment modifier où condition. Je veux vérifier le search_term et s'il était en majuscule, le transformer en minuscule pour que la requête puisse le trouver. il y a aussi quelques caractères spéciaux dans ma langue (persan) dont j'ai besoin pour les remplacer avant l'exécution de la requête. n'importe qui peut m'aider par où commencer ou quels crochets ou vues_handlers utiliser?

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

le résultat de développement pour où la condition est comme suit en ce moment. : views_combine est égal à% 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, '', field_data_field_book_tags.___tags._book_t_s._book_t_s._book_t_s._tag_l_t_s_tata_tata

12
nooshinha

Vous pouvez accéder au contenu d'une condition where en modifiant sa valeur:

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

Assez similaire à ce que vous avez fait avec orderby. Vous pouvez également ajouter des conditions Where personnalisées ( https://api.drupal.org/api/views/plugins%21views_plugin_query_default.inc/function/views_plugin_query_default%3A%3Aadd_where/7 et https : //api.drupal.org/api/views/plugins%21views_plugin_query_default.inc/function/views_plugin_query_default%3A%3Aadd_where_expression/7 )

9
Jose Daniel

Pour ajouter une nouvelle clause where que vous pouvez utiliser, add_where

Par exemple :

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

Essaye ça,

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

Vous pouvez utiliser comme

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