як за допомогою гачки_переглядів_query_alter () змінити умову?


12

Я намагаюся змінити умови запиту переглядів. до цих пір я успішно змінював "порядок на" , але я не маю уявлення, як змінити умову, де . Я хочу перевірити search_term, і якщо він був у великому регістрі, перетворіть його на малі регістри, щоб запит міг його знайти. також є мої спеціальні символи (перська), які мені потрібно замінити їх до запуску запиту. хтось може допомогти мені з чого почати або якими гачками або видами_виробників використовувати?

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

результат розвитку для того, де зараз така умова, як слід. : views_combine дорівнює% 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_tart_tags.tags.tags.tags.exe)


Не варто (відмовлятись) писати параметри гачка в коментарі "@param ...". Ці параметри завжди однакові і добре документовані для кожного гака.
wranvaud

Цілком правильно, найкраще використовувати@inheritdoc
ajmedway

Відповіді:


9

Ви можете отримати доступ до вмісту умови, де зміна його значення:

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

Досить схоже, що ви робили з замовленням. Також ви можете додати спеціальні умови, де умови ( https://api.drupal.org/api/views/plugins%21views_plugin_query_default.inc/function/views_plugin_query_default%3A%3Aadd_where/7 та https://api.drupal.org/api/ views / plugins% 21views_plugin_query_default.inc / function / views_plugin_query_default% 3A% 3Aadd_where_expression / 7 )


tanx багато, це саме те, що я шукав
nooshinha

14

Щоб додати нове місце, де ви можете використовувати пункт, add_where

Наприклад :

$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

Спробуйте це,

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

0

Ви можете використовувати так само

$query->add_where(1,'node.nid',$value,'=');  
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.