ভিউ 3 এবং সাবকোয়ারিগুলি?


12

আমি এমন একটি ভিউ পেয়েছি যা একটি ক্যোয়ারী উত্পন্ন করে যা একাধিক যোগদান করে। এটি একটি কার্তেসিয়ান যোগদানের উত্পন্ন করে এবং আমাকে সাবকোয়ারিতে যোগ দিতে "রূপান্তর" করতে হবে।

আমি ডকুমেন্টেশন, গুগল অনুসন্ধান ফলাফল এবং অন্যান্য উত্সগুলি সন্ধান করেছি, তবে আমি কীভাবে উপউকিগুলিতে ভিউগুলি কনফিগার করতে পারি তার কোনও শালীন বিবরণ খুঁজে পাচ্ছি না। আমি সম্পর্কগুলি কনফিগার করতে হুক_ভিউ_ডেটা () ব্যবহার করেছি (যা এখন যোগ দেওয়া হিসাবে পরিচালিত হয়)। হুক_ভিউ_ডাটা () এর মাধ্যমে সাবকিউরিজগুলি সংজ্ঞায়িত করা কি কোনওভাবেই সম্ভব, বা আমার অন্য পদ্ধতির প্রয়োজন?

কোন পরামর্শ প্রশংসা!

উত্তর:


5

আমি আরও তাকালাম, তবে সত্যই এটি বর্ণিত কোনও ডকুমেন্টেশন খুঁজে পাইনি।

আমার যা প্রয়োজন ছিল তা হল ব্যবহারকারীদের জন্য থাকা অন্য দুটি টেবিলের সাথে ব্যবহারকারীদের টেবিলে যোগদানের উপায়। তবে, অন্য দুটি টেবিল ব্যবহারকারীদের টেবিলের সাথে 'এক-একাধিক' সম্পর্কের মধ্যে রয়েছে, এর অর্থ হ'ল আমি যদি একই সাথে এই দুটি টেবিলের সাথে ব্যবহারকারীদের টেবিলে যোগ দেওয়ার চেষ্টা করি তবে কার্টেসিয়ান যোগ দেই আমি শেষ করব I'll । যাইহোক, যেহেতু আমার যা দরকার তা হ'ল যে কোনও প্রদত্ত ব্যবহারকারীর সাথে যুক্ত অন্য দুটি টেবিলের রেকর্ডের সংখ্যা গণনা করা, একটি সাবকিউরিটি কৌশলটি সক্ষম হতে হবে। যাইহোক, আমি ভিউ এবং সাবকোয়ারিতে কোনও ডকুমেন্টেশন খুঁজে পাইনি - তাই আমি যা করেছি তা এখানে।

  1. দুটি ডামি ক্ষেত্র তৈরি করেছে

আমি হুক_ভিউ_ডাটা () এর মাধ্যমে দুটি ডামি ফিল্ড তৈরি করেছি (যা আমি 'ডাউনলোড' এবং 'শুনি' বলব)। ক্ষেত্রের সংজ্ঞা নীচে তালিকাভুক্ত করা হয়েছে।

function hook_views_data() {

  $data['users'] = array(
    'downloads' => array(
      'title' => t('Downloads'),
      'field' => array(
        'handler' => 'views_handler_field_numeric',
        'click sortable' => TRUE,
      ),
      'filter' => array(
        'handler' => 'views_handler_filter_numeric',
      ),
      'sort' => array(
        'handler' => 'views_handler_sort',
      ),
    ),
    'listens' => array(
      'title' => t('Listens'),
      'field' => array(
        'handler' => 'views_handler_field_numeric',
        'click sortable' => TRUE,
      ),
      'filter' => array(
        'handler' => 'views_handler_filter_numeric',
      ),
      'sort' => array(
        'handler' => 'views_handler_sort',
      ),
    )
  ),
);

এখন আপনি যখন ব্যবহারকারীদের জন্য একটি ভিউ কনফিগার করবেন তখন ক্ষেত্রগুলি 'ডাউনলোড' এবং 'লিসটেনস' উপস্থিত হবে। যাইহোক, এখন একটি ক্যোয়ারী চালানোর চেষ্টা করার ফলে ডামি ক্ষেত্রগুলি সমস্ত ডামি ক্ষেত্র হওয়ার পরে একটি ত্রুটি ঘটবে। তাদের অস্তিত্ব নেই। এই ক্ষেত্রগুলির একমাত্র উদ্দেশ্য হুক_ভিউ_কোয়ারি_াল্টার () এর আমাদের প্রয়োগের দিকে ইঙ্গিত দেওয়া যা এর জন্য কয়েকটি প্রতিস্থাপনের দরকার।

  1. হুক_ভিউ_কোয়ারি_এল্টার প্রয়োগ করুন ()

কৌশলটি এখানে প্রদত্ত ক্যোয়ারিতে 'ডাউনলোড' বা 'লিসটেনস' ক্ষেত্র অন্তর্ভুক্ত রয়েছে তা পরীক্ষা করা। যদি এটি হয় তবে আমরা ক্ষেত্রগুলি ক্যোয়ারী থেকে সরিয়ে দেব এবং তাদের সাবকিউয়ের সাথে প্রতিস্থাপন করব। এই ফাংশন বাস্তবায়ন নীচের হিসাবে যায়।

function mta_views_query_alter(&$view, &$query) {

  foreach ($query->fields as $field_key => &$field_values) {
    if ($field_values['table'] == 'users') {

      switch ($field_values['field']) {
        case 'downloads':
          unset($query->fields[$field_key]);
          $query->add_field(null, "(SELECT COUNT(*) FROM {fileusage} fu WHERE fu.externaluser = {users}.uid AND fu.action = 0)", $field_key);
          break;
        case 'listens':
          unset($query->fields[$field_key]);
          $query->add_field(null, "(SELECT COUNT(*) FROM {fileusage} fu WHERE fu.externaluser = {users}.uid AND fu.action = 1)", $field_key);
          break;
      }
    }
  }
}

নোট করুন যে আমরা সাবকোয়ারির জন্য মুছে ফেলা ক্ষেত্রের উপনামটি পুনরায় ব্যবহার করছি। এইভাবে, ভিউজগুলি ভাববে যে সাবকিউরিটি থেকে প্রত্যাবর্তিত মানটি আসলে ডামি ক্ষেত্র থেকে আসে (যা সর্বোপরি বিদ্যমান নেই)।

তা হ'ল আমরা কোনও কার্টেসিয়ান যোগ দিচ্ছি না এবং 'ডাউনলোড' এবং 'শ্রবণ' উভয়ই সঠিকভাবে গণনা করা হচ্ছে।


4

আমার সাবক্রিটলার সমাধানটি ফিল্টার মানগুলির উত্তরাধিকার সূত্রে না পাওয়া পর্যন্ত আমি ব্যবহার করেছি। আমি এখন পৃথক ভিউ এম্বেড করতে ভিউ_ফিল্ড_ভিউ মডিউলটি ব্যবহার করি যা গণনা কোয়েরি সম্পাদন করে। আমি ভিউ_ফিল্টারফিল্ড মডিউল (যা আমি লিখেছি) এর মাধ্যমে এম্বেড করা ভিউতে প্রসঙ্গ ফিল্টার মানগুলি পাস করতে পারি যা ফিল্টার মানকে ক্ষেত্র হিসাবে (এবং এভাবে টোকেন) হিসাবে উপলব্ধ করে।

গণনা ক্যোয়ারী এখন মূল ক্যোয়ারীতে উন্মুক্ত ফিল্টারগুলি উত্তরাধিকার সূত্রে প্রাপ্ত।

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