Rummage.Phoenix
هو إطار دعم لـ Phoenix
يمكن استخدامه لمعالجة مجموعات Phoenix
ونماذج Ecto
من خلال عمليات البحث والفرز والصفحات.
إنه ينجز العمليات المذكورة أعلاه باستخدام Rummage.Ecto
، لترقيم استعلامات Ecto
وإضافة دعم Phoenix وHTML إلى طرق العرض ووحدات التحكم. للحصول على معلومات حول كيفية تكوين Rummage.Ecto
قم بزيارة هذه الصفحة.
أفضل ما في عملية البحث هو أن العمليات الثلاث: Search
Sort
Paginate
تتكامل بسلاسة ويمكن تهيئتها بشكل منفصل. للتحقق من التكامل السلس، يرجى التحقق من المعلومات أدناه.
ملاحظة: Rummage
ليس مثل Ransack
، ولا ينوي أن يكون كذلك. لا يضيف وظائف بناءً على معلمات البحث. إذا كنت ترغب في الحصول على ذلك لنموذج ما، فيمكنك دائمًا تكوين Rummage
لاستخدام وحدة Search
الخاصة بك لهذا النموذج. هذا هو السبب وراء جعل Rummage قابلاً للتكوين.
بحث وفرز وترقيم الصفحات بسلاسة في فينيكس!
هذا متوفر في Hex، ويمكن تثبيت الحزمة على النحو التالي:
أضف rummage_phoenix
إلى قائمة التبعيات الخاصة بك في mix.exs
:
def deps do
[
{ :rummage_phoenix , "~> 1.2.0" }
]
end
default_per_page
) يمكن تكوين Rumamge.Phoenix
عالميًا باستخدام قيمة default_per_page
(والتي يمكن تجاوزها للنموذج). هذه ليست الطريقة المفضلة لتعيين default_per_page
لأنها قد تؤدي إلى حدوث تعارضات. يوصى بالقيام بذلك لكل طراز كما هو موضح أدناه في قسم الإعداد الأولي. إذا كنت تريد تعيين default_per_page
لجميع النماذج، فأضفها إلى وظيفة model
في web.ex
أضف تكوين rummage_phoenix
إلى قائمة التكوينات في dev.exs
:
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
search
في router.ex
(لا داعي لتحديد الإجراء): 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
أضف هذا في أسفل ملف index.html.eex
لعرض روابط صفحات Rummage
(تأكد من تمرير rummage
من إجراء index
في وحدة التحكم):
< % = 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
هو أن جميع الخطافات/العمليات الثلاثة تتكامل بسلاسة دون التأثير على وظائف بعضها البعض، وبالتالي، لديك صفحة تبدو إلى حد ما كما يلي:
تقصير
معلمات ترقيم الصفحات المخصصة