Rozhraní pro řazení výpisů

Školení, která pořádám

V Admineru je od začátku konzervativní rozhraní pro řazení výpisů – sloupce, podle kterých se má řadit, lze nastavit podobně jako podmínky vyhledávání. Lze tedy vybrat i více sloupců a u každého zvolit, zda se má podle něj řadit vzestupně nebo sestupně.

Na četné uživatelské žádosti jsem přidal i řazení kliknutím na záhlaví sloupce. Tento způsob má tu nevýhodu, že se výsledky dají seřadit jen podle jednoho sloupce, obvykle to ale stačí. Přemýšlel jsem, jak tento způsob rozšířit, aby se konzervativní rozhraní mohlo v zájmu zjednodušení odstranit, a na jedno řešení jsem přišel.

rozhraní pro řazení

Ke každému záhlaví sloupce jsem přidal šipky pro vzestupné a sestupné řazení (automaticky skrývané JavaScriptem). Kliknutím na ně se sloupec přidal do stávajícího řazení, kliknutím na samotné záhlaví se stávající řazení zrušilo. To možná není úplně intuitivní, ale vzhledem k tomu, že obvykle si člověk vystačí s jednosloupcovým řazením, a také vzhledem k tomu, že se použitý způsob řazení zobrazí u provedeného SQL dotazu, mě tato neintuitivnost tolik netrápila.

Mnohem víc mě trápila skutečnost, že při filtrování dat bylo potřeba nejprve nastavit podmínky a teprve v druhém kroku stanovit řazení. Zbytečně se tak pokládaly dva dotazy. Z tohoto důvodu jsem nakonec konzervativní způsob řazení zachoval a vynález dal k ledu.

Jakub Vrána, Dobře míněné rady, 2.10.2009, diskuse: 12 (nové: 0)

Diskuse

Marek:

Ackoli nechapu vetu o nutnosti dvou dotazu, vicesloupcove razeni je jednoduse resitelne pres zachytavani stisknuti CTRL (bez CTRL - radim dle jednoho, se stisknutym - pridam k razeni)

ikona Jakub Vrána OpenID:

Ctrl mě samozřejmě také napadlo, ale problém je, že Ctrl+klik v prohlížečích slouží k otevření odkazu do nového tabu, takže se nedá použít.

Pokud se třídění dělá nezávisle na vyhledávání, tak je potřeba nejprve vyhledat (1. dotaz) a pak teprve setřídit (2. dotaz).

Jan Garaj:

Na ctrl+klik je pekné riešenie:
<a href="<URL_SORTING_NORMAL>" onclick="function_ctrl_search(<ADD_SORTING_PARAM>); return false;>SORTING_PARAM</a>

Toto riešenie je pekné z toho dôvodu, že pokiaľ má používateľ zapnutý javascript reaguje JS funkcia (ta presmeruje na správnu url, kde sa pridá ďalšie filtrovanie) a pokiaľ nie sortuje sa normálne jednoparametrovo.

Pri používaní takýchto javascriptových rozšírení, by som odporučil na začiatok body vložiť kontrolu-upozornenie na funkčnosť javascriptu. Aby používateľ zbytočne nečakal vlastnosti, ktoré sú iba s podporou javascriptu.
<noscript><div class="warning">Javascript mate vypnuty ...</div></noscript>

ikona Jakub Vrána OpenID:

Opakuji, že Ctrl+klik je v prohlížečích zvykem používat pro jinou operaci (stejně jako Shift+klik a Alt+klik), takže změna výchozího chování zhoršuje použitelnost. Druhý důvod, proč je to nevhodné, je neintuitivnost – uživateli musíme dát návod, aby ho vůbec napadlo to vyzkoušet.

ikona v6ak:

Ale, dá se to řešit jinak. V UI by bylo tlačítko, které by nahradilo stisknutí shift/ctrl/alt - prostě tlačítko pro výběr více sloupců. Hmm, to už se dostáváme asi ke kompromisu.

ikona Jakub Vrána OpenID:

Přesně toto tlačítko popisuje článek :-).

ikona v6ak:

No fakt. Já jsem ten článek četl narychlo a přesného rozhraní jsem si nevšiml. Bylo mi jasné, že se to bude blížit původní variantě ("Hmm, to už se dostáváme asi ke kompromisu.") a taky že jo :D

David Grudl:

Myslim ze nikdo nebude klikat na "radici" sloupec se zamerem otevrit neco do druheho tabu.

ikona Jakub Vrána OpenID:

Já použití Ctrl nějakou dobu i zkoušel a právě proto, že jsem si jinak seřazené výsledky chtěl do nového tabu občas zobrazit, tak mě to začalo štvát.

kozotoč:

Stejně jako Marek taky nejsem moudrej, proč s tímto "vynálezem" se nedá jinak než spustit dva SQL dotazy. Mohl bys, prosí, Jakube vysvětlit? Díky

ikona Jakub Vrána OpenID:

Dva dotazy jsou potřeba v případě, kdy chceme řádky nějak omezit (vyhledat) a zároveň setřídit. Když se k tomu použijí dvě různé rozhraní (formulář pro vyhledávání a odkazy pro řazení), tak je to potřeba udělat nadvakrát.

Kajman:

Co v order by zachovat minulé řazení a jen na začátek přidat to aktuálně kliknuté? Ale to už by byly dotazy tři a lidé by museli klikat pozpátku :-)

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.