Rummage.Phoenix
는 검색, 정렬 및 페이지 매김 작업을 통해 Phoenix
컬렉션 및 Ecto
모델을 조작하는 데 사용할 수 있는 Phoenix
용 지원 프레임워크입니다.
Rummage.Ecto
사용하여 Ecto
쿼리에 페이지를 매기고 뷰와 컨트롤러에 Phoenix 및 HTML 지원을 추가하여 위 작업을 수행합니다. Rummage.Ecto
구성하는 방법에 대한 자세한 내용을 보려면 이 페이지를 방문하세요.
뒤적임의 가장 좋은 점은 세 가지 작업( Search
, Sort
및 Paginate
이 모두 원활하게 통합되고 별도로 구성될 수 있다는 것입니다. 원활한 통합을 확인하려면 아래 정보를 확인하세요.
참고: Rummage
Ransack
과 같지 않으며 그럴 의도도 없습니다. 검색 매개변수를 기반으로 기능을 추가하지 않습니다. 모델에 대해 이를 갖고 싶다면 언제든지 해당 모델에 대해 Search
모듈을 사용하도록 Rummage
구성할 수 있습니다. 이것이 Rummage가 구성 가능하게 된 이유입니다.
Phoenix에서 검색, 정렬, 페이지 매김을 원활하게 수행하세요!
이것은 Hex에서 사용 가능하며 패키지는 다음과 같이 설치할 수 있습니다.
mix.exs
의 종속성 목록에 rummage_phoenix
추가하세요.
def deps do
[
{ :rummage_phoenix , "~> 1.2.0" }
]
end
default_per_page
설정하는 기본 방법은 아님) Rumamge.Phoenix
default_per_page
값(모델에 대해 재정의될 수 있음)을 사용하여 전역적으로 구성할 수 있습니다. 이는 충돌이 발생할 수 있으므로 default_per_page
설정하는 데 선호되는 방법이 아닙니다 . 초기 설정 섹션에서 아래 표시된 대로 모델별로 수행하는 것이 좋습니다. 모든 모델에 대해 default_per_page
설정하려면 web.ex
의 model
기능에 추가하세요.
dev.exs
의 구성 목록에 rummage_phoenix
구성을 추가합니다.
config :rummage_phoenix ,
Rummage.Phoenix ,
default_per_page: 5
Rummage.Controller
사용하십시오. defmodule MyApp.ProductController do
use MyApp.Web , :controller
use Rummage.Phoenix.Controller
# More code below....
end
index
작업을 변경합니다. 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
router.ex
에서 search
경로를 정의합니다(작업을 정의할 필요 없음). scope "/" , MyApp do
pipe_through :browser # Use the default browser stack
get "/" , PageController , :index
resources "/products" , ProductController
end
이 작업을 수행하면 요청에 대한 params
업데이트하여 검색, 정렬 및 페이지 매김이 가능해집니다. 자세한 내용은 아래 스크린샷을 확인해주세요
Rummage.View
사용하십시오. defmodule MyApp.ProductView do
use MyApp.Web , :view
use Rummage.Phoenix.View
# More code below...
end
참고: "MyApp.Router.Helpers를 사용할 수 없습니다." 예외가 발생하는 경우 라우터에 다음을 제공할 수 있습니다.
defmodule MyApp.ProductView do
use MyApp.Web , :view
use Rummage.Phoenix.View , helpers: MyApp.Web.Router.Helpers
# More code below...
end
또는 구성을 통해:
config :rummage_phoenix, Rummage.Phoenix, [
default_helpers: MyApp.Web.Router.Helpers,
]
참고: 경로 도우미 이름이 잘못된 경우 다음을 사용하여 지정할 수 있습니다.
defmodule MyApp.ProductView do
use MyApp.Web , :view
use Rummage.Phoenix.View , struct: "special_product" # will become special_product_path
# More code below...
end
Rummage
페이지 매김 링크를 렌더링하려면 index.html.eex
하단에 이것을 추가하십시오(컨트롤러의 index
작업에서 뷰에 rummage
전달해야 합니다).
< % = pagination_link ( @ conn , @ rummage ) % >
새로고침하면 페이지가 다음과 같이 표시됩니다.
index.html.eex
의 테이블 헤더를 정렬 링크로 바꿉니다. 헤더가 데이터베이스 테이블의 실제 열인지 확인하세요.
이것을 교체하십시오:
< th > Name < / th >
< th > Price < / th >
< th > Category < / th >
와 함께:
< th > < % = sort_link @ conn , @ rummage , [ field: :name , ci: true ] % > < / th >
< th > < % = sort_link @ conn , @ rummage , [ field: :price ] % > < /th>
또는 연관별 정렬의 경우:
< th > < % = sort_link @ conn , @ rummage , [ field: :name , name: "Category Name" , assoc: [ "category" ] ] % > < /th>
새로고침하면 테이블 헤더 대신 정렬 가능한 링크가 포함된 페이지가 다음과 같이 표시됩니다.
참고: 현재 보기에 더 나은 요소를 추가하는 작업을 진행 중이며 곧 정렬 링크의 텍스트 화살표가 아이콘으로 대체될 예정입니다.
검색 가능한 필드가 있는 index.html.eex
에 검색 양식을 추가하세요.
< % = 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" ,
] ) % >
또는 협회별 검색:
< % = search_form ( @ conn , @ rummage , [ fields:
[
name: % { label: "Search by Category Name" , search_type: "ilike" , assoc: [ "category" ] }
] , button_class: "btn" ,
] ) % >
새로고침하면 페이지가 다음과 같이 보일 것입니다.
Rummage
의 가장 좋은 점은 세 가지 후크/작업이 모두 서로의 기능에 영향을 주지 않고 원활하게 통합되므로 다음과 같은 페이지를 갖게 된다는 것입니다.
기본
사용자 정의 페이지 매김 매개변수