Jelenlegi hely

Felfedett szűrős nézetek találatlistájának megjelenítése csak szűrés után

CSÉCSY László képe

Adott egy (Views2) nézet, ami tetszőleges elemeket listáz, valamint rendelkezik legalább egy felfedett szűrővel. A feladat: a találati lista helyett üres szöveg megjelenítése, amíg nincs megadva szűrőfeltétel. A megoldás egyik fele megtalálható a drupal.org fórumán, csakhogy ez nem tökéletes. Mindaddig jól működik, míg a felfedett szűrők csak szövegmezőkből állnak össze - azonban előfordul, hogy egy legördülőként megjelenített, nem kötelezően kitöltendő taxonómia-szűrőt használunk, amelynek első, „üres” eleme pl. <All>. Ez az érték PHP-ben All-ként jelenik meg, azaz a fenti kódban ellenőrzött tömb nem lesz üres, azaz a találati lista akkor is megjelenik, ha egy felfedett szűrőnk legördülőként volt megjelenítve, s kitöltése nem kötelező. Alább egy megoldás, ami ilyen esetekben is pontosan működik.

  1. A nézet szerkesztésénél vegyünk fel egy Általános: Null argumentumot.
  2. A Műveletvégzés, ha az argumentum nincs jelen rádiógombot állítsuk Alapértelmezés szerinti argumentum megadása értékre.
  3. Az alapértelmezés szerinti argumentum típusa rádiógombot állítsuk Rögzített bejegyzés értékre.
  4. Az Ellenőrző legördülőből válasszuk a PHP kód lehetőséget.
  5. A PHP ellenőrző kód szövegdobozba írjuk/másoljuk be a következő kódot:
    $is_filtered = FALSE;
    foreach ($view->filter as $filter) {
      if ($filter->options['exposed']) {
        if (!empty($view->display[$view->current_display]->handler->handlers['filter'][$filter->options['field']]->value)) {
          $is_filtered = TRUE;
          break;
        }
      }
    }
    return $is_filtered;
  6. A Műveletvégzés, ha az argumentum érvénytelen legördülőt állítsuk az Üres szöveg megjelenítése értékre.

Haladóknak egy kis magyarázat: a fenti kód végigmegy a nézethez rendelt összes szűrőfeltételen, s ha felfedett szűrővel van dolga, megnézi, hogy a nézet éppen aktuális megjelenítésében az adott szűrőhöz tartozó feltétel kitöltött-e. A trükktarisznya tartalmához ez a megoldás tulajdonképpen csak annyival járul hozzá, hogy a nem kötelezően kitöltendő, legördülőként megjelenített felfedett szűrők esetében is az elvárt módon működik - sőt, kezeli azt az esetet is, mikor egy mezőt más néven jelenítünk meg a felhasználó/böngésző felé, mint amilyen névvel az valójában rendelkezik (pl. a tartalom címe tulajdonképpen egy név, s ezért title helyett átneveztük name-re).

Frissítés: Ha nem szeretnénk, hogy szűrés nélkül (üres szűrőfeltételek esetén) megjelenjen a nézetnél beállított üres szöveg, akkor a fenti kódbeli return $is_filtered; sor elé szúrjuk be a következő kódot (Kléri Bálint ötlete nyomán):

if (!$is_filtered) {
  $view->display_handler->set_option('empty', NULL);
}

Technológia: 

Hozzászólások

Köszönöm! Nagyon hasznos, bookmarkoltam :)