Rendezés magyar ékezetekkel

2009.06.05. 22:53 stack

A táblázatoknál kevés adat esetén gyakori, hogy a rendezést nem a szerver, hanem a kliens oldalon végezzük. Amellett, hogy a szervert is kíméljük, még gyorsabb is. Szöveges mezők esetében a rendezés az ékezetekre nincs felkészítve.

Sajnos a Store-ban nem az összehasonlító függvényt írhatjuk felül, hanem az összehasonlításhoz használt értéket. Szerintem az előbbi verzió rugalmasabb. Lásd. PHP usort függvényét.

Mindenesetre a magyar ékezetes szavak rendezését így is könnyen megvalósíthatjuk. Nem kell mást tenni, minthogy az adott szó helyett vizsgáljuk meg az ékezet nélküli verzióját. (és ha már ott vagyunk, akkor a kis-nagy betű különbségeket is hagyjuk figyelmen kívül)

Először az átalakító függvény:

function asWithoutAccent(s) {
    var from = "ÁÉÚŐŰÓÜÖÍáéúőűóüöí", to ="AEUOUOUOIaeuououoi";
    var ret = '';
    for (var i = 0, len = s.length; i < len; i++) {
        var t = from.indexOf(s.charAt(i));
        ret += t==-1 ? s.charAt(i) : to.charAt(t);
    }
    return ret.toUpperCase();
}

Egy Store, ahol az egyik mezőnél a fenti függvény segítségével rendezünk:

new Ext.data.SimpleStore({
    fields: [{name: 'full_name', sortType: asWithoutAccent}, ...],
    ...
});

4 komment

Címkék: magyar sort store

A bejegyzés trackback címe:

https://extjs.blog.hu/api/trackback/id/tr941166464

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

forraikris 2009.06.07. 19:34:01

Szia!

Buta kérdés, de a fenti kód hogyan rendezi mondjuk az "A" , "Á", és megint "A" string-et?
Nem lehet, hogy AÁA lesz belőle ?

Én is pont a napokban kerestem ilyen rendezésre megoldást, de ennyire elegánsat nem találtam - eddig! :-)

stack 2009.06.10. 18:21:15

Általában az a célom egy-egy blogbejegyzéssel, hogy ízelítőt adjon. A konkrét megvalósítás helyett inkább csak az irányokat mutatom be. :)

Azt a függvényt többféleképpen lehet folytatni, jelenleg ugye mind az A, mind az Á értéke ugyanaz lesz, így a sorrend nem változik. Valóban az A, Á, A sorrendje A, Á, A marad.

Megoldás lehet, hogy az következő módon alakítjuk át a karaktereket: A-ból A1-t, míg Á-ból A2-t csinálunk, a többit hasonlóan:) Ekkor a rendezés az ékezetes karaktereket minden esetben az ékezet nélküliek elé teszik.

Előfordulhat, hogy azt akarjuk, hogy az A és az Á karakterek legyen vegyesen, de abban a speciális esetben, ha a két karakterlánc egyenlő, akkor mégiscsak az eredeti rendezés legyen. Ekkor a visszatérést legyen: return ret.toUpperCase() + " – " + s.toUpperCase(); (az ékezet nélküli verzióhoz konkatenáljuk hozzá a normál verziót).

És persze ezt lehet kombinálni, merthogy az O és az Ó között általában nem szokás különbséget tenni, de az A és az Á között igen.

Végül még annyi kiegészítés, hogy talán kicsivel elegánsabb megoldás, ha a függvényt nem csupán globálisan hozzuk létre, hanem az Ext.data.SortTypes -hoz adjuk hozzá.

forraikris 2009.06.11. 10:58:47

Ez az A1 és A2 jó ötlet, eszembe sem jutott :-)
Én az alábbi - nem ennyire szép - megoldást találtam (3. komment):

extjs.com/forum/archive/index.php/t-5102.html

Előnye, hogy - ha jól értem - felülírja az alapértelmezett applySort függvényt, így megvalósítható, amit fent írtál (mármint az, hogy nem az alapértelmezett rendezést használod, és az értékeket írod felül, hanem saját rendezőfüggvény is írható így)

stack 2009.06.11. 16:03:44

Valami ilyesmin gondolkodtam én is, de mindig félek private függvényeket felülírni.

A Toolbar-ral nagyon befürödtem, ezer helyen vérzett még ExtJS2-ben, én javítgattam, aztán most nem indul el jónéhány alkalmazás ExtJS3-ban, merthogy az ext-es csapat is érezte, hogy jobb, ha újraírják az egészet... :)

ExtJS blog, mi ez?

Az ExtJS egy JavaScript keretrendszer, melyet a blog írója elfogultan a legjobbnak tart, és ez a blog olyan apróságok gyűjteménye, melyek ExtJS használata közben felmerültek, eszébe jutottak...

Címkék

ajax (4) alignto (1) állás (3) analytics (1) anchorto (1) android (4) animate (2) array (9) auto (1) back button (1) beautifier (1) beforeevent (1) benchmark (1) blur (1) budapest.js (1) button (1) canvas (1) capture (1) case sensitive (1) center (1) change (1) cikkajánló (1) class (2) closure compiler (1) collapse (1) combobox (3) comment (1) console.log (2) contextmenu (2) core (2) count (1) css (15) csv (1) dataview (1) date (4) datefield (3) datepicker (1) debug (1) doksi (1) dragdrop (1) easing (1) eclipse (1) editor (1) element (5) error (5) eval (2) event (1) fejtörő (1) field (2) fieldset (1) filter (1) firefox (4) firefox extension (2) focus (3) fonts (1) fun (1) function (1) google (2) google chrome (1) grayscale (1) grid (4) group contact (1) header (3) height (2) hidden (1) hirek (2) history (1) htaccess (1) html5 (2) htmleditor (2) https (1) icon (3) id (2) ie (2) ie6 (1) ie9 (1) iframe (3) image (2) indexof (1) javascript (1) jquery (2) jslint (2) jsmin (1) json (7) keymap (1) kipróbálom (2) könyvajánló (2) label (1) layout (1) lint (1) log (1) loop (1) magyar (2) mandelbrot (1) mask (1) math (1) maxlength (1) mistake (1) mysql (5) napi szívás (16) nem extjs (12) node (1) nth child (1) number (1) off (5) offline (1) operator (1) override (20) pagesize (1) paging (2) panel (2) php (7) picker (1) plugin (3) pozicionálás (2) preload (1) print (1) propertygrid (1) pseudo (3) readonly (2) record (1) regexp (1) replace (1) resizable (1) rotate (1) round (1) scale (1) sencha touch (2) server (1) shuffle (1) slider (1) sort (3) sortable (1) store (2) string (7) sum (1) tabchange (1) tabpanel (1) tab key (2) tdd (1) template (1) textarea (2) textfield (1) textitem (1) theme (2) throw (1) timer (1) timestamp (1) title (2) toggle (1) toolbar (6) tools (1) total count (1) transparent (1) tree (1) treenode (1) trigger (1) truncate (1) try (1) ucfirst (1) undefined (2) unique (1) unload (1) urlencode (1) utf8 (2) verzió (1) video (1) viewer (1) viewport (2) visible (2) vtype (1) window (2) xtype (1) zindex (2)

Extjs.blog.hu - RSS

Kérdés?