कैसे हालत को संशोधित करने के लिए हुक_ साक्षात्कार_क्वेरी_अल्टर () का उपयोग करें?


12

मैं एक दृश्य क्वेरी की स्थिति को संशोधित करने का प्रयास कर रहा हूं। अब तक मैं "ऑर्डर द्वारा" को बदलने में सफल रहा , लेकिन मुझे नहीं पता कि स्थिति को कैसे बदलना है । मैं search_term को चेक करना चाहता हूं और अगर यह अपरकेस में था, तो इसे लोअरकेस में बदलें ताकि क्वेरी इसे ढूंढ सके। मेरी भाषा (पर्सियन) में कुछ विशेष पात्र भी हैं जिन्हें क्वेरी चलाने से पहले मुझे उन्हें बदलना होगा। कोई भी मेरी मदद कर सकता है जहां शुरू करने के लिए या क्या हुक या view_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_data_dot_adget_idget_idget_dut_d_d_t_dot_id_d_d_d_t_d_d_d_t_d_d_t_t_d_t_l=_sd_s_t_t_hug_due_due_due_due_site_dhug_dhor_Dot_Arg__ChOR_CAT_WS_CAT_SUT_WS_CAT_SUT_WS_CAT_SUT_S_COR_SUT_WS_CAT_DIT_WS_CAT_DIT_WS_CAT_LUT_DLE_DUT, '।'


यह आवश्यक नहीं है (हतोत्साहित) "हुकम ..." टिप्पणी में एक हुक के मापदंडों को लिखें। ये पैरामीटर हमेशा हर हुक के लिए समान और अच्छी तरह से प्रलेखित होते हैं।
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/ विचार / प्लगइन्स% 21 साक्षात्कार_प्लगिन_क्वेरी_डफॉल्ट.इन / फ़ंक्शन / विचार_प्लगिन_क्वारी_डफ़ॉल्ट% 3A% 3Aadd_where_expression / 7 )


टैनक्स ए लॉट, बिलकुल यही मैं देख रहा था
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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.