2012-12-24 11 views
5

Pracuję na niektórych stronicowania i zastanawiam się, czy istnieje sposób, aby powiedzieć cieczy, aby pokazać tylko 5 stron. Wyjście szukam jestCiecz i arytmetyka

< < pierwsze 5 6 8 9 Ostatnia >>

Logika Obecnie mam w miejsce robót, ale pokazuje wszystkie 30 kilka stron.

{% for count in (2..paginator.total_pages) %} 
    {% if count == paginator.page %} 
     <span class="current">{{ count }}</span> 
    {% else %} 
     <a href="/page/{{ count }}/" class="pagenavi-page" title="{{ count }}">{{ count }}</a> 
    {% endif %} 
{% endfor %} 

Chciałbym być w stanie dokonać 2 i paginator.total_pages być dynamiczne, próbowałem

{% for count in ((paginator.page - 2)..(paginator.page + 2)) %} 

Kod ten jednak faktycznie nie do matematyki, jeśli paginator.page = 5 następnie pętla ma wartość 5,5 i nie zapewnia oczekiwanych wyników. Mogę wymyślić logikę, aby nie trafiała ona w liczby ujemne i działa zgodnie z oczekiwaniami, ale jak mogę w tym celu zastosować równania matematyczne?

Odpowiedz

4

Musisz użyć filtra na paginator.total_pages, aby wykonać arytmetykę, a następnie przechwycić wynik w zmiennej przy użyciu znacznika capture. Gdy masz stron początkowych i końcowych, można napisać pętlę for jak zwykle:

{% capture page_start %}{{ paginator.page | minus: 2 }}{% endcapture %} 
{% capture page_end %}{{ paginator.page | plus: 2 }}{% endcapture %} 

{% for count in (page_start..page_end) %} 
    {% comment %} ... do your thing ... {% endcomment %} 
{% endfor %} 
+0

Dziękuję za tę odpowiedź ma to sens. Jednak próbuję skonfigurować moją pętlę. Muszę być w stanie sprawdzić, czy page_end jest większa niż całkowita liczba stron. {% if PAGE_END> paginator.total_pages%} {% obsadzać PAGE_END = paginator.total_pages%} {% endif%} Powyższy kod daje mi następujący błąd Ciecz Wyjątek: porównanie String z 37 zawiodły in index.html Czy można to zrobić w Liquid? –

+0

Wyjaśniałem to, musiałem tylko rozszerzyć pagination.rb w Jekyll i dodać zmienne pager_start i pager_end oraz obliczenia –

+0

Dla Googlersów szukających bardziej nowoczesnego podejścia zgodnego z GitHub Pages, które nie wymaga programowania w języku Ruby, sprawdź [ ] (http://stackoverflow.com/a/31972386/5195629). Ujawnienie: Napisałem odpowiedź. – Shadowen

1

buduję blog z Jekyll i mam do czynienia z podobną sytuacją. Zgodnie z tym, co znalazłem w Liquid wiki, możliwe jest iterowanie nad podzestawem danej kolekcji przy użyciu limit i offset.

Poniższy przykład odzwierciedla szczególny przypadek i powinny działa poprawnie w każdej strony, od pierwszego do ostatniego:

{% capture start %}{{ paginator.page | minus: 3 }}{% endcapture %} 

{% for i in (1..paginator.total_pages) limit: 5 offset: start %} 
    ... 
{% endfor %} 
0

Spróbuj zamiast

{% if paginator.total_pages < 7 %} 
{% if paginator.page == 1 %} 
     <span class="current bold">1</span> 
{% else %} 
     <a href="{{ site.url }}/">1</a> 
{% endif %} 
{% for count in (2..paginator.total_pages) %} 
    {% if count == paginator.page %} 
     <span class="current bold">{{ count }}</span> 
    {% else %} 
     <a href="/page{{ count }}/" class="pagenavi-page" title="{{ count }}">{{ count }}</a> 
    {% endif %} 
{% endfor %} 
{% else %} 
{% assign page_start = paginator.page | minus: 2 %} 
{% assign page_end = paginator.page | plus: 2 %} 
{% if page_end > paginator.total_pages %} 
{% assign page_end = paginator.total_pages %} 
{% assign page_start = paginator.page | minus: 4 %} 
{% endif %} 
{% if page_start < 2 %} 
{% assign page_end = paginator.page | plus: 3 %} 
{% assign page_start = paginator.page | minus: 1 %} 
{% endif %} 
{% if page_start == 0 %} 
{% assign page_end = paginator.page | plus: 4 %} 
{% assign page_start = paginator.page %} 
{% endif %} 
{% if page_start == 1 %} 
{% assign page_end = paginator.page | plus: 4 %} 
{% assign page_start = 2 %} 
{% if paginator.page == 1 %} 
     <span class="current bold">1</span> 
{% else %} 
     <a href="{{ site.url }}/">1</a> 
{% endif %} 
{% endif %} 
{% for count in (page_start..page_end) %} 
    {% if count == paginator.page %} 
     <span class="current bold">{{ count }}</span> 
    {% else %} 
     <a href="/page{{ count }}/" class="pagenavi-page" title="{{ count }}">{{ count }}</a> 
    {% endif %} 
{% endfor %} 
{% endif %} 
1

Używam Bootstrap 3.0.3 dla mojej strony internetowej. Używam następującego kodu do stronicowania. Ma taki sam efekt, jakiego szukasz. Kod, który napisałem powyżej, jest tym, czego szukasz, ale w każdym razie opublikuję tutaj swój kod paginacji bootstrap.

{% if paginator.total_pages != 1 %} 
{% if paginator.total_pages < 7 %} 
     <div class="page-body col-md-12"> 
      <ul class="pagination pagination-centered"> 
      {% if paginator.total_pages >= 10 %} 
      {% if paginator.previous_page %} 
       <li> 
        <a href="{{ site.url }}/">&laquo;&laquo;</a> 
       </li> 
      {% else %} 
       <li class="disabled"> 
       <a>&laquo;&laquo;</a> 
       </li> 
      {% endif %} 
      {% endif %} 
      {% if paginator.previous_page %} 
       {% if paginator.previous_page == 1 %} 
       <li> 
        <a href="{{ site.url }}/">&laquo;</a> 
       </li> 
       {% else %} 
       <li> 
        <a href="{{ site.url }}/page{{paginator.previous_page}}">&laquo;</a> 
       </li> 
       {% endif %} 
      {% else %} 
       <li class="disabled"> 
       <a>&laquo;</a> 
       </li> 
      {% endif %} 
      {% if paginator.page == 1 %} 
       <li class="active"> 
       <a>1</a> 
       </li> 
      {% else %} 
       <li> 
       <a href="{{ site.url }}/">1</a> 
       </li> 
      {% endif %} 
      {% for count in (2..paginator.total_pages) %} 
       {% if count == paginator.page %} 
       <li class="active"> 
        <a>{{count}}</a> 
       </li> 
       {% else %} 
       <li> 
        <a href="{{ site.url }}/page{{count}}">{{count}}</a> 
       </li> 
       {% endif %} 
      {% endfor %} 
      {% if paginator.next_page %} 
       <li> 
       <a href="{{ site.url }}/page{{paginator.next_page}}">&raquo;</a> 
       </li> 
      {% else %} 
       <li class="disabled"> 
       <a>&raquo;</a> 
       </li> 
      {% endif %} 
      {% if paginator.total_pages >= 10 %} 
      {% if paginator.next_page %} 
       <li> 
       <a href="{{ site.url }}/page{{paginator.total_pages}}">&raquo;&raquo;</a> 
       </li> 
      {% else %} 
       <li class="disabled"> 
       <a>&raquo;&raquo;</a> 
       </li> 
      {% endif %} 
      {% endif %} 
      </ul> 
     </div> 
{% else %} 

{% assign page_start = paginator.page | minus: 2 %} 
{% assign page_end = paginator.page | plus: 2 %} 
{% if page_end > paginator.total_pages %} 
{% assign page_end = paginator.total_pages %} 
{% assign page_start = paginator.page | minus: 4 %} 
{% endif %} 
{% if page_start < 2 %} 
{% assign page_end = paginator.page | plus: 3 %} 
{% assign page_start = paginator.page | minus: 1 %} 
{% endif %} 
{% if page_start == 0 %} 
{% assign page_end = paginator.page | plus: 4 %} 
{% assign page_start = paginator.page %} 
{% endif %} 

<div class="page-body col-md-12"> 
    <ul class="pagination pagination-centered"> 
    {% if paginator.total_pages > 5 %} 
    {% if paginator.previous_page %} 
     <li> 
      <a href="{{ site.url }}/">&laquo;&laquo;</a> 
     </li> 
    {% else %} 
     <li class="disabled"> 
     <a>&laquo;&laquo;</a> 
     </li> 
    {% endif %} 
    {% endif %} 
    {% if paginator.previous_page %} 
     {% if paginator.previous_page == 1 %} 
     <li> 
      <a href="/">&laquo;</a> 
     </li> 
     {% else %} 
     <li> 
      <a href="/page{{paginator.previous_page}}">&laquo;</a> 
     </li> 
     {% endif %} 
    {% else %} 
     <li class="disabled"> 
     <a href="#">&laquo;</a> 
     </li> 
    {% endif %} 
    {% if page_start == 1 %} 
    {% assign page_end = paginator.page | plus: 4 %} 
    {% assign page_start = 2 %} 
    {% if paginator.page == 1 %} 
     <li class="active"> 
     <a href="#">1</a> 
     </li> 
    {% else %} 
     <li> 
     <a href="/">1</a> 
     </li> 
    {% endif %} 
    {% endif %} 
    {% for count in (page_start..page_end) %} 
     {% if count == paginator.page %} 
     <li class="active"> 
      <a href="#">{{count}}</a> 
     </li> 
     {% else %} 
     <li> 
      <a href="/page{{count}}">{{count}}</a> 
     </li> 
     {% endif %} 
    {% endfor %} 
    {% if paginator.next_page %} 
     <li> 
     <a href="/page{{paginator.next_page}}">&raquo;</a> 
     </li> 
    {% else %} 
     <li class="disabled"> 
     <a href="#">&raquo;</a> 
     </li> 
    {% endif %} 
    {% if paginator.total_pages > 5 %} 
    {% if paginator.next_page %} 
     <li> 
     <a href="{{ site.url }}/page{{paginator.total_pages}}">&raquo;&raquo;</a> 
     </li> 
    {% else %} 
     <li class="disabled"> 
     <a>&raquo;&raquo;</a> 
     </li> 
    {% endif %} 
    {% endif %} 
    </ul> 
</div> 
{% endif %} 
{% endif %}