Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ROZWIĄZANE]Skrypt DataTables z datatables.net, [ROZWIĄZANE]Problem z sortowaniem danych zawierających polskie znaki
darko
post
Post #1





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Witam

Czy ktoś z Was korzysta(ł) ze skryptu datatables, miał problem z sortowaniem danych zawierających polskie znaki i znalazł rozwiązanie? Chodzi o to, że polskie znaki sortowane są w kolejności po literze Z, a potrzebowałbym, żeby były sortowane zgodnie z polskim alfabetem: odpowiednio: ą wystąpiłoby po a, ć po c, ę po e itd.

ps. zarejestrowałem się na forum na stronie domowej tego skryptu i napisałem temat z podobnym pytaniem, ale wątpię czy ktokolwiek odpowie, ponieważ z wymienionych przeze mnie polskich liter wyświetliło się tylko ó, więc ludzie mogą mnie nie zrozumieć.

Pozdrawiam

ROZWIĄZANE

Wystarczy zastąpić aktualne metody sortowania oSort:

[JAVASCRIPT] pobierz, plaintext
  1. _oExt.oSort = {
  2. /*
  3. * text sorting
  4. */
  5. "string-asc": function ( a, b )
  6. {
  7. var x = a.toLowerCase();
  8. var y = b.toLowerCase();
  9. return ((x < y) ? -1 : ((x > y) ? 1 : 0));
  10. },
  11.  
  12. "string-desc": function ( a, b )
  13. {
  14. var x = a.toLowerCase();
  15. var y = b.toLowerCase();
  16. return ((x < y) ? 1 : ((x > y) ? -1 : 0));
  17. },
  18. // (...)
[JAVASCRIPT] pobierz, plaintext


np. taki potworkiem:

[JAVASCRIPT] pobierz, plaintext
  1. _oExt.oSort = {
  2. /*
  3. * text sorting
  4. */
  5. "string-asc": function ( a, b )
  6. {
  7. if(a == b)
  8. return 0;
  9.  
  10. var alphabet = new Array(
  11. ' ', '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+',
  12. '0' ,'1', '2', '3', '4', '5', '6', '7', '8', '9',
  13. 'a', 'A', 'ą', 'Ą', 'b', 'B', 'c', 'C', 'ć', 'Ć', 'd', 'D', 'e', 'E', 'ę', 'Ę',
  14. 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'ł', 'Ł',
  15. 'm', 'M', 'n', 'N', 'ń', 'Ń', 'o', 'O', 'ó', 'Ó', 'p', 'P', 'q', 'Q', 'r', 'R',
  16. 's', 'S', 'ś', 'Ś', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y',
  17. 'z', 'Z', 'ź', 'Ź', 'ż', 'Ż'
  18. );
  19.  
  20. var d = 0;
  21. while(a[d] == b[d]) {
  22. d++;
  23. }
  24. a_pos = 0; b_pos = 0;
  25.  
  26. for(var i = 0; i < alphabet.length; i++)
  27. {
  28. if(alphabet[i] == a[d])
  29. a_pos = i;
  30.  
  31. if(alphabet[i] == b[d])
  32. b_pos = i;
  33. }
  34. return a_pos < b_pos ? -1 : 1;
  35. },
  36.  
  37. "string-desc": function ( a, b )
  38. {
  39. if(a == b)
  40. return 0;
  41.  
  42. var alphabet = new Array(
  43. ' ', '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+',
  44. '0' ,'1', '2', '3', '4', '5', '6', '7', '8', '9',
  45. 'a', 'A', 'ą', 'Ą', 'b', 'B', 'c', 'C', 'ć', 'Ć', 'd', 'D', 'e', 'E', 'ę', 'Ę',
  46. 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'ł', 'Ł',
  47. 'm', 'M', 'n', 'N', 'ń', 'Ń', 'o', 'O', 'ó', 'Ó', 'p', 'P', 'q', 'Q', 'r', 'R',
  48. 's', 'S', 'ś', 'Ś', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y',
  49. 'z', 'Z', 'ź', 'Ź', 'ż', 'Ż'
  50. );
  51.  
  52. var d = 0;
  53. while(a[d] == b[d]) {
  54. d++;
  55. }
  56. a_pos = 0; b_pos = 0;
  57.  
  58. for(var i = 0; i < alphabet.length; i++)
  59. {
  60. if(alphabet[i] == a[d])
  61. a_pos = i;
  62.  
  63. if(alphabet[i] == b[d])
  64. b_pos = i;
  65. }
  66. return a_pos < b_pos ? 1 : -1;
  67. },
  68. // (...)
[JAVASCRIPT] pobierz, plaintext


// edit
Zastosowaną powyżej metodę można wykorzystać w sytuacji, kiedy mamy problem z sortowaniem domyślnym tablicy, która zawiera polskie znaki (domyślne sortowanie jest niezgodne z polskim alfabetem):
[JAVASCRIPT] pobierz, plaintext
  1. function mysort(a, b)
  2. {
  3. if(a == b)
  4. return 0;
  5. var alphabet = new Array(
  6. ' ', '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+',
  7. '0' ,'1', '2', '3', '4', '5', '6', '7', '8', '9',
  8. 'a', 'A', 'ą', 'Ą', 'b', 'B', 'c', 'C', 'ć', 'Ć', 'd', 'D', 'e', 'E', 'ę', 'Ę',
  9. 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'ł', 'Ł',
  10. 'm', 'M', 'n', 'N', 'ń', 'Ń', 'o', 'O', 'ó', 'Ó', 'p', 'P', 'q', 'Q', 'r', 'R',
  11. 's', 'S', 'ś', 'Ś', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y',
  12. 'z', 'Z', 'ź', 'Ź', 'ż', 'Ż'
  13. );
  14. var d = 0;
  15. while(a[d] == b[d]) {
  16. d++;
  17. }
  18. a_pos = 0; b_pos = 0;
  19. for(var i = 0; i < alphabet.length; i++)
  20. {
  21. if(alphabet[i] == a[d])
  22. a_pos = i;
  23.  
  24. if(alphabet[i] == b[d])
  25. b_pos = i;
  26. }
  27. return a_pos < b_pos ? -1 : 1;
  28. }
  29.  
  30. var names = [
  31. "Abramowicz Aleksander", "Zofia Nałkowska", "Świątkowską Maria", "Ćwiąkalski Marian", "Ącki Edward", "Abramowicz Aleksander",
  32. "abramowicz Aleksander", "zofia Nałkowska", "świątkowska Maria", "ćwiąkalski Marian", "ącki Edward", "abramowicz Aleksander"
  33. ];
  34.  
  35. document.write('<b>standardowy sort():</b><br/><br/>');
  36. document.write(names.sort());
  37. document.write('<hr><b>sort(mysort):</b><br/><br/>');
  38. document.write(names.sort( mysort ));
[JAVASCRIPT] pobierz, plaintext


rezultat zastosowania małego potwora:

standardowy sort():

Abramowicz Aleksander,Abramowicz Aleksander,Zofia Nałkowska,abramowicz Aleksander,abramowicz Aleksander,zofia Nałkowska,Ącki Edward,ącki Edward,Ćwiąkalski Marian,ćwiąkalski Marian,Świątkowską Maria,świątkowska Maria

sort(mysort):

abramowicz Aleksander,abramowicz Aleksander,Abramowicz Aleksander,Abramowicz Aleksander,ącki Edward,Ącki Edward,ćwiąkalski Marian,Ćwiąkalski Marian,świątkowska Maria,Świątkowską Maria,zofia Nałkowska,Zofia Nałkowska

ps. sorki, że aż tyle, ale może komuś się to kiedyś przyda. Pzdr.

Ten post edytował darko 25.06.2010, 12:48:07


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 07:35