Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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
Go to the top of the page
+Quote Post
rafal999
post
Post #2





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 28.04.2014

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


Witam, Wątek z 2010, ale problem z sortowaniem chyba wciąż aktualny. W aktualnej wersji jest kilka modyfikacji w kodzie i Twoje rozwiązanie nie chce mi działać. Darko czy mozesz zrobic update?
Go to the top of the page
+Quote Post
darko
post
Post #3





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

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


Witam,

przyznam, że nie mam wystarczająco dużo czasu, aby zapoznać się z kodem najnowszej wersji skryptu. Proszę dokładnie opisać na konkretnym przykładzie swój problem wraz z załączonym kodem.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 17:56