mirror of
https://github.com/TracksApp/tracks.git
synced 2025-09-21 21:40:48 +02:00

Changes you will need to make: * In your environment.rb, you will need to update references to a few files per environment.rb.tmpl * In your environment.rb, you will need to specify the local time zone of the computer that is running your Tracks install. Other notes on my changes: * Modified our code to take advantage of Rails 2.1's slick time zone support. * Upgraded will_paginate for compatibility * Hacked the Selenium on Rails plugin, which has not been updated in some time and does not support Rails 2.1 * Verified that all tests pass on my machine, including Selenium tests -- I'd like confirmation from others, too.
131 lines
4.4 KiB
Text
131 lines
4.4 KiB
Text
= WillPaginate
|
|
|
|
Pagination is just limiting the number of records displayed. Why should you let
|
|
it get in your way while developing, then? This plugin makes magic happen. Did
|
|
you ever want to be able to do just this on a model:
|
|
|
|
Post.paginate :page => 1, :order => 'created_at DESC'
|
|
|
|
... and then render the page links with a single view helper? Well, now you
|
|
can.
|
|
|
|
Some resources to get you started:
|
|
|
|
* Your mind reels with questions? Join our
|
|
{Google group}[http://groups.google.com/group/will_paginate].
|
|
* The will_paginate project page: http://github.com/mislav/will_paginate
|
|
* How to report bugs: http://github.com/mislav/will_paginate/wikis/report-bugs
|
|
* Ryan Bates made an awesome screencast[http://railscasts.com/episodes/51],
|
|
check it out.
|
|
|
|
== Installation
|
|
|
|
The recommended way is that you get the gem:
|
|
|
|
gem install mislav-will_paginate --source http://gems.github.com/
|
|
|
|
After that you don't need the will_paginate <i>plugin</i> in your Rails
|
|
application anymore. Just add a simple require to the end of
|
|
"config/environment.rb":
|
|
|
|
gem 'mislav-will_paginate', '~> 2.2'
|
|
require 'will_paginate'
|
|
|
|
That's it. Remember to install the gem on <b>all</b> machines that you are
|
|
deploying to.
|
|
|
|
<i>There are extensive
|
|
{installation instructions}[http://github.com/mislav/will_paginate/wikis/installation]
|
|
on {the wiki}[http://github.com/mislav/will_paginate/wikis].</i>
|
|
|
|
|
|
== Example usage
|
|
|
|
Use a paginate finder in the controller:
|
|
|
|
@posts = Post.paginate_by_board_id @board.id, :page => params[:page], :order => 'updated_at DESC'
|
|
|
|
Yeah, +paginate+ works just like +find+ -- it just doesn't fetch all the
|
|
records. Don't forget to tell it which page you want, or it will complain!
|
|
Read more on WillPaginate::Finder::ClassMethods.
|
|
|
|
Render the posts in your view like you would normally do. When you need to render
|
|
pagination, just stick this in:
|
|
|
|
<%= will_paginate @posts %>
|
|
|
|
You're done. (Copy and paste the example fancy CSS styles from the bottom.) You
|
|
can find the option list at WillPaginate::ViewHelpers.
|
|
|
|
How does it know how much items to fetch per page? It asks your model by calling
|
|
its <tt>per_page</tt> class method. You can define it like this:
|
|
|
|
class Post < ActiveRecord::Base
|
|
cattr_reader :per_page
|
|
@@per_page = 50
|
|
end
|
|
|
|
... or like this:
|
|
|
|
class Post < ActiveRecord::Base
|
|
def self.per_page
|
|
50
|
|
end
|
|
end
|
|
|
|
... or don't worry about it at all. WillPaginate defines it to be <b>30</b> by default.
|
|
But you can always specify the count explicitly when calling +paginate+:
|
|
|
|
@posts = Post.paginate :page => params[:page], :per_page => 50
|
|
|
|
The +paginate+ finder wraps the original finder and returns your resultset that now has
|
|
some new properties. You can use the collection as you would with any ActiveRecord
|
|
resultset. WillPaginate view helpers also need that object to be able to render pagination:
|
|
|
|
<ol>
|
|
<% for post in @posts -%>
|
|
<li>Render `post` in some nice way.</li>
|
|
<% end -%>
|
|
</ol>
|
|
|
|
<p>Now let's render us some pagination!</p>
|
|
<%= will_paginate @posts %>
|
|
|
|
More detailed documentation:
|
|
|
|
* WillPaginate::Finder::ClassMethods for pagination on your models;
|
|
* WillPaginate::ViewHelpers for your views.
|
|
|
|
|
|
== Authors and credits
|
|
|
|
Authors:: Mislav Marohnić, PJ Hyett
|
|
Original announcement:: http://errtheblog.com/post/929
|
|
Original PHP source:: http://www.strangerstudios.com/sandbox/pagination/diggstyle.php
|
|
|
|
All these people helped making will_paginate what it is now with their code
|
|
contributions or just simply awesome ideas:
|
|
|
|
Chris Wanstrath, Dr. Nic Williams, K. Adam Christensen, Mike Garey, Bence
|
|
Golda, Matt Aimonetti, Charles Brian Quinn, Desi McAdam, James Coglan, Matijs
|
|
van Zuijlen, Maria, Brendan Ribera, Todd Willey, Bryan Helmkamp, Jan Berkel,
|
|
Lourens Naudé, Rick Olson, Russell Norris, Piotr Usewicz, Chris Eppstein.
|
|
|
|
|
|
== Usable pagination in the UI
|
|
|
|
There are some CSS styles to get you started in the "examples/" directory. They
|
|
are showcased in the <b>"examples/index.html"</b> file.
|
|
|
|
More reading about pagination as design pattern:
|
|
|
|
* Pagination 101:
|
|
http://kurafire.net/log/archive/2007/06/22/pagination-101
|
|
* Pagination gallery:
|
|
http://www.smashingmagazine.com/2007/11/16/pagination-gallery-examples-and-good-practices/
|
|
* Pagination on Yahoo Design Pattern Library:
|
|
http://developer.yahoo.com/ypatterns/parent.php?pattern=pagination
|
|
|
|
Want to discuss, request features, ask questions? Join the
|
|
{Google group}[http://groups.google.com/group/will_paginate].
|
|
|