আমি আরও তাকালাম, তবে সত্যই এটি বর্ণিত কোনও ডকুমেন্টেশন খুঁজে পাইনি।
আমার যা প্রয়োজন ছিল তা হল ব্যবহারকারীদের জন্য থাকা অন্য দুটি টেবিলের সাথে ব্যবহারকারীদের টেবিলে যোগদানের উপায়। তবে, অন্য দুটি টেবিল ব্যবহারকারীদের টেবিলের সাথে 'এক-একাধিক' সম্পর্কের মধ্যে রয়েছে, এর অর্থ হ'ল আমি যদি একই সাথে এই দুটি টেবিলের সাথে ব্যবহারকারীদের টেবিলে যোগ দেওয়ার চেষ্টা করি তবে কার্টেসিয়ান যোগ দেই আমি শেষ করব I'll । যাইহোক, যেহেতু আমার যা দরকার তা হ'ল যে কোনও প্রদত্ত ব্যবহারকারীর সাথে যুক্ত অন্য দুটি টেবিলের রেকর্ডের সংখ্যা গণনা করা, একটি সাবকিউরিটি কৌশলটি সক্ষম হতে হবে। যাইহোক, আমি ভিউ এবং সাবকোয়ারিতে কোনও ডকুমেন্টেশন খুঁজে পাইনি - তাই আমি যা করেছি তা এখানে।
- দুটি ডামি ক্ষেত্র তৈরি করেছে
আমি হুক_ভিউ_ডাটা () এর মাধ্যমে দুটি ডামি ফিল্ড তৈরি করেছি (যা আমি 'ডাউনলোড' এবং 'শুনি' বলব)। ক্ষেত্রের সংজ্ঞা নীচে তালিকাভুক্ত করা হয়েছে।
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',
),
)
),
);
এখন আপনি যখন ব্যবহারকারীদের জন্য একটি ভিউ কনফিগার করবেন তখন ক্ষেত্রগুলি 'ডাউনলোড' এবং 'লিসটেনস' উপস্থিত হবে। যাইহোক, এখন একটি ক্যোয়ারী চালানোর চেষ্টা করার ফলে ডামি ক্ষেত্রগুলি সমস্ত ডামি ক্ষেত্র হওয়ার পরে একটি ত্রুটি ঘটবে। তাদের অস্তিত্ব নেই। এই ক্ষেত্রগুলির একমাত্র উদ্দেশ্য হুক_ভিউ_কোয়ারি_াল্টার () এর আমাদের প্রয়োগের দিকে ইঙ্গিত দেওয়া যা এর জন্য কয়েকটি প্রতিস্থাপনের দরকার।
- হুক_ভিউ_কোয়ারি_এল্টার প্রয়োগ করুন ()
কৌশলটি এখানে প্রদত্ত ক্যোয়ারিতে 'ডাউনলোড' বা 'লিসটেনস' ক্ষেত্র অন্তর্ভুক্ত রয়েছে তা পরীক্ষা করা। যদি এটি হয় তবে আমরা ক্ষেত্রগুলি ক্যোয়ারী থেকে সরিয়ে দেব এবং তাদের সাবকিউয়ের সাথে প্রতিস্থাপন করব। এই ফাংশন বাস্তবায়ন নীচের হিসাবে যায়।
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;
}
}
}
}
নোট করুন যে আমরা সাবকোয়ারির জন্য মুছে ফেলা ক্ষেত্রের উপনামটি পুনরায় ব্যবহার করছি। এইভাবে, ভিউজগুলি ভাববে যে সাবকিউরিটি থেকে প্রত্যাবর্তিত মানটি আসলে ডামি ক্ষেত্র থেকে আসে (যা সর্বোপরি বিদ্যমান নেই)।
তা হ'ল আমরা কোনও কার্টেসিয়ান যোগ দিচ্ছি না এবং 'ডাউনলোড' এবং 'শ্রবণ' উভয়ই সঠিকভাবে গণনা করা হচ্ছে।