हुक क्‍लॉज परिवर्तन में काम नहीं करने वाला क्‍लॉज


9

मैं Drupal 7 में एक LIKE क्लॉज के साथ डिफ़ॉल्ट खोज को बदलने की कोशिश कर रहा हूं। मैंने किसी क्वेरी को मौजूदा क्वेरी में जोड़ने के अनुसार क्वेरी को बदलने की कोशिश की :

function MYMODULE_query_node_access_alter(QueryAlterableInterface $query) {
  foreach ($query->getTables() as $table) {
    // LIKE for search results.
    if ($table['table'] == 'search_index') {
      // Get the query args and then the search term
      $args =& $query->getArguments();
      $search = $args[':db_condition_placeholder_1'];

      // Get a reference to the existing query conditions.
      $conditions =& $query->conditions();

      // Save the former conditions
      $former_conditions = $conditions;

      // Reset the condition array. It needs a default #conjunction for which AND is fine
      $conditions = array('#conjunction' => array_shift($former_conditions));

      // Replace the search condition in the query
      foreach ($former_conditions as $key => $condition) {
        if ($key != 1) {
          $query->condition($condition['field'], $condition['value'], $condition['operator']);
        }
        else {
          $query->condition('i.word', '%' . db_like($search) . '%', 'LIKE');
        }
      }
    }
  }
}

शब्द "घोषणा" के साथ खोज करना डिफ़ॉल्ट ड्रुपल खोज के समान परिणाम प्रदर्शित करता है, लेकिन "घोषित" के साथ खोज करने पर कोई परिणाम नहीं मिलता है।

कोई भी विचार क्यों मेरा कोड काम नहीं कर रहा है?


1
drupal.org/project/fuzzysearch मॉड्यूल को आपकी समस्या का समाधान करना चाहिए। आप इसे आजमा सकते हैं ..
अनिल सागर

धन्यवाद। मैं hook_query_alter (यदि संभव हो) के साथ एक समाधान पसंद करूंगा क्योंकि खोज प्रपत्र और परिणाम पृष्ठ पहले से ही सेट हैं। मुझे यह भी जानना पसंद है कि मेरा कोड अन्य उपयोग के मामलों के लिए काम क्यों नहीं कर रहा है।
user9932

1
ऐसा लग सकता है कि आप वहां 90% हैं और इसे काम करने के लिए बस इस अंतिम टुकड़े की आवश्यकता है, लेकिन मुझे लगता है कि आप इसे गलत तरीके से ले रहे हैं। सभी प्रकार के उपयोग मामलों से निपटने के लिए बहुत सारे खोज मॉड्यूल हैं, और मुझे यकीन है कि आपको अपना समाधान ढूंढने में मदद मिलेगी। इस तरह के हस्तक्षेप का उपयोग करने से भ्रम और अस्मिता को नुकसान होगा।
एलन डिक्सन

क्या आपने कभी $searchवैरिएबल में प्रिंट करके कोशिश की है ? $ खोज = $ args [': db_condition_placeholder_1']]; यदि यह विचारों से है तो यह hook_views_query_alter()सरल होगा।

जवाबों:


0

क्या आपने उस हुक को बदलने की कोशिश की है जिसका आप उपयोग कर रहे हैं MYMODULE_query_alter?

आप hook_query_TAG_alter () को लागू कर रहे हैं, और मुझे नहीं दिखता कि खोज क्वेरी को इस तरह से कहां टैग किया गया है।

प्रति नोड एपीआई :

यह 'node_access' के साथ टैग किए गए प्रश्नों के लिए hook_query_alter () है। यह 'खाता' मेटा-डेटा (या यदि उपलब्ध नहीं कराया गया है तो वैश्विक $ उपयोगकर्ता) द्वारा दिए गए उपयोगकर्ता खाते के लिए नोड एक्सेस चेक जोड़ता है, जो 'ओप्प' मेटा-डेटा (या 'दृश्य' द्वारा दिए गए एक ऑपरेशन के लिए प्रदान किया जाता है; यदि उपलब्ध नहीं कराया गया है) संभावित मूल्य 'अपडेट' और 'डिलीट' हैं)


0
module_query_tagName_tag_alter(QueryAlterableInterface $query)

इसे इस्तेमाल करें और view->queryसेटिंग में टैग का नाम डालें । इसके उपयोग से आप विचारों को भी अलग कर सकते हैं।


0

एक नई शर्त जोड़ने के लिए आप ऊपर add_where के साथ भी प्रयास कर सकते हैं

$query->add_where(1,'i.word', '%' . db_like($search) . '%', 'LIKE');

मुझे आशा है कि यह आपको वह परिणाम देगा जिसकी आपको तलाश है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.