দর্শনে কাস্টম ক্যোয়ারী?


24

কিছু সময়ে আমি ভিউ দ্বারা উত্পাদিত একটি এসকিউএল কোয়েরিটি সংশোধন করার প্রয়োজনীয়তা পেয়েছি, শেষ পর্যন্ত আমি ওভাররড করেছি views_pre_executeএবং সেই নির্দিষ্ট দৃষ্টির জন্য ক্যোয়ারীটি পরিবর্তন করেছি।

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


1
আপনি কীভাবে এই ক্যোয়ারীটি সংশোধন করতে চেয়েছিলেন তা নির্ভর করে। আপনি ঠিক কী অর্জন করার চেষ্টা করছিলেন?
জেসন স্মিথ

@ জেসন আমি সেই সময়ে এসওকে প্রশ্নটি পোস্ট করেছি: stackoverflow.com/questions/3147916/… তবে সেই সমস্যা এখনই সমাধান হয়ে গেছে, যদি আমার কোন ভিউয়ের ক্যোয়ারীটি পরিবর্তন করতে হয় তবে আমি কেবল একটি মার্জিত উপায় খুঁজছি।
ম্যাড সায়েন্টিস্ট

আমি নিশ্চিত নই যে আপনি অন্য থ্রেডে যা করতে চেয়েছেন কেবলমাত্র দর্শন ব্যবহার করে আপনি যা করতে চেয়েছিলেন তা অর্জন করতে পারবেন না। এটি বলেছিল, এই বিড়ালটিকে ত্বকে নেওয়ার একাধিক উপায় নেই।
জেসন স্মিথ

নীচের যে কোনও উত্তর আপনি যা সন্ধান করছেন তা যদি হয় তবে আপনার একটি গ্রহণ করা উচিত (ভোট গণনার নীচে চেক চিহ্নটি ক্লিক করুন)
চৌলকি

hook_views_pre_execute সর্বাধিক মার্জিত নাও হতে পারে তবে জটিল কোয়েরি ওভাররাইডগুলির জন্য এটির জায়গা রয়েছে (
ক্রেতুল

উত্তর:


25

hook_views_query_alter()ক্যোয়ারি চালানোর আগে আপনি এটি পরিবর্তন করতেও ব্যবহার করতে পারেন। আমি মনে করি hook_views_pre_executeএটি এর সাথে সাদৃশ্যযুক্ত, তবে ক্যোয়ারিটি পরিবর্তন করা সহজ করে তোলে। আপনি মূলত একটি কীড অ্যারের মাধ্যমে ক্যোয়ারীর প্রতিটি অংশে অ্যাক্সেস পান। আমি খুব বেশি অফিসিয়াল ডকুমেন্টেশন পাইনি, তবে https://www.appnovation.com/blog/used-hook-views-query-alter এ এর একটি দুর্দান্ত উদাহরণ রয়েছে । ক্যালেন্ডার মডিউলটিতে একটি তারিখ বাগ ঠিক করতে আমাকেও এই পদ্ধতির ব্যবহার করতে হয়েছিল।


ভিউজ -৩ এর সাথেও কি এটি কাজ করবে?
মার্কডরিসন

@ মার্কডরিসন আমি এটি বিশ্বাস করি, তবে তা নিশ্চিত করি নি
চৌলকি

3
আমি নিশ্চিত করেছি যে এটি ভিউ -3-এ কাজ করে।
মার্কডোরিসন

1
@ ফ্যাবিয়ানের আপনার এই উত্তরটি গ্রহণ করা উচিত যদি এটি আপনার পক্ষে কার্যকর হয়, বা কেন এটি কেন হয় নি আমরা তা আরও উন্নত করতে পারি তার জন্য মন্তব্য করুন
চৌলকি

সাধারণ কাস্টম মডিউলটি ব্যবহার করে ড্রুপাল 7-এ কাস্টম ভিউয়ের 3 টি প্রশ্নের জন্য অন্য একটি উদাহরণ reference hook_views_pre_execute()
এমআরপি

4

সাধারণভাবে এটি আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে।

আপনি যদি এমন কোনও ক্ষেত্র / ফিল্টার / যুক্তি রাখতে চান যা একটি নির্দিষ্ট উপায়ে আচরণ করা উচিত তবে এটির জন্য একটি হ্যান্ডলার লেখার পরামর্শ দেওয়া হচ্ছে। আরও তথ্যের জন্য দর্শনগুলির উন্নত সহায়তা দেখুন।

আপনি যদি ক্যোয়ারির কিছু অংশ পরিবর্তন করতে চান তবে আপনি hook_views_query_alter () ও ব্যবহার করতে পারেন । খারাপ জিনিসটি hook_views_query_alter()হ'ল আপনি সেখানে কোডটি সত্যই পুনরায় ব্যবহার করতে পারবেন না।

এটি ডকুমেন্টেশন থেকে প্রদর্শিত উদাহরণ কোড। এটি হুক কী করতে পারে তার একটি উদাহরণ দেয়।

function mymodule_views_query_alter(&$view, &$query) {
  // (Example assuming a view with an exposed filter on node title.)
  // If the input for the title filter is a positive integer, filter against
  // node ID instead of node title.
  if ($view->name == 'my_view' && is_numeric($view->exposed_raw_input['title']) && $view->exposed_raw_input['title'] > 0) {
    // Traverse through the 'where' part of the query.
    foreach ($query->where as &$condition_group) {
      foreach ($condition_group['conditions'] as &$condition) {
        // If this is the part of the query filtering on title, chang the
        // condition to filter on node ID.
        if ($condition['field'] == 'node.title') {
          $condition = array(
            'field' => 'node.nid', 
            'value' => $view->exposed_raw_input['title'], 
            'operator' => '=',
          );
        }
      }
    }
  }
}

3

আমি hook_views_query_alter()একটি ভিউ মাইএসকিএল কোয়েরি পরিবর্তন করতে ব্যবহার করেছি । নিম্নলিখিত উদাহরণটি ড্রুপাল 7 এর অধীনে পরীক্ষা করা হয়েছে 7.x-3.0, এটি ORDER BYক্যোয়ারিতে একটি কাস্টম ক্লজ যুক্ত করেছে:

 function MYTHEME_views_query_alter(&$view, &$query) {
   // check so it's the correct view
   if($view->name == 'product_view') {
     // set a custom 'ORDER BY' clause in the query
     $query->orderby[0] = array(
       'field' => 'SUBSTR(taxonomy_term_data_name,3,4)',
       'direction' => 'ASC'
     );
     $query->orderby[1] = array(
       'field' => 'SUBSTR(taxonomy_term_data_name,1,2)',
       'direction' => 'ASC'
     );
   }
 }

1

আপনি সরাসরি স্কয়ারটি পরিবর্তন করতে পারবেন কিনা তা আমি জানি না তবে আপনি নিজের ক্ষেত্রের হ্যান্ডলারটি লিখতে এবং নিজের ক্যোয়ারীটি তৈরি করতে পারেন।

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