Felfedett űrlap: felhasználóbarátabb keresés?

DruTa képe

Üdv!

Felfedett űrlap: felhasználóbarátabb keresés?

1. Hogyan lehet megoldani, hogy a fókusz ott maradjon, mert most kiugrik a fókusz a mezőből, ha egy pillanatra megállok, vagy javítani akarok.

2. Hogyan lehet kikapcsolni (böngésző?) az előzmény legördülőjét, azt akarom, hogy ahogy beírom a betűket, ne jelenjen meg a beviteli mező alatt az az idétlen legördülő, ami ráadásul takarja a beviteli mezőt, hanem csak a beviteli mező látszódjon azzal, amit beírok és csak a táblázatban lássam a szűkülést.

Bővebben:

A Nézet minden erre vonatkozó beállítását kipróbáltam, de nem sikerült befolyásolnom megfelelően a Felfedett űrlap működését, amikor Automatikus elküldésre van állítva.

Az a baj vele, hogy amikor egy felfedett cím mezőnél elkezdem beírni a betűket, ha elég gyors vagyok és nem állok meg közben, akkor jó, de kiesik a fókusz és úm. kezdhetem elölről.

Csak az a cél, hogy amikor elkezdem írni a címet, a táblázatban elkezdjenek szűkülni a találatok. Ez meg is van, de ha megállok közben, akkor kiugrik a fókusz, és pl. nem tudok visszafelé törölni, hanem ilyenkor mindig bele kell kattintanom, hogy folytatni tudjam a keresés módosítását.

Drupal verzió: 
aboros képe

de itt van két modul ami ilyesmivel kapcsolatos:
https://www.drupal.org/project/better_exposed_filters - ez sokat tud, ha exposed filter alapú keresést építesz, mindenképpen hasznos.
https://www.drupal.org/project/datatables - ez meg egy egyszerűbb instant kereső táblázatokhoz, ez is nagyon praktikus tud lenni bizonyos helyzetekben.

0
0

-
clear: both;

DruTa képe

Kösz, kipróbálom!

0
0
DruTa képe

A dataTables modul pont úgy csinálja a keresést a Nézetben, ahogy szerettem volna. A másikat még nem néztem. Jó nagy modul, de ha ez kell, hát ez kell.
Kösz!

0
0
DruTa képe

Angolul vannak a szavak, pl. Search, Previous, ezeket nem lehet cserélni a Nyelvi résznél, mivel úgy látszik nincs "nyelvesítve" a modul, ezért kénytelen voltam a JS file-ban átírni ezeket.
De ez gondolom nem intelligens megoldás.

Mi lenne a helyes menet, amit kevés programozói ismerettel is meg lehet csinálni?

0
0
Balu Ertl képe

DataTables 7.x-1.2 és 8.x-1.0-rc1 lefordítva, hamarosan meg kell jelenniük a Localization Update modulod Elérhető fordítási frissítések oldalán. Hogy az általad említett JS-fájlokban is frissülni fog-e, azt csak valószínűsíteni tudom, tesztelés után kiderül.

0
0
DruTa képe

A modul úgy-ahogy le van fordítva, én a használat közben megjelenő szavakra gondolok, az nincs, amit más ilyen esetben a Nyelvek résznél egyedileg le lehet cserélni, de ennek nem jelennek meg ott a szavai:
admin/config/regional/translate/translate

0
0
Balu Ertl képe

Kicsit belemélyedve úgy tűnik, hogy D7-en ezek a szavak nem magából a Drupal-modulból, hanem a külső függvénykönyvtárból jöhetnek: a dataTables/media/js/jquery.dataTables.js fájl 8906. sorában átírva változik a frontenden is:

Képernyőkép a modulról 7-es és 8as Drupalon

Így sajnos a Localization Update D7-en nem oldja meg önmagában szerintem, hiába van 100%-osan lefordítva a modul. Érdekes ugyanakkor, hogy a D8-as verzióban ez meg van oldva, ott magyarul jelennek meg (lásd a fentebbit).

0
0
DruTa képe

Kösz, akkor marad a JS-ben fordítás...

Egyébként van más baj is vele, hiába van kikapcsolva a soronkénti színezés (csíkozás), akkor is csíkoz, ráadásul az első oszlopot kékkel, tehát ebbe is kézileg kell belenyúlni.

És az sem állítható, hogy a táblázatnak melyik oszlopában keressen, hanem minden szóban keres, így viszont ha egy címlistára kell, akkor problémás, mivel nem csak a címben egyező szavakra ad találatot, ezt viszont már nem tudom belenyúlással, mert annyira nem tudok JS-ül.

0
0
aboros képe

mivel a datatables csak egy kis js "kereső" ami arra van, hogy táblázatokban keressen, ezért fogalma sincs a felfedett szűrőkről vagy semmi egyébről, azt tudja amit az eredeti drupaltól független js "plugin" is tud és kész. rá tudod engedni egy táblázatra ő meg varr rá egy "keresőt". bizonyos speciális helyzetekben hasznos, máskor tök értelmetlen használni. ez nem a modul hibája, hanem "by design".

0
0

-
clear: both;

DruTa képe

A csíkozás azért az annak tűnik, a többiben nyilván igazad van.

Bonyolult lenne rávenni, hogy csak a címben keressen? Tehát inkább módosítani érdemes ezt a modult, vagy keresni másikat?

0
0
aboros képe

illetve használtam még a datatables js plugint kézműves html oldalban, ami egyátalán nem is drupal. https://datatables.net erre nézz szét szerintem működésbeli finomítások ügyében, ez a js plugin hivatalos otthona, a drupal modul "csak" implementálja ezt a plugint. biztos van a pluginnak valami megoldása arra, hogy szabályozzad a keresést, hogy miben meg hogyan keressen, de ez drupaltól független dolog végülis. a kinézete, hogy most csíkoz, nem csíkoz, az meg végképp csak css kérdése.

0
0

-
clear: both;

DruTa képe

Épp ma merült fel bennem a gyanú, hogy eddig is csak azért működött ez a dolog, mert a Nézetben megjelentek a táblázat sorai, tehát ha mint írtad (azt hiszem lényegében ezt írtad) nem az adatbázisból, nem a Nézetből keresi a dolgokat, csak az oldalon éppen megjelenő táblázatban. Tehát ha mondjuk van 100 sorom, amiből 10 sort jelenítek meg, akkor csak ebben keres. Ezt ki fogom próbálni, csak még nincs 10+ teszt sorom, fel kell töltenem kamu adatokkal.

Ha így van, akkor ez nem is lesz nekem jó sajnos, mert én fordított megoldást akarok, tehát ne legyen megjelenítve semmi, és elkezdve beírni pl. a cím szavait, elkezdjenek megjelenni az ahhoz illő találatok.

0
0
aboros képe

hanem csak van egy durpal modul, ami "úgy printeli ki" a táblázatot, hogy ráereszti utána ezt a jst. (https://datatables.net/examples/index itt egy csomó példa, hogy mennyi mindent tud maga az a js) ennek a "kis" js pluginnak vagy nemtom minek mondjamnak nem minden létező lehetséges beállítását tették bele a drupal modulba.

de te magad is "kézzel" megcsinálhatod amit a modul csinál, saját modulból vagy akár a sminkedből. és akkor úgy hívod be a jst, ahogy akarod. (már amit tud a datatables, de azért jósok dolgot tudsz állítani abba is)

a lényeg, hogy fog egy <table> teget ez a kis js, és megturbósítja lapozóval, keresővel, rendezővel, amivel akarod. de ha magának a drupal viewnak a lapozóját használod, abban ez nem fog keresni. (hacsak nem valami ajaxal okosan, de mikor utoljára próbáltam, nem volt benne ilyen)

szóval az összes elemet kell a nézetnek mutatnia táblázatban és a datatables.js re bízni a lapozást is meg mindent. néhányszáz vagy párezer sorral még működik talán, de aztán már nem a legjobb.

0
0

-
clear: both;

DruTa képe

Kár-kár-kár...

Akkor ki kell találnom, hogy az alaprendszer + Views felfedett szűrője miért nem ilyen szépen muzsikál, valószínűleg mert az nem egy már leképzett, kint lévő táblázatsorokban keres, szűr, hanem az egész adatbázisban és ezért akadozik, ugrál, és dobja ki a fókuszt.

0
0
DruTa képe

Azt sikerült elérnem, hogy később ugorjon ki a fókusz, de azért kiugrik.
Ezt így értem el:

.keyup(function(e) {
if ($.inArray(e.keyCode, discardKeyCode) === -1) {
timeoutID = setTimeout($.proxy(triggerSubmit, this.form), 500);

Itt az 500-as értéket növelem.

Ez a ...\sites\all\modules\ctools\js\auto-submit.js file-ban található.

De ez nem szép megoldás, ráadásul gondolom ezentúl minden AJAX műveletet ez befolyásolni fog.

Ráadásul ez nem csak a beviteli mezőben késlelteti a fókusz kiugrását, hanem az eredmény mutatását is ugyanúgy, tehát ennyi idő múlva lép ki a kurzor a mezőből, de sajnos ennyi ideig nem is auto-submit, azaz nem mutatja a találatot.

0
0
DruTa képe

Úgy szeretném, mint pl. az https://www.aqua.hu/ keresőjénél, azaz elkezdem beírni a szót, és ahogy haladok szűkül a találati lista, ami automatikusan megjelenik alul.
Ezt tudja is a felfedett szűrő a Views-ban, megjelennek a találatok a táblázatos nézetben, csakhogy az https://www.aqua.hu/ oldalon és sok más oldalon a kurzor ott marad, ha leállok a beírással, majd kis szünet után tudom folyatni a beírással, a Views-nál viszont ha megállok egy pillanatra, akkor a kurzor eltűnik és vissza kell kattintanom, de mivel ezt nem mindig veszi észre az ember, mindenféle bénázást történik közben. Pl. megnyomom a Backspace billentyűt, hogy töröljek egy betűt, de mivel nem ott van már a fókusz, a böngésző ablakában megy vissza egy korábbi ablakra.

Valószínűleg az AJAX az egész Views táblát a kereső beviteli mezővel együtt újra bedobja, azaz frissíti és ezért ugrik ki.

Valahogy rá kéne venni, hogy ezt a keresőmezőt hagyja ki a frissítésből.

Talán ezt kéne beírnom valahová:

'#attributes' => array('class' => array('ctools-auto-submit-exclude')),

De hová?

Ez az infó az auto-submit.js file 22. sorában van.

0
0
DruTa képe

A megoldást (bár kerülőút, de jobb, mint a semmi) itt találtam:

https://www.drupal.org/node/1217948

[Edit: Well, I realized I didn't have the 'Use AJAX' toggle on. Setting that to on, then embedding a block for the exposed filters, and placing that block on the appropriate page, all together, works for this feature and allows the textfield to keep the keyboard highlight. It'd still be nice if it could be done in a single block, though - is there any way to separate out the exposed filters from the rest of the view so they don't need to be refreshed?]

1
0