Ha felfedett szűrővel ellátott nézeteket készítünk, időnként felmerül az igény, hogy csak akkor jelenítsünk meg találatokat, ha a felhasználó már adott meg szűrőfeltételeket. Boobaa írt erről egy bejegyzést, az ott bemutatott megoldás szépen teszi a dolgát.
Viszont mi a helyzet, ha csak akkor szeretnénk az üres szöveget megjeleníteni, ha már adtunk meg valamilyen szűrőfeltételt, és arra nem született találat? Módosítanám tehát a feladatot: csak a felfedett szűrők megjelenítése mindaddig, amíg a felhasználó nem adott meg szűrőfeltételt. Ezután vagy a találati listát kapja, vagy pedig az üres szöveget.
A megoldás egy kis hookkal lehetséges, íme:
<?php /** * Implementation of hook_views_pre_render() */ function mymodule_views_pre_render(&$view) { if ($view->name == 'myview' && $view->current_display == 'page_1' && !count($view->exposed_input)) { $view->display_handler->set_option('empty', NULL); } } ?>
A hook_views_pre_render() minden nézet kimenetének előállítása előtt lefut.
Először is írnunk kell egy feltételt, hogy csak a nekünk megfelelő view és display esetén legyen érvényes a változtatásunk, ezután megvizsgáljuk, hogy érkezett-e input felfedett szűrőn keresztül. Amennyiben nem, az üres szöveg értékét NULL-ra állítjuk.