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:
<span style="color: #000000"><span style="color: #0000BB"><?php<br /></span><span style="color: #FF8000">/**<br /> * Implementation of hook_views_pre_render()<br /> */<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">mymodule_views_pre_render</span><span style="color: #007700">(&</span><span style="color: #0000BB">$view</span><span style="color: #007700">) {<br /> if (</span><span style="color: #0000BB">$view</span><span style="color: #007700">-></span><span style="color: #0000BB">name </span><span style="color: #007700">== </span><span style="color: #DD0000">'myview' </span><span style="color: #007700">&& </span><span style="color: #0000BB">$view</span><span style="color: #007700">-></span><span style="color: #0000BB">current_display </span><span style="color: #007700">== </span><span style="color: #DD0000">'page_1'<br /> </span><span style="color: #007700">&& !</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$view</span><span style="color: #007700">-></span><span style="color: #0000BB">exposed_input</span><span style="color: #007700">)) {<br /> </span><span style="color: #0000BB">$view</span><span style="color: #007700">-></span><span style="color: #0000BB">display_handler</span><span style="color: #007700">-></span><span style="color: #0000BB">set_option</span><span style="color: #007700">(</span><span style="color: #DD0000">'empty'</span><span style="color: #007700">, </span><span style="color: #0000BB">NULL</span><span style="color: #007700">);<br /> }<br />}<br /></span><span style="color: #0000BB">?></span></span>
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.