Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Po stronie przeglądarki _ Paginacja z bieżącym miejscem opartym na plikach cookie

Napisany przez: stardar 23.11.2020, 01:48:45

Upd. Poproszę Administratora, żeby przeniósł ten post do działu 'Po stronie przeglądarki'. Dziękuję.

Cześć.

Mam listę generowaną przez system. Lista jest dzielona na poszczególne części, po 40 przez jQuery:

  1. <http://december.com/html/4/element/script.html>
  2. /* startowe ustawienia paginacji */
  3. function paginate(page,className, perPage) {
  4. if (perPage === undefined) {
  5. perPage = 40;
  6. }
  7. $('ul.'+className+' li').addClass('hidden');
  8. $('ul.'+className+' li').each(function (k, v) {
  9. if (k >= page * perPage && k < (page + 1) * perPage) {
  10. $(v).removeClass('hidden');
  11. });
  12. };
  13.  
  14. /* po kliknięciu w link paginacji */
  15. $('a.paginate').click(function () {
  16. let page = $(this).data('page');
  17. let classname = $(this).data('classname');
  18. paginate(page, classname);
  19. });
  20.  
  21. /** załaduj pierwsze 40 linków do sidebara **/
  22. paginate('0', 'sidebar_list_1');
  23. </http://december.com/html/4/element/script.html>


I to działa super. Sidebar wyświetla trzy strony w paginacji, które wyświetlają odrębne porcje linków, które można przeklikiwać. Tyle, że na stronach 2 i 3 kliknięcie w dowolny wyświetlony link powoduje przeładowanie całej strony, wyświetlenie jej i załadowanie w sidebarze strony 1-ej zamiast tej, z której nastąpiło wywołanie linku.

Ktoś poradził mi, żeby zaprząc do tego cookie, co też zrobiłem:

  1. <http://december.com/html/4/element/script.html>
  2. /* startowe ustawienia paginacji */
  3. function paginate(page,className, perPage) {
  4. if (perPage === undefined) {
  5. perPage = 40;
  6. }
  7. $('ul.'+className+' li').addClass('hidden');
  8. $('ul.'+className+' li').each(function (k, v) {
  9. if (k >= page * perPage && k < (page + 1) * perPage) {
  10. $(v).removeClass('hidden');
  11. });
  12. };
  13.  
  14. /* po kliknięciu w link paginacji */
  15. $('a.paginate').click(function () {
  16. let page = $(this).data('page');
  17. let classname = $(this).data('classname');
  18. paginate(page, classname);
  19. /* zapisz plik cookie z klikniętym nrem w paginacji */
  20. document.cookie = 'pageId='+page+'';
  21. });
  22.  
  23. /** funkcja odczytu pageId z cookie **/
  24. function readCookie(name) {
  25. var nameEQ = name + "=";
  26. var ca = document.cookie.split(';');
  27. for(var i=0;i < ca.length;i++) {
  28. var c = ca[i];
  29. while (c.charAt(0)==' ') c = c.substring(1,c.length);
  30. if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  31. }
  32. return null;
  33. }
  34. /** przytnij linki w sidebarze do 40-tu przy ładowaniu strony **/
  35. var x = readCookie('pageId');
  36. paginate(x, 'sidebar_list_1');
  37. </http://december.com/html/4/element/script.html>


Po kliknięciu w pierwszy link paginacji i któryś wyświetlony link w sidebarze wszystko działa super - strona pamięta, z którego sidebara została wywołana i wyświetla go. Tak samo przy trzecim linku w paginacji. Ale coś dziwnego dzieje się z drugim linkiem, bo po kliknięciu w drugi link paginacji wyświetla zawartość sidebaru jak powinien, ale po kliknięciu w jakiś link z wygenerowanej puli linków sidebara, dołącza do niej automatycznie zawartość, która powinna być (i jest) generowana również przez trzeci link z paginacji.

Nie mam już koncepcji co z tym zrobić. Moglibyście rzucić swoim mądrym okiem?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)