hook_views_query_alter ()를 사용하여 위치를 수정하는 방법은 무엇입니까?


12

뷰 쿼리의 where 조건을 수정하려고합니다. 지금까지 나는 "순서대로" 를 바꾸는 데 성공 했지만 where 조건을 어떻게 바꾸는 지 전혀 모른다 . search_term을 확인하고 대문자로 된 경우 쿼리에서 찾을 수 있도록 소문자로 변환하십시오. 또한 내 언어 (페르시아어)에는 쿼리가 실행되기 전에 대체 해야하는 특수 문자가 있습니다. 누구든지 어디서 시작해야하는지 또는 어떤 후크 또는 views_handlers를 사용할 수 있습니까?

<?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_tags.field_book_tags_tid)


주석 "@param ..."에 후크의 매개 변수를 쓸 필요는 없습니다 (점검되지 않음). 이러한 매개 변수는 항상 동일하며 모든 후크에 대해 잘 문서화되어 있습니다.
wranvaud

아주 옳고, 사용하기 가장 좋은@inheritdoc
ajmedway

답변:


9

값을 수정하는 where 조건의 컨텐츠에 액세스 할 수 있습니다.

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

당신이 orderby로 한 것과 매우 비슷합니다. 또한 사용자 정의 위치 조건을 추가 할 수 있습니다 ( https://api.drupal.org/api/views/plugins%21views_plugin_query_default.inc/function/views_plugin_query_default%3A%3Aadd_where/7https://api.drupal.org/api/ views / plugins % 21views_plugin_query_default.inc / function / views_plugin_query_default % 3A % 3Aadd_where_expression / 7 )


tanx를 많이, 그것이 바로 내가 찾던 것입니다
nooshinha

14

사용할 수있는 새로운 where 절을 추가하려면 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,'=');  
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.