2011年8月25日木曜日

rails ページネート will_pagenateを試してみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ページネートでよく使われるgemでいまさら感はありますが
掲示板作成するときにも実際使っているのですが復習で試しておきました。

参考
ページネートのいろんなCSS


とりあえずテスト用データを作成
rails g scaffold memo title:string
rake db:migrate

ページネートが確認できるように適当に数個データを入れておく。

・gemfileに記述インストール
gem "will_paginate", "~> 3.0.pre2"

bundle install

・memoのコントローラのindexをページネート用に書き換え。
 def index
    @memos = Memo.paginate(:page => params[:page], :per_page => 1).order('created_at DESC')

10個のデータで試すのでpare_pageを1つにする。
並び順は意味ないがとりあえず降順を設定してみる

・ビューにページネート部分を表示する
<%= will_paginate @posts %>

これでシンプルなものは完成。indexページを見てみる。












問題なし。簡単に実装できて非常に使えますね。

ちょっといろいろ表記を変えてみたい。

使うのはこれくらいかな
:previous_label、:next_label、次へ、前へラベル
:inner_window、:outer_window ページリンクの表示数、内側、外側
:link_separator セパレータ
:class htmlのclass名

まずラベルをymlファイルで設定し変更してみる
・en.ymlファイルに以下を記述(日本語だけど)(ymlからの設定方法)
  will_paginate:
    previous_label: "前へ"
    next_label: "後へ"

・ページリンク表示数とセパレータの設定をindexのビュー側に追加(ビューからの設定方法)
<%= will_paginate @posts, :inner_window => '2', :outer_window => '2', :link_separator  => '-' %>

でどうなったか見てみる。



表示はうまくいったけど、inner_windowとouter_windowの挙動がなんか変。
ぐぐったらバグではなく仕様みたいだ。内部計算でページ最初と最後付近はうまく表示されないらしい。

次はCSSで見た目を変えてみる
以下を参考にして
http://mislav.uniqpath.com/will_paginate/

flickrのような見た目にしてみよう。
CSSを↑のところから拝借してコピペ

ビューのページネート部分にclassの設定タグを以下のようにした
<%= will_paginate @posts, :class=>'flickr_pagination' %>










外観のカスタマイズも簡単ですね、これは便利。

0 件のコメント:

コメントを投稿