it-swarm-ko.tech

뷰에서 두 필드 조합의 단일 필터 노출

"성"과 "이름"이라는 두 가지 사용자 프로필 필드가 있습니다. 또한 사용자 목록보기가 있습니다. 성과 이름을 모두 검색 할 수있는 필터로 "이름"을 표시하고 싶습니다. 이 두 필드를 조합하여 단일 필터를 사용하려면 어떻게해야합니까? 뷰 UI에서 만들 수 있습니까?

한 가지 가능한 방법은 양식에 숨겨 질 "이름"이라는 다른 프로필 필드를 만드는 것입니다. 사용자 저장시 두 필드 값을 "이름"필드에 결합한 다음 뷰에서 필터로 표시합니다. 그러나이 솔루션은 하드 코딩이므로 후크를 작성해야합니다.

24
Sithu

결국 this 에서 해결책을 얻었습니다. 블로거가 개인적으로 hook_views_query_alter()을 사용했지만 제공되는 두 번째 기본 솔루션을 따랐습니다.

  1. 모듈 설치 필터보기 표시 .
  2. 두 개의 필터 "이름"과 "성"(둘 다 노출되지 않아야 함)을 추가하고 OR 필터 그룹 (보기 3에서 지원)입니다. 연산자를 사용해야했습니다. " 두 필드 모두에 대해 Word를 포함합니다. 그렇지 않으면 쿼리에서 원하는 결과를 얻지 못했습니다.
  3. "전역 : 필터 채우기"필터를 작성하고 여기에 두 필드를 추가하고 노출했습니다.

이것은 하드 코딩없이 빠른 솔루션을 제공했습니다.
Here 다른 유용한 참고 자료입니다.

21
Sithu

내 설치에서 Views 7.x-3.6이 포함 된 D7에서 "전역 : 필드 결합 필터"필터를 추가하면 필요한 것을 정확하게 수행 할 수 있으므로 사용자는 단일 필터로 여러 필드를 검색 할 수 있습니다.

13
Mona

정말 쉽습니다.

  1. 필터 추가를 클릭하십시오.
  2. "글로벌 : 필드 결합 필터"를 선택하십시오.
  3. 지시를 따르다.

감사.

5
Shitanshu Mishra

즉시 사용 가능

가장 쉬운 방법은 '검색어' 필터 인 뷰 핵심 기능 . 엔티티의 모든 필드를 검색하여 추가 모듈이 필요하지 않은 결과를 반환합니다!

  1. 보기로 이동
  2. 볼 새 필터 추가
  3. '검색 : 검색어'를 선택하십시오

그게 다야 할 일이 없다. (노출하고 싶을 수도있다)

너무 잘 수행합니다.

2
Larzan

Hook_views_pre_execute (& $ view)를 사용하여 단일 조건을 원하는 여러 필드로 확장 할 수 있습니다

/**
 * 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);
        }
    }
}