Pagination for Ecto and Phoenix.
The package is available in Hex, the package can be installed as:
Add kerosene to your list of dependencies in mix.exs:
def deps do
[{:kerosene, "~> 0.8.1"}]
endAdd Kerosene to your repo.ex:
defmodule MyApp.Repo do
use Ecto.Repo, otp_app: :testapp
use Kerosene, per_page: 2
endStart paginating your queries
def index(conn, params) do
{products, kerosene} =
Product
|> Product.with_lowest_price
|> Repo.paginate(params)
render(conn, "index.html", products: products, kerosene: kerosene)
endAdd view helpers to your view
defmodule MyApp.ProductView do
use MyApp.Web, :view
import Kerosene.HTML
endGenerate the links using the view helpers
<%= paginate @conn, @kerosene %>Kerosene provides a list of themes for pagination. By default it uses bootstrap. To use some other, add to config/config.exs:
config :kerosene,
theme: :foundationIf you need reduced number of links in pagination, you can use simple mode option, to display only Prev/Next links:
config :kerosene,
mode: :simpleBuilding apis or SPA's, no problem Kerosene has support for Json.
defmodule MyApp.ProductView do
use MyApp.Web, :view
import Kerosene.JSON
def render("index.json", %{products: products, kerosene: kerosene, conn: conn}) do
%{data: render_many(products, MyApp.ProductView, "product.json"),
pagination: paginate(conn, kerosene)}
end
def render("product.json", %{product: product}) do
%{id: product.id,
name: product.name,
description: product.description,
price: product.price}
end
endYou can also send in options to paginate helper look at the docs for more details.
Please do send pull requests and bug reports, positive feedback is always welcome.
I would like to Thank
- Matt (@mgwidmann)
- Drew Olson (@drewolson)
- Akira Matsuda (@amatsuda)
Please take a look at LICENSE.md