হুক কোয়েরি পরিবর্তনের ক্ষেত্রে ক্লকটি কাজ করছে না


9

আমি ড্রুপাল in-তে একটি ডিআইকিউ ক্লোজের সাথে ডিফল্ট অনুসন্ধানটি প্রতিস্থাপনের চেষ্টা করছি an আমি একটি বিদ্যমান ক্যোয়ারিতে একটি ওআর শর্ত যুক্ত করে জিজ্ঞাসাটি পরিবর্তন করার চেষ্টা করেছি :

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 (সম্ভব হলে) সহ একটি সমাধান পছন্দ করব। আমার কোড অন্যান্য ব্যবহারের ক্ষেত্রে কেন কাজ করছে না তা জানতেও চাই।
ব্যবহারকারী 9932

1
দেখে মনে হতে পারে আপনি সেখানে 90% পথ নিয়েছেন এবং এটির কাজটি চালানোর জন্য এই চূড়ান্ত টুকরোটি দরকার তবে আমার মনে হয় আপনি এটি ভুল পথে চলেছেন। সব ধরণের ব্যবহারের ক্ষেত্রে মোকাবেলা করার জন্য প্রচুর অনুসন্ধান মডিউল রয়েছে এবং আমি নিশ্চিত যে আপনার নিজের সমাধানের জন্য এটি একটি খুঁজে পাবেন। এই জাতীয় হস্তক্ষেপ ব্যবহার করা সম্ভবত বিভ্রান্তি এবং অনিবার্যতার দিকে পরিচালিত করবে।
অ্যালান ডিকসন

আপনি কি $searchভেরিয়েবলটি বহন করে মুদ্রণের মাধ্যমে চেষ্টা করেছেন ? $ অনুসন্ধান = $ আরগস [': db_condition_ placeholder_1']; এটি যদি ভিউ থেকে hook_views_query_alter()আসে তবে এটি সহজ হবে।

উত্তর:


0

আপনি যে হুকটি ব্যবহার করছেন তা পরিবর্তন করার চেষ্টা করেছেন MYMODULE_query_alter?

আপনি hook_query_TAG_alter () প্রয়োগ করছেন, এবং আমি অনুসন্ধান কোয়েরিটি যেমন ট্যাগ করা আছে তা দেখতে পাচ্ছি না।

নোড এপিআই প্রতি :

'নোড_একসেস' দিয়ে ট্যাগ করা প্রশ্নের জন্য এটি হুক_উইকি_ল্টার ()। এটি 'ওপেন' মেটা-ডেটা (বা সরবরাহ না করা হলে 'ভিউ') দিয়ে দেওয়া একটি অপারেশনের জন্য 'অ্যাকাউন্ট' মেটা-ডেটা (বা গ্লোবাল $ ব্যবহারকারী দ্বারা প্রদত্ত) ব্যবহারকারীর অ্যাকাউন্টের জন্য নোড অ্যাক্সেস চেক যুক্ত করে; সম্ভাব্য মানগুলি হ'ল 'আপডেট' এবং 'মুছুন')


0
module_query_tagName_tag_alter(QueryAlterableInterface $query)

এটি ব্যবহার করুন এবং view->queryসেটিংয়ে একটি ট্যাগের নাম রাখুন । এটি ব্যবহার করে আপনি দর্শনগুলিকেও আলাদা করতে পারেন।


0

একটি নতুন শর্ত যুক্ত করতে আপনি উপরের অ্যাড_ কোথাও চেষ্টা করে দেখতে পারেন

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

আমি আশা করি এটি আপনার সন্ধানের ফলাফলটি দেবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.