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

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.
- A nézet szerkesztésénél vegyünk fel egy Általános: Null argumentumot.
- A Műveletvégzés, ha az argumentum nincs jelen rádiógombot állítsuk Alapértelmezés szerinti argumentum megadása értékre.
- Az alapértelmezés szerinti argumentum típusa rádiógombot állítsuk Rögzített bejegyzés értékre.
- Az Ellenőrző legördülőből válasszuk a PHP kód lehetőséget.
- 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;
- 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); }
- 1114 Budapest, Kosztolányi Dezső tér 12. II/1a.
- +36 20 3891634, +36 30 2995579
- info@kybest.hu
