2012-12-24 39 views
5

Tôi đang làm việc trên một số phân trang và tôi tự hỏi nếu có một cách để nói với chất lỏng chỉ hiển thị 5 trang. Sản lượng Tôi đang tìm kiếm làChất lỏng và số học

< < Trước 5 6 8 9 Cuối cùng >>

Logic Tôi hiện đang có tại công trình nơi nhưng nó cho thấy tất cả 30 số trang.

{% 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 %} 

Tôi muốn để có thể làm cho 2 và paginator.total_pages phải năng động, tôi đã cố gắng

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

Mã này tuy nhiên không thực sự làm toán, nếu paginator.page = 5 thì vòng lặp là 5..5 và không cung cấp kết quả mong đợi. Tôi có thể tìm ra logic để nó không đánh số âm và hoạt động như mong đợi nhưng làm thế nào tôi có thể làm phương trình toán học trong điều này?

Trả lời

4

Bạn cần sử dụng bộ lọc trên paginator.total_pages để thực hiện phép tính số học và sau đó chụp kết quả trong biến bằng cách sử dụng thẻ capture. Một khi bạn đã bắt đầu và kết thúc trang, bạn có thể viết các for vòng lặp như bình thường:

{% 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

Cảm ơn bạn vì câu trả lời đó có ý nghĩa. Tuy nhiên tôi thấy mình chống lại một lỗi khác khi cố gắng thiết lập vòng lặp của tôi. Tôi cần phải kiểm tra xem liệu page_end có lớn hơn tổng số trang hay không. {% if PAGE_END> paginator.total_pages%} { % gán PAGE_END = paginator.total_pages%} {% endif%} Đoạn mã trên mang lại cho tôi những lỗi sau ngoại lệ lỏng: so sánh chuỗi với 37 thất bại trong index.html Có cách nào để thực hiện điều này trong Liquid không? –

+0

Tôi đã tìm ra điều này, chỉ cần mở rộng pagination.rb trong Jekyll và thêm các biến pager_start và pager_end và các tính toán –

+0

Đối với những người dùng Google tìm cách tiếp cận tương thích với GitHub Pages hiện đại hơn, không liên quan đến lập trình Ruby, hãy xem [this ] (http://stackoverflow.com/a/31972386/5195629). Tiết lộ: Tôi đã viết câu trả lời. – Shadowen

1

Tôi đang xây dựng một blog với Jekyll và tôi đã phải đối mặt với một tình huống tương tự. Theo những gì tôi tìm thấy trong số Liquid wiki, bạn có thể lặp qua một tập con của một tập hợp đã cho bằng cách sử dụng limitoffset.

Ví dụ sau đây phản ánh trường hợp cụ thể của bạn và nên làm việc một cách chính xác trong mỗi trang, từ đầu đến cuối một:

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

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

Hãy thử điều này thay vì

{% 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

Tôi đang sử dụng Bootstrap 3.0.3 cho trang web của tôi. Tôi sử dụng mã sau để phân trang. Nó có cùng tác dụng mà bạn đang tìm kiếm. Mã tôi đăng ở trên là những gì bạn đang tìm kiếm, nhưng tôi sẽ đăng mã phân trang khởi động của tôi ở đây.

{% 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 %} 
Các vấn đề liên quan