หมายเหตุ: เวอร์ชันนี้ได้รับการอัปเดตเพื่อรองรับทั้ง Ecto 1.1 และ Ecto 2.0 ดูการติดตั้งสำหรับข้อมูลเพิ่มเติม
ExAdmin เป็นแพ็คเกจการจัดการอัตโนมัติสำหรับ Elixir และ Phoenix Framework ซึ่งเป็นพอร์ต/แรงบันดาลใจของ ActiveAdmin สำหรับ Ruby on Rails
ชำระเงินการสาธิตสด สามารถดูซอร์สโค้ดได้ที่ ExAdmin Demo
ชำระเงินการสาธิตสดเพิ่มเติมนี้เพื่อดูตัวอย่างความสัมพันธ์แบบกลุ่มต่อกลุ่ม คุณลักษณะที่ซ้อนกัน และการรับรองความถูกต้อง
ดูเอกสารและ Wiki สำหรับข้อมูลเพิ่มเติม
ExAdmin เป็นส่วนเสริมสำหรับแอปพลิเคชันที่ใช้ Phoenix Framework เพื่อสร้างเครื่องมือการดูแลระบบ CRUD โดยใช้โค้ดเพียงเล็กน้อยหรือไม่มีเลย ด้วยการรันงานผสมสองสามอย่างเพื่อกำหนดโมเดล Ecto ที่คุณต้องการจัดการ คุณจะมีบางอย่างที่ทำงานได้โดยไม่ต้องมีโค้ดเพิ่มเติม
ก่อนที่จะใช้ ExAdmin คุณจะต้องมีโปรเจ็กต์ Phoenix และสร้างโมเดล Ecto ก่อน
เพิ่ม ex_admin ให้กับ deps ของคุณ:
mix.exs
defp deps ทำ ... {:ex_admin, "~> 0.8"}, ... จบ
mix.exs
defp deps ทำ ... {:ex_admin, github: "smpallen99/ex_admin"}, ... จบ
เพิ่มการกำหนดค่าผู้ดูแลระบบและโมดูลผู้ดูแลระบบลงในไฟล์กำหนดค่า
config/config.exs
กำหนดค่า :ex_admin, repo: MyProject.Repo, โมดูล: MyProject, # MyProject.Web สำหรับฟีนิกซ์ >= 1.3.0-rc โมดูล: [MyProject.ExAdmin.Dashboard, -
ดึงข้อมูลและรวบรวมการพึ่งพา
mix do deps.get, deps.compile
กำหนดค่า ExAdmin:
mix admin.install
เพิ่มเส้นทางของผู้ดูแลระบบ
เว็บ/router.ex
defmodule MyProject.Router ทำ ใช้ MyProject.Web, :router ใช้ ExAdmin.Router - ขอบเขต "/", MyProject ทำ... จบ # ตั้งค่าเส้นทาง ExAdmin บน /admin ขอบเขต "/admin", ExAdmin dopipe_through :browseradmin_routes() จบ
เพิ่มการกำหนดค่าเพจ
lib/my_project/repo.ex
defmodule MyProject.Repo douse Ecto.Repo, otp_app: :my_projectuse Scrivener, page_size: 10 จบ
แก้ไขไฟล์ Brunch-config.js และปฏิบัติตามคำแนะนำที่โปรแกรมติดตั้งเพิ่มไว้กับไฟล์นี้ สิ่งนี้ต้องการให้คุณคัดลอก 2 บล็อกและแทนที่บล็อกที่มีอยู่
เริ่มแอปพลิเคชันด้วย iex -S mix phoenix.server
ไปที่ http://localhost:4000/admin
คุณควรเห็นหน้าแดชบอร์ดเริ่มต้น
หากต้องการเพิ่มโมเดล ให้ใช้งานผสม admin.gen.resource
:
mix admin.gen.resource MyModel
เพิ่มโมดูลใหม่ลงในไฟล์ปรับแต่ง:
config/config.exs
กำหนดค่า :ex_admin, repo: MyProject.Repo, โมดูล: โครงการของฉัน, โมดูล: [MyProject.ExAdmin.Dashboard,MyProject.ExAdmin.MyModel, -
เริ่มเซิร์ฟเวอร์ฟีนิกซ์อีกครั้งและเรียกดู http://localhost:4000/admin/my_model
ตอนนี้คุณสามารถแสดงรายการ/เพิ่ม/แก้ไข/และลบ MyModel
ได้แล้ว
ExAdmin จะใช้ชุดการแก้ไขของสคีมาของคุณ ตามค่าเริ่มต้น เราจะเรียกฟังก์ชัน changeset
บนสคีมาของคุณ แม้ว่าคุณจะสามารถกำหนดค่าเซ็ตการแก้ไขที่เราใช้สำหรับการอัปเดตและสร้างแยกกันได้
ชุดการแก้ไขที่กำหนดเอง:
defmodule TestExAdmin.ExAdmin.Simple ทำ ใช้ ExAdmin.Register register_resource TestExAdmin.ง่าย doupdate_changeset :changeset_updatecreate_changeset :changeset_create สิ้นสุด
เราสนับสนุนแบบกลุ่มต่อกลุ่มและมีความสัมพันธ์มากมายตามที่ Ecto มอบให้ เราขอแนะนำให้ใช้ cast_assoc สำหรับความสัมพันธ์แบบกลุ่มต่อกลุ่ม และ put_assoc สำหรับความสัมพันธ์แบบ has-many คุณสามารถดูตัวอย่างชุดการแก้ไขได้ในสคีมาการทดสอบของเรา
เมื่อส่งผลลัพธ์จากแบบฟอร์มสำหรับความสัมพันธ์ เราจะพยายามบังคับเพื่อให้ทำงานกับความสัมพันธ์ในชุดการแก้ไขได้ง่ายขึ้น สำหรับกล่องกาเครื่องหมายคอลเลกชัน เราจะส่งอาร์เรย์ของรหัสตัวเลือกที่เลือกไปยังเซ็ตการแก้ไขของคุณ เพื่อให้คุณสามารถรับและใช้ put_assoc ดังที่เห็นที่นี่
เพื่อที่จะสนับสนุนการลบจำนวนมาก คุณต้องตั้งค่าแอตทริบิวต์เสมือนบนสคีมาของคุณ ในสคีมาที่เกี่ยวข้อง คุณจะต้องเพิ่มแอตทริบิวต์เสมือน _destroy เพื่อให้เราสามารถติดตามคุณสมบัติการทำลายในแบบฟอร์มได้ คุณจะต้องส่งสิ่งนี้ไปยังเซ็ตการแก้ไขของคุณด้วย นี่คือตัวอย่างชุดการแก้ไข ในสถานการณ์สมมตินี้ ผู้ใช้มีผลิตภัณฑ์จำนวนมาก และผลิตภัณฑ์สามารถลบได้ เรายังมีบทบาทอีกมากมายที่เกี่ยวข้อง
defmodule TestExAdmin.User ทำ นำเข้า Ecto.Changeset ใช้ Ecto.Schema นำเข้า Ecto.Query สคีมา "ผู้ใช้" dofield :name, :stringfield :email, :stringfield :active, :boolean, default: truehas_many :products, TestExAdmin.Product, on_replace: :deletemany_to_many :roles, TestExAdmin.Role, join_through: TestExAdmin.UserRole, on_replace: :ลบ จบ @fields ~w(ชื่ออีเมลที่ใช้งานอยู่) def เซ็ตการแก้ไข(โมเดล, พารามิเตอร์ %{}) domodel|> หล่อ (params, @fields)|> validate_required([:email, :name])|> cast_assoc(:products, จำเป็น: false)|> add_roles(params) จบ def add_roles (ชุดการแก้ไข, พารามิเตอร์) doif Enum.count (Map.get (params, :roles, [])) > 0 ทำ ids = params[:roles] บทบาท = TestExAdmin.Repo.all (จาก r ใน TestExAdmin.Role, โดยที่: r.id ใน ^ids) put_assoc(changeset, :roles, Roles)else Changesetend endenddefmodule TestExAdmin.Role ทำ ใช้ Ecto.Schema นำเข้า Ecto.Changeset นามแฝง TestExAdmin.Repo สคีมา "บทบาท" dofield :name, :stringhas_many :uses_roles, TestExAdmin.UserRolemany_to_many :users, TestExAdmin.User, join_through: TestExAdmin.UserRole จบ @fields ~w(ชื่อ) def เซ็ตการแก้ไข (โมเดล, params %{}) domodel|> แคสต์ (params, @fields) endenddefmodule TestExAdmin.ผลิตภัณฑ์ทำ ใช้ Ecto.Schema นำเข้า Ecto.Changeset สคีมา "ผลิตภัณฑ์" dofield :_destroy, :boolean, virtual: truefield :title, :stringfield :price, :decimalbelongs_to :user, TestExAdmin.User จบ def เซ็ตการแก้ไข (สคีมา, พารามิเตอร์ %{}) doschema|> หล่อ (พารามิเตอร์, ~w (ราคาชื่อ user_id))|> validate_required(~w (ราคาชื่อ))|> mark_for_deletion จบ defp mark_for_deletion(changeset) do# หากตั้งค่าการลบไว้และเป็นจริง ให้เปลี่ยนการกระทำถ้า get_change(changeset, :_destroy) do %{changeset | การกระทำ: :delete}else เซ็ตการแก้ไขสิ้นสุด สิ้นสุด
มีโพสต์บล็อกที่ดีอยู่ในบล็อกของ Platformatec ซึ่งอธิบายว่าความสัมพันธ์เหล่านี้ทำงานอย่างไร: http://blog.plataformatec.com.br/2015/08/working-with-ecto-associations-and-embeds/
ใช้คำสั่ง index do
เพื่อกำหนดฟิลด์ที่จะแสดง
ผู้ดูแลระบบ/my_model.ex
defmodule MyProject.ExAdmin.MyModel ทำ ใช้ ExAdmin.Register register_resource MyProject.MyModel doindex do selectable_column() column :id column :name actions() # แสดงคอลัมน์การกระทำเริ่มต้นที่ท้าย สิ้นสุด
ตัวอย่างต่อไปนี้แสดงวิธีการปรับแต่งแบบฟอร์มด้วยแมโคร form
:
defmodule MyProject.ExAdmin.ติดต่อทำ ใช้ ExAdmin.Register register_resource MyProject.Contact doform contact ทำอินพุต doinput contact, :first_nameinput contact, :last_nameinput contact, :emailinput contact, :register_date, type: Date # if you use Ecto :date type in your schemainput contact, :category, collection: MyProject.Category .all สิ้นสุดอินพุต "กลุ่ม" doinputs :groups, as: :check_boxes, collection: MyProject.Group.all สิ้นสุด สิ้นสุด
ตัวอย่างต่อไปนี้แสดงวิธีการแก้ไขหน้าแสดง
defmodule MyProject.ExAdmin.Question ทำ ใช้ ExAdmin.Register register_resource MyProject.Question ลำดับความสำคัญของโดม: 3 แสดงคำถาม ทำแอตทริบิวต์_ตาราง # แสดงแอตทริบิวต์เริ่มต้น # สร้างแผงเพื่อแสดงรายการแผงตัวเลือกของคำถาม "ตัวเลือก" dotable_for(question.choices) ทำคอลัมน์ :คีย์คอลัมน์ :ชื่อสิ้นสุด สิ้นสุด สิ้นสุด
การรองรับประเภทฟิลด์แบบกำหนดเองทำได้ในสองส่วน ได้แก่ ฟิลด์การแสดงผล และการควบคุมอินพุต
ใช้โปรโตคอล ExAdmin.Render.to_string/
สำหรับประเภทการเรนเดอร์ที่ ExAdmin ไม่รองรับ
ตัวอย่างเช่น เพื่อรองรับการเรนเดอร์ทูเพิล ให้เพิ่มไฟล์ต่อไปนี้ในโครงการของคุณ:
# lib/render.exdefimpl ExAdmin.Render สำหรับ: Tuple ทำ def to_string (tuple) ทำ: ตรวจสอบ (tuple) end
ใช้รายการกำหนดค่า :field_type_matching
เพื่อตั้งค่าประเภทอินพุต
ยกตัวอย่างโครงการต่อไปนี้:
defmodule ElixirLangMoscow.SpeakerSlug ทำ ใช้ EctoAutoslugField.Slug จาก: [:name, :company] ถึง: :slugenddefmodule ElixirLangMoscow.Speaker ทำ ใช้ ElixirLangMoscow.Web, :model ใช้โปรแกรม Arc.Ecto.Model นามแฝง ElixirLangMoscow.SpeakerSlug แผนผัง "speakers" dofield :slug, SpeakerSlug.Typefield :avatar, ElixirLangMoscow.Avatar.Type สิ้นสุด
เพิ่มสิ่งต่อไปนี้ในการกำหนดค่าโครงการของคุณ:
กำหนดค่า :ex_admin, - field_type_matching: %{ElixirLangMoscow.SpeakerSlug.Type => :string,ElixirLangMoscow.Avatar.Type => :file -
ExAdmin รองรับ 2 ธีม ธีม AdminLte2 ใหม่ถูกเปิดใช้งานตามค่าเริ่มต้น ธีม ActiveAdmin แบบเก่ายังรองรับสำหรับผู้ที่ต้องการความเข้ากันได้แบบย้อนหลัง
หากต้องการเปลี่ยนธีมเป็น ActiveAdmin ให้ทำดังนี้กับไฟล์ config/config.exs
ของคุณ:
config/config.exs
กำหนดค่า :ex_admin, ธีม: ExAdmin.Theme.ActiveAdmin, -
ธีม AdminLte2 มีสีผิวที่แตกต่างกันจำนวนหนึ่ง ได้แก่ สีฟ้า, สีดำ, สีม่วง, สีเขียว, สีแดง, สีเหลือง, แสงสีน้ำเงิน, แสงสีดำ, แสงสีม่วง, แสงสีเขียว, แสงสีแดง และแสงสีเหลือง
หากต้องการเปลี่ยนสีผิวเป็นสีม่วง:
config/config.exs
กำหนดค่า :ex_admin, skin_color: :สีม่วง, -
คุณสามารถเพิ่มตัวเลือกธีมได้ที่ด้านบนขวาของแถบเมนูโดยเพิ่มสิ่งต่อไปนี้ลงในไฟล์ config/config.exs
ของคุณ:
config/config.exs
กำหนดค่า :ex_admin, theme_selector: [{"AdminLte", ExAdmin.Theme.AdminLte2 โมดูล ActiveAdmin", ExAdmin.Theme.ActiveAdmin} - -
คุณสามารถแทนที่ชื่อของโมเดลได้โดยการกำหนดฟังก์ชัน model_name/0
บนโมดูล สิ่งนี้มีประโยชน์หากคุณต้องการใช้โมดูลอื่นสำหรับการกระทำบางอย่างของคุณ
ผู้ดูแลระบบ/my_model.ex
def model_name ทำ "custom_name"สิ้นสุด
ExAdmin ออกจากงานการตรวจสอบสิทธิ์ไปยังแพ็คเกจของบุคคลที่สาม สำหรับตัวอย่างการใช้การชำระเงินแบบ Coherence ใน Contact Demo Project
เยี่ยมชม Wiki เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มการรับรองความถูกต้อง
เราขอขอบคุณการมีส่วนร่วมกับ ExAdmin ตรวจสอบคำแนะนำ CODE_OF_CONDUCT.md และ CONTRIBUTING.md ของเราสำหรับข้อมูลเพิ่มเติม โดยปกติเราจะเก็บรายการคุณสมบัติและจุดบกพร่องไว้ในเครื่องมือติดตามปัญหา
ตัวอย่างโดยละเอียด ExAdmin Demo
สำหรับบทช่วยสอนสั้นๆ โปรดไปที่บทช่วยสอนแบบสำรวจ Elixir
การสาธิตสด
เอกสาร
ex_admin
เป็นลิขสิทธิ์ (c) 2015-2016 E-MetroTel
ซอร์สโค้ดเผยแพร่ภายใต้ใบอนุญาต MIT
ตรวจสอบใบอนุญาตสำหรับข้อมูลเพิ่มเติม