विचारों में दो क्षेत्रों के संयोजन के एकल फ़िल्टर को उजागर करें


24

मेरे पास दो उपयोगकर्ता प्रोफ़ाइल फ़ील्ड हैं "अंतिम नाम" और "पहला नाम"। मेरे पास उपयोगकर्ता सूची दृश्य भी हैं। मैं "नाम" को फ़िल्टर के रूप में उजागर करना चाहता हूं जो अंतिम नाम और प्रथम नाम दोनों को खोज सकता है। मैं उन दो क्षेत्रों के संयोजन का एकल फ़िल्टर कैसे कर सकता हूं? क्या मैं इसे UI से देख सकता हूं?

एक संभावित तरीका एक और प्रोफ़ाइल फ़ील्ड "नाम" बनाना है जो प्रपत्र में छिपा होगा। उपयोगकर्ता सहेजने पर, मैं दो फ़ील्ड मानों को "नाम" फ़ील्ड में संयोजित करूंगा और फिर इसे फ़िल्टर के रूप में विचारों में प्रकट करूंगा। लेकिन यह समाधान हार्ड कोडिंग है और इसे हुक लिखने की आवश्यकता है।


इस प्रश्न पर एक नज़र डालिए drupal.stackexchange.com/questions/42366/…। शायद यह आपकी मदद कर सकता है। और नहीं, आपको एक मॉड्यूल बनाना होगा। ओस्कर
ऑस्कर कैल्वो सेप


यह फीचर व्यू मॉड्यूल में बनाया गया है। इसके लिए शून्य प्रोग्रामिंग की आवश्यकता होती है। यह यूट्यूब वीडियो इसका उपयोग करने के तरीके पर एक पूर्ण उदाहरण दिखाता है।
asiby

जवाबों:


21

मैं अंत में से एक समाधान मिल गया यह । मैंने दूसरे प्राथमिक समाधान की पेशकश की, हालांकि ब्लॉगर व्यक्तिगत रूप से उपयोग किया जाता है hook_views_query_alter()

  1. मॉड्यूल दृश्य फिल्टर स्थापित करें आबाद
  2. दो फ़िल्टर "प्रथम नाम" और "अंतिम नाम" (दोनों को उजागर नहीं किया जाना चाहिए) और उन्हें एक OR फ़िल्टर समूह में जोड़ा गया (दृश्य 3 समर्थन करता है)। मुझे दोनों क्षेत्रों के लिए ऑपरेटर "किसी भी शब्द शामिल हैं" का उपयोग करना पड़ा, अन्यथा क्वेरी ने मुझे कोई वांछित परिणाम नहीं दिया।
  3. एक फ़िल्टर "Global: populate filter" बनाया, इसमें दो फ़ील्ड जोड़े और इसे उजागर किया।

इसने मुझे हार्ड कोडिंग के बिना एक त्वरित समाधान दिया।
यहाँ अन्य उपयोगी संदर्भ है।


मुझे नहीं लगता कि आपको चरण 2 का उपयोग करने की आवश्यकता है - मैंने मॉड्यूल स्थापित किया और "ग्लोबल: कॉम्बिनेशन फ़ील्ड फ़िल्टर" का उपयोग किया जो कि उजागर हुआ था। मैंने उस संयुक्त फ़ील्ड की सेटिंग में दो फ़ील्ड्स का चयन किया।
लारिन - CEDC.org

13

मेरे इंस्टालेशन पर, D7 के व्यूज़ 7.x-3.6 के साथ, आप एक फ़िल्टर जोड़ सकते हैं जो कि "ग्लोबल: कॉम्बिनेशन फिल्टर्स फ़िल्टर" है, जो ठीक वही होगा जो आपको चाहिए, उपयोगकर्ताओं को एक ही फ़िल्टर के साथ कई फ़ील्ड्स पर खोजने की अनुमति देता है।


1
यह स्वीकृत उत्तर होना चाहिए
frazras

5

यह वास्तव में आसान है।

  1. एक फिल्टर जोड़ें पर क्लिक करें।
  2. "ग्लोबल: कॉम्बिनेशन फील्ड फिल्टर" चुनें
  3. निर्देशों का पालन करें।

धन्यवाद।


2

बॉक्स से बाहर काम करता है

जाने का सबसे आसान तरीका 'खोज शब्द' फ़िल्टर का उपयोग करना है, जो दृश्य कोर कार्यक्षमता है । यह इकाई के सभी क्षेत्रों के माध्यम से खोज करेगा और परिणाम लौटाएगा, कोई अतिरिक्त मॉड्यूल आवश्यक नहीं है!

  1. अपने देखने के लिए जाओ
  2. देखने के लिए एक नया फ़िल्टर जोड़ें
  3. 'खोज: खोज शब्द' चुनें

इसे करने के लिए, कुछ और नहीं (हालांकि आप इसे उजागर करना चाह सकते हैं)

यह बहुत अच्छा प्रदर्शन करता है।


0

आप अपनी एकल स्थिति को अपनी इच्छानुसार कई क्षेत्रों में विस्तारित करने के लिए हुक_ साक्षात्कार_प्रकार_एक्सच्यूट (और $ दृश्य) का उपयोग कर सकते हैं

/**
 * 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);
        }
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.