Rummage.Phoenix
adalah kerangka dukungan untuk Phoenix
yang dapat digunakan untuk memanipulasi koleksi Phoenix
dan model Ecto
dengan operasi Pencarian, Sortir, dan Paginasi.
Ia menyelesaikan operasi di atas dengan menggunakan Rummage.Ecto
, untuk membuat paginasi kueri Ecto
dan menambahkan dukungan Phoenix dan HTML ke tampilan dan pengontrol. Untuk informasi tentang cara mengkonfigurasi Rummage.Ecto
kunjungi halaman ini.
Bagian terbaik tentang penggeledahan adalah ketiga operasi: Search
, Sort
, dan Paginate
terintegrasi dengan mulus dan dapat dikonfigurasi secara terpisah. Untuk melihat integrasinya yang lancar, silakan periksa informasi di bawah.
CATATAN: Rummage
tidak seperti Ransack
, dan juga tidak bermaksud seperti itu. Itu tidak menambahkan fungsi berdasarkan parameter pencarian. Jika Anda ingin memilikinya untuk suatu model, Anda selalu dapat mengonfigurasi Rummage
untuk menggunakan modul Search
untuk model tersebut. Inilah sebabnya Rummage dibuat dapat dikonfigurasi.
Telusuri, Urutkan, dan Buat Paginasi dengan lancar di Phoenix!
Ini tersedia dalam Hex, paketnya dapat diinstal sebagai:
Tambahkan rummage_phoenix
ke daftar dependensi Anda di mix.exs
:
def deps do
[
{ :rummage_phoenix , "~> 1.2.0" }
]
end
default_per_page
) Rumamge.Phoenix
dapat dikonfigurasi secara global dengan nilai default_per_page
(yang dapat diganti untuk suatu model). Ini BUKAN cara yang disukai untuk menyetel default_per_page
karena dapat menimbulkan konflik. Disarankan untuk melakukannya per model seperti yang ditunjukkan di bawah ini di bagian Pengaturan Awal. Jika Anda ingin menyetel default_per_page
untuk semua model, tambahkan ke fungsi model
di web.ex
Tambahkan konfigurasi rummage_phoenix
ke daftar konfigurasi Anda di dev.exs
:
config :rummage_phoenix ,
Rummage.Phoenix ,
default_per_page: 5
Rummage.Controller
ke modul pengontrol: defmodule MyApp.ProductController do
use MyApp.Web , :controller
use Rummage.Phoenix.Controller
# More code below....
end
index
di pengontrol: def index ( conn , params ) do
{ query , rummage } = Product
|> Rummage.Ecto . rummage ( params [ "rummage" ] )
products = Repo . all ( query )
render conn , "index.html" ,
products: products ,
rummage: rummage
end
search
di router.ex
(tidak perlu menentukan tindakan): scope "/" , MyApp do
pipe_through :browser # Use the default browser stack
get "/" , PageController , :index
resources "/products" , ProductController
end
Melakukan hal ini sendiri akan memungkinkan Anda untuk mencari, mengurutkan, dan membuat halaman dengan memperbarui params
berdasarkan permintaan. Silakan periksa tangkapan layar di bawah untuk detailnya
Rummage.View
ke modul tampilan: defmodule MyApp.ProductView do
use MyApp.Web , :view
use Rummage.Phoenix.View
# More code below...
end
Catatan: Jika Anda mendapatkan pengecualian "MyApp.Router.Helpers tidak tersedia", Anda dapat memberikan router Anda:
defmodule MyApp.ProductView do
use MyApp.Web , :view
use Rummage.Phoenix.View , helpers: MyApp.Web.Router.Helpers
# More code below...
end
atau melalui konfigurasi:
config :rummage_phoenix, Rummage.Phoenix, [
default_helpers: MyApp.Web.Router.Helpers,
]
Catatan: Jika nama path helper salah, Anda dapat menentukannya dengan:
defmodule MyApp.ProductView do
use MyApp.Web , :view
use Rummage.Phoenix.View , struct: "special_product" # will become special_product_path
# More code below...
end
Tambahkan ini di bagian bawah index.html.eex
untuk merender tautan paginasi Rummage
(Pastikan Anda meneruskan rummage
ke tampilan dari tindakan index
di pengontrol):
< % = pagination_link ( @ conn , @ rummage ) % >
Muat ulang dan seperti inilah tampilan halaman Anda:
Ganti header tabel di index.html.eex
dengan tautan pengurutan (Pastikan header adalah kolom sebenarnya dalam tabel di database.)
Ganti ini:
< th > Name < / th >
< th > Price < / th >
< th > Category < / th >
Dengan:
< th > < % = sort_link @ conn , @ rummage , [ field: :name , ci: true ] % > < / th >
< th > < % = sort_link @ conn , @ rummage , [ field: :price ] % > < /th>
ATAU untuk Urutkan berdasarkan asosiasi:
< th > < % = sort_link @ conn , @ rummage , [ field: :name , name: "Category Name" , assoc: [ "category" ] ] % > < /th>
Muat ulang dan inilah tampilan halaman Anda dengan tautan yang dapat diurutkan, bukan hanya header tabel:
CATATAN: Saat ini sedang berupaya menambahkan elemen yang lebih baik ke tampilan, panah teks di tautan pengurutan akan segera digantikan oleh ikon
Tambahkan formulir pencarian di index.html.eex
dengan bidang yang dapat dicari:
< % = search_form ( @ conn , @ rummage , [ fields:
[
name: % { label: "Search by Product Name" , search_type: "ilike" } ,
price: % { label: "Search by Price" , search_type: "eq" } ,
] , button_class: "btn" ,
] ) % >
ATAU untuk Pencarian berdasarkan asosiasi:
< % = search_form ( @ conn , @ rummage , [ fields:
[
name: % { label: "Search by Category Name" , search_type: "ilike" , assoc: [ "category" ] }
] , button_class: "btn" ,
] ) % >
Muat ulang dan halaman Anda akan terlihat seperti ini:
Bagian terbaik tentang Rummage
adalah ketiga hook/operasi terintegrasi dengan mulus tanpa mempengaruhi fungsi satu sama lain dan oleh karena itu, Anda memiliki halaman yang terlihat seperti ini:
Bawaan
Parameter penomoran halaman khusus