Carlos Brando

Nome do Jogo

Paginando com estilo

Acho legal a implementação do Rails para paginação. O problema é que não dá para formatar direito o paginador usando CSS ou outros meios.

Mas… é muito fácil criar um paginador personalizado.

No meu caso, criei um método chamado pagination_links_with_css em um dos helpers da minha aplicação.Meu código ficou assim: [source:ruby] def pagination_links_with_css(paginator, options={}, html_options={})

name = options[:name] || ActionView::Helpers::PaginationHelper::DEFAULT_OPTIONS[:name]
params = (options[:params] || ActionView::Helpers::PaginationHelper::DEFAULT_OPTIONS[:params]).clone

options[:link_to_current_page] = true
atual_page = options[:atual_page] || 1

pagination_links_each(paginator, options) do |n|
  params[name] = n

  if n.to_s.to_i == atual_page.to_i
    "<span class='current'>#{n.to_s}</span>"
  else
    link_to("#{n.to_s}", params, html_options)
  end
end

end [/source]

O que faço é bem simples. Como preciso pegar a página corrente, deixo a opção link_to_current_page como verdadeira. Também recupero o número da página atual (:atual_page) que informo na chamada do método na view (neste ponto chamo atenção, porque não consegui recuperar este valor de outra forma, você sabe como?).

Então, percorro todas as páginas e posso formatar o retorno de cada uma da maneira como desejo (“<span class=’current’>#{n.to_s}</span>”).

No view, a única coisa que tenho de fazer é chamar o método novo:

[source:ruby] <%= pagination_links_with_css @job_pages, {:window_size => 10, :atual_page => params[:page] } %> [/source]

É por isto que sou um entusiasta do Rails. Mesmo quando o framework não pode fazer algo, é muito fácil implementar.

Comments