İki alanın kombinasyonunun tek bir filtresini görünümlerde göster


24

"Soyadı" ve "Ad" olarak iki kullanıcı profili alanım var. Ayrıca bir kullanıcı listesi görünümlerim var. "Ad" ı soyadı ve adı sorabilen filtre olarak göstermek istiyorum. Bu iki alanın kombinasyonunun tek bir filtresini nasıl yapabilirim? UI görünümlerinden oluşturabilir miyim?

Olası yollardan biri, formda gizlenecek başka bir profil alanı "Ad" oluşturmaktır. Kullanıcı kaydında, iki alan değerini "Ad" alanına birleştirir ve ardından görünümlerde filtre olarak gösterirdim. Ancak bu çözüm kodlama zordur ve kancalar yazması gerekir.


Bu soruya bir göz atın drupal.stackexchange.com/questions/42366/… Belki size yardımcı olabilir. Ve hayır, bir modül yapmak zorundasın. Oskar
Oskar Calvo


Bu özellik görünüm modülünde yerleşiktir. Sıfır programlama gerektirir. Bu youtube videosu nasıl kullanılacağına dair tam bir örnek gösterir.
asiby,

Yanıtlar:


21

Sonunda bir çözüm var bu . Blogcu kişisel olarak kullanılsa da, sunulan ikinci birincil çözümü izledim hook_views_query_alter().

  1. Modül yüklendi Görüntüleme filtreleri populate .
  2. iki filtre "Ad" ve "Soyadı" (her ikisi de gösterilmemelidir) ekledi ve bunları bir OR filtre grubuna ekledi (Gösterim 3 bunu destekliyor). Her iki alan için da "Herhangi bir kelime içeriyor" işlecini kullanmak zorunda kaldım, aksi halde sorgu bana istenen sonucu vermedi.
  3. "Global: populate filters" adlı bir filtre oluşturdu, iki alanı buna ekledi ve açığa çıkardı.

Bu bana zor kodlama olmadan hızlı bir çözüm verdi.
İşte diğer yararlı referans.


Adım 2'yi kullanmanız gerektiğini düşünmüyorum - Modülü kurdum ve açığa çıkaran "Global: kombine alanlar filtresi" kullandım. Bu birleşik alanın ayarlarında iki alanı seçtim.
Laryn - CEDC.org

13

Yüklememde, Gösterim 7.x-3.6'ya sahip D7, tam olarak ihtiyacınız olanı yapacak, kullanıcıların tek bir filtre ile birden çok alanda arama yapmalarına olanak tanıyan "Genel: Alanlar süzgecini birleştir" olan bir filtre ekleyebilirsiniz.


1
Bu kabul edilen cevap olmalıdır
frazras

5

Bu gerçekten kolay.

  1. Filtre ekle'ye tıklayın.
  2. "Genel: Alan filtresini birleştir" i seçin
  3. Talimatları takip et.

Teşekkürler.


2

Kutunun dışında çalışır

Gitmenin en kolay yolu, Çekirdek işlevselliği olan 'Arama Terimleri' filtresini kullanmaktır . Varlığın tüm alanlarını arayacak ve sonucu verecek, ekstra modül gerekmez!

  1. Görünümüne git
  2. Görüntülemek için yeni bir filtre ekleyin
  3. 'Ara: Arama Terimleri' seçeneğini seçin

İşte bu, yapacak başka bir şey yok (yine de ortaya çıkarmak isteyebilirsiniz)

O da çok iyi bir performans sergiliyor.


0

Tek koşulunuzu istediğiniz birden çok alana genişletmek için hook_views_pre_execute (& $ view) komutunu kullanabilirsiniz.

/**
 * 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);
        }
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.