Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Paginacja z bieżącym miejscem opartym na plikach cookie, problem ze zwracanymi danymi
stardar
post 23.11.2020, 01:48:45
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 9.08.2020

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


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


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


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?

Ten post edytował stardar 23.11.2020, 03:18:05
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 28.03.2024 - 15:59