Rails 3 — Will_Paginate — Делаем ссылки на страницы более похожими на GMAIL

Я использую плагин Rails 3 Will_Paginate и использую следующий учебник, чтобы узнать, как настроить ссылки на страницы:

http://thewebfellas.com/blog/2010/8/22/revisited-roll-your-own-pagination-links-with-will_paginate-and-rails-3/

Мой вопрос в том, как сделать ссылки на страницы более похожими на GMAIL, например:

1 - 100 из 25409 Более старые › Самые старые »

‹ Новые 101–200 из 25409 Старые › Самые старые »

« Новые ‹ Новые 25401 - 25409 из 25409

Спасибо


person AnApprentice    schedule 09.10.2010    source источник


Ответы (2)


Похоже, что эта ссылка содержит (почти) всю необходимую информацию.

«Старые» — это, по сути, «Следующая страница», поэтому вы переопределяете метод next_page в своем средстве визуализации. «Самая старая» — «Последняя страница»; вам нужно будет добавить метод, а затем убедиться, что он включен в массив, возвращаемый вашим методом pagination (здесь поможет метод total_pages, встроенный в will_paginate).

Затем сделайте обратное для Newer/Newest.

Взгляните на link_renderer.rb и link_renderer_base.rb. У них есть методы, которые вы будете переопределять.

Я написал собственный рендерер will_paginate 3 для эмуляции пагинации «Дополнительно» в стиле GitHub/Twitter. Я прокомментировал код ниже. Это не приведет вас именно туда, куда вам нужно, но это начало.

module TwitterPagination
  class LinkRenderer < WillPaginate::ViewHelpers::LinkRenderer
    protected

    # Tells WP how to render the "Next Page" link
    def next_page
      # The only difference from the default here is we renamed the link to "More" 
      # and added a custom class, twitter_pagination
      previous_or_next_page(@collection.next_page, "More", 'twitter_pagination') if @collection.next_page
    end

    # Remove all links except our :next_page
    def pagination
      [ :next_page ]
    end
  end
end

Все, что мне нужно было знать для этого, можно выяснить, прочитав два исходных файла, на которые я ссылался выше.

Меня действительно поразило, как легко это было сделать; последний дизайн will_paginate великолепен в этой области.

person Robert Speicher    schedule 09.10.2010
comment
Спасибо, это довольно круто. Но я до сих пор не понимаю, как сделать его условным (показывать больше, только если он активен)... Кроме того, как отображать просмотр и подсчет записей перед ссылками (1 - 100 из 25406) - person AnApprentice; 09.10.2010
comment
Обратите внимание на условное обозначение if @collection.next_page — оно показывает «Еще», только если на самом деле есть следующая страница. Что касается нумерации предметов, тут немного сложнее. Загляните в collection.rb файл. По сути, это массив с дополнительными методами, поэтому вы можете вызвать @collection.size, чтобы узнать количество элементов в этой группе; умножьте это на current_page, чтобы получить начало, добавьте количество элементов в группе к началу, чтобы получить максимальную границу и т. д. - person Robert Speicher; 09.10.2010
comment
В качестве продолжения вчера я выпустил Gem, целью которого является предоставление различных готовых рендереров для will_paginate, и одним из них является Gmail. Опять же, это оказалось довольно просто (сложнее протестировать, чем даже написать). rubygems.org/gems/will_paginate_renderers - person Robert Speicher; 24.10.2010

Попробуйте что-то вроде

<%= will_paginate @items, :class => 'apple_pagination' %>

class также может быть digg_pagination, .flickr_pagination .

Перед этим вам необходимо загрузить и скопировать pagination.css в общедоступные таблицы/таблицы стилей.

person crazycrv    schedule 19.12.2011