2016-01-11 16 views
5

że mam 30 stron jest stronicowana z Kaminari:Skocz do midde z Kaminari paginacji

#800 books, 25 per page 
=paginate @books, :outer_window => 3, :window => 3 

Wygląda to tak:

1 2 3 4 ... 30 31 32

Nie ma sposobu, aby przejść do strony 16 bez klikania 5 razy.

  1. 1 * 2 3 [4] ... 30 31 32
  2. 1 2 3 4 * 5 6 [7], ... 30 31 32
  3. 1 2 3 4 5 6 7 * 8 9 [10] ... 30 31 32
  4. 1 2 3 ... 7 8 9 10 * 11 12 [13], ... 30 31 32
  5. 1 2 3 ... 10 11 12 13 * 14 15 [16], ... 30 31 32

(* bieżąca strona, [] = kliknięcie)

Wygląda na to, że dużo pracy trzeba wykonać na środku stosu.

  1. Jak mogę rozszerzyć Kaminari, aby przejść do strony 16 po kliknięciu na lukę (...)?
  2. Czy możliwe jest przedłużenie Kaminari, aby pokazać środek od początku?

1 2 3 4 ... 15 16 17 ... 30 31 32

+0

Czy próbowałeś tego [sekcja readme] (https: // github.com/amatsuda/kaminari # customizing-pagination-helper)? Nie mam żadnego projektu przy użyciu kaminari pod ręką, ale myślę, że po uzyskaniu poglądów powinno być całkiem proste ich dostosowanie –

+0

Wygenerowałem widoki, ale nie wydaje się, aby istniały jakiekolwiek metody, aby uzyskać tę stronę przed lub po luka. Możesz zrobić num_page/2 tak, jak mówi @kacz, ale działa to tylko wtedy, gdy jesteś na pierwszej stronie. Kiedy masz dwie luki, chciałbym zobaczyć, która strona jest połączona przed i po przerwie, możesz zrobić kilka prostych działań arytmetycznych, aby uzyskać punkt środkowy. – Ashbury

Odpowiedz

1

Możesz grać z wewnętrznych i zewnętrznych opcji okiennych (link), ale nie sądzę, że to rozwiąże twój problem.

W komentarzu @Michal Szyndel wspomniano, że będziesz musiał użyć generatora (rails g kaminari:views THEME uwaga: możesz przekazać -e, aby wygenerować różne języki szablonów). Po wygenerowaniu plików możesz edytować część "paginator" z pewną niestandardową logiką. Aby uzyskać wstęp do tego, w jaki sposób należy to zrobić, należy sprawdzić, czy Ryan ma railscast (od 4:53)

Mam nadzieję, że to wystarczająco daleko, ponieważ to, jak działa to środkowe okno, gdy nie znajdujesz się na początku lub końcu paginacji, zależy od rozmiary okien i to, co chcesz. (Jeśli masz zewnętrzne okno 3 i wewnętrzne okno 2 z 50 stronami, jak powinny wyglądać łącza paginatora, gdy jesteś na stronie 15?)

Jeśli potrzebujesz dodatkowej pomocy, po prostu odpowiedz z komentarzem i Odpowiem bardziej szczegółowo.

1

Poszerzenie elementów widoku kaminari jest całkiem proste. Musisz dostosować pomocnika stronicowania, https://github.com/amatsuda/kaminari#customizing-the-pagination-helper

W szczególności, zakładając, że używasz ERB, będziesz chciał edytować swój nowy plik app/views/kaminari/_gap.html.erb.

<% 
    url,data = url.split('?') 
    url += '?page=' + (num_pages/2) 
%> 
<span class="page gap"> 
    <%= link_to_unless page.current?, page, url %> 
</span> 

Spowoduje to utworzenie linku do strony środkowej (naprawdę num_pages/2 -th).

+0

Jak uzyskałeś URL w widoku luki? Również to zawsze przeskoczy do środka, niezależnie od tego, gdzie znajduje się znacznik przerwy. Czasami są dwa znaczniki przerwy (1 2 3 4 ... 15 16 17 ... 30 31 32), gdzie nie byłoby sensu klikać na 4 '...' 15 i kończy się na stronie 16. – Ashbury

+0

Adres URL jest zbudowany z istniejącego adresu URL i dodaje parametr strony, który wskazuje na środek luki. To jest na liniach 2 i 3. Na jaką stronę chciałbyś się natknąć, jeśli klikniesz na elipsę pomiędzy 4 a 5? Jeśli chcesz omówić tę sprawę, musisz otworzyć 'app/views/kaminari/_paginator.html.erb' iw tej linii https://github.com/amatsuda/kaminari/blob/master /app/views/kaminari/_paginator.html.erb#L14 usuń '|| page.inside_window? ', przenieś to do swojej specjalnej klauzuli" if "i osobno obsłuż lewą i prawą lukę. –

Powiązane problemy