Felfedett szűrős nézetek találatlistája és az "üres szöveg"

Bálint képe

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">&lt;?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">(&amp;</span><span style="color: #0000BB">$view</span><span style="color: #007700">) {<br />  if (</span><span style="color: #0000BB">$view</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name </span><span style="color: #007700">== </span><span style="color: #DD0000">'myview' </span><span style="color: #007700">&amp;&amp; </span><span style="color: #0000BB">$view</span><span style="color: #007700">-&gt;</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">&amp;&amp; !</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$view</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">exposed_input</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">$view</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">display_handler</span><span style="color: #007700">-&gt;</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">?&gt;</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.

Címkék: