দর্শনে দুটি ক্ষেত্রের সংমিশ্রণের একক ফিল্টারটি প্রকাশ করুন


24

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

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


এই প্রশ্নটি একবার দেখুন: drupal.stackexchange.com/questions/42366/… সম্ভবত এটি আপনাকে সহায়তা করতে পারে। এবং না, আপনাকে একটি মডিউল তৈরি করতে হবে। ওসকার
ওসকর ক্যালভো


এই বৈশিষ্ট্যটি ভিউ মডিউলে নির্মিত। এটির জন্য জিরো প্রোগ্রামিং দরকার। এই ইউটিউব ভিডিওটি এটি কীভাবে ব্যবহার করতে হয় তার একটি সম্পূর্ণ উদাহরণ দেখায়।
asiby

উত্তর:


21

আমি অবশেষে থেকে একটি সমাধান পেয়েছি এই । ব্লগার ব্যক্তিগতভাবে ব্যবহার করা হলেও আমি দেওয়া দ্বিতীয় প্রাথমিক সমাধানটি অনুসরণ করেছিলাম hook_views_query_alter()

  1. মডিউল ইনস্টল করা ভিউ ফিল্টার পপুলেশন
  2. দুটি "ফিল্টার নেম" এবং "লাস্ট নেম" ফিল্টার যুক্ত করেছেন (উভয়ই প্রকাশ করা উচিত নয়) এবং সেগুলি একটি ওআর ফিল্টার গ্রুপে যুক্ত করেছেন (ভিউ 3 এটিকে সমর্থন করে)। উভয় ক্ষেত্রের জন্য আমাকে অপারেটরটি "কোনও শব্দ ধারণ করে" ব্যবহার করতে হয়েছিল, অন্যথায় কোয়েরি আমাকে কোনও পছন্দসই ফলাফল দেয়নি।
  3. একটি ফিল্টার তৈরি করেছে "গ্লোবাল: ফিল্টার পপুলেট করুন", এর মধ্যে দুটি ক্ষেত্র যুক্ত করেছে এবং এটি উন্মুক্ত করেছে।

এটি আমাকে হার্ড কোডিং ছাড়াই একটি দ্রুত সমাধান দিয়েছে।
এখানে অন্যান্য সহায়ক উল্লেখ।


আমার মনে হয় না যে আপনাকে দ্বিতীয় ধাপটি ব্যবহার করার দরকার আছে - আমি মডিউলটি ইনস্টল করেছিলাম এবং একটি "গ্লোবাল: সংযুক্ত ক্ষেত্র ফিল্টার" ব্যবহার করি যা প্রকাশিত হয়েছিল। আমি দুটি সমন্বিত ক্ষেত্রের সেটিংসের মধ্যে দুটি ক্ষেত্র নির্বাচন করেছি।
ল্যারিন - CEDC.org

13

আমার ইনস্টলেশনতে, ভিউজ 7.x-3.6 সহ ডি 7, আপনি "গ্লোবাল: একত্রিত ফিল্ড ফিল্টার" ফিল্টার যুক্ত করতে পারেন যা আপনার প্রয়োজন মতো ঠিক করবে, ব্যবহারকারীকে একক ফিল্টার সহ একাধিক ক্ষেত্রে অনুসন্ধান করতে দেয়।


1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
ফ্রেজরাস

5

এটা সত্যিই সহজ।

  1. একটি ফিল্টার যোগ ক্লিক করুন।
  2. "গ্লোবাল: ফিল্ড ফিল্টার একত্রিত করুন" নির্বাচন করুন
  3. নির্দেশাবলী অনুসরণ করুন.

ধন্যবাদ।


2

বাক্সের বাইরে কাজ করে

যাওয়ার সহজতম উপায় হ'ল 'অনুসন্ধানের শর্তাদি' ফিল্টার ব্যবহার করা যা ভিউজের মূল কার্যকারিতা । এটি সত্তার সমস্ত ক্ষেত্র অনুসন্ধান করবে এবং ফলাফলটি ফিরিয়ে দেবে, কোনও অতিরিক্ত মডিউল প্রয়োজন নেই!

  1. আপনার ভিউতে যান
  2. দেখার জন্য একটি নতুন ফিল্টার যুক্ত করুন
  3. 'অনুসন্ধান: অনুসন্ধানের শর্তাদি' নির্বাচন করুন

এটি চালিয়ে যায়, আর কিছুই করার নেই (আপনি যদিও এটি প্রকাশ করতে চাইতে পারেন)

এটি খুব ভাল অভিনয় করে।


0

আপনার একক শর্তটি আপনার একাধিক ক্ষেত্রগুলিতে প্রসারিত করতে আপনি hook_views_pre_execute (& দেখুন) ব্যবহার করতে পারেন

/**
 * Recursive looks for mentioning of $fname as field of in query QueryConditionInterface::conditions()
 * 
 * @param array $cond result of QueryConditionInterface::conditions to search in
 * @param string $fname a name oof field we are looking for
 * @param array $res result array containing a references of conditions having $fname
 * @param integer $rec_lvl level of recursion
 * 
 * @return array an array containing $fname mentioned in condition $res[]['field'] == $fname
 */
function dolynskyi_help_func_find_field_condition(&$cond, $fname, &$res = array(), &$rec_lvl = 0) {
    $numeric_keys = array_filter(array_keys($cond), function($k) {return is_int($k) || (substr($k, 0, 1) !== '#');});
    $rec_lvl++;
    foreach($numeric_keys as $numkey) {
        $t = gettype($cond[$numkey]['field']);
        if($t == 'string') {
            if($cond[$numkey]['field'] == $fname) {
                $res[] = &$cond[$numkey];
            }
        } elseif($t == 'object') {
            dolynskyi_help_func_find_field_condition($cond[$numkey]['field']->conditions(), $fname, $res, $rec_lvl);
        }
    }
    $rec_lvl--;
    return $res;
}

function dolynskyi_help_func_views_pre_execute(&$view) {
    if($view->name == 'appraisals_special_global_access') { // view name we wanna extend
        $fname = 'field_data_field_ap2_employee.field_ap2_employee_target_id'; // field we look for to use as source of extending
        $search = &dolynskyi_help_func_find_field_condition($view->build_info['query']->conditions(), $fname);
        foreach($search as &$v) { // looping found field references
            $or = db_or(); 
            $or->condition($v['field'], $v['value'], $v['operator']); //repeating existing field condition
            $or->condition('field_data_field_ap2_employee.field_ap2_employee_target_id', array('711'), 'IN'); //adding any extra condition
            $v = array('value'=>null, 'operator'=>'IS NULL', 'field'=>$or); // wrapping up simple condition for $fname to multiple with $fname + our extra field via OR logic
            unset($v);
        }
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.