Catatan: Versi ini telah diperbarui untuk mendukung Ecto 1.1 dan Ecto 2.0. Lihat Instalasi untuk informasi lebih lanjut.
ExAdmin adalah paket administrasi otomatis untuk Elixir dan Phoenix Framework, port/inspirasi ActiveAdmin untuk Ruby on Rails.
Lihat Demo Langsung. Kode sumber dapat ditemukan di Demo ExAdmin.
Lihat Demo Langsung Tambahan ini untuk mengetahui contoh hubungan banyak ke banyak, atribut bertumpuk, dan autentikasi.
Lihat dokumen dan Wiki untuk informasi lebih lanjut.
ExAdmin adalah add-on untuk aplikasi yang menggunakan Phoenix Framework untuk membuat alat administrasi CRUD dengan sedikit atau tanpa kode. Dengan menjalankan beberapa tugas campuran untuk menentukan Model Ecto mana yang ingin Anda kelola, Anda akan mendapatkan sesuatu yang berfungsi tanpa kode tambahan.
Sebelum menggunakan ExAdmin, Anda memerlukan proyek Phoenix dan model Ecto yang dibuat.
Tambahkan ex_admin ke deps Anda:
campuran.exs
deps deps lakukan ... {:ex_admin, "~> 0.8"}, ... akhir
campuran.exs
deps deps lakukan ... {:ex_admin, github: "smpallen99/ex_admin"}, ... akhir
Tambahkan beberapa konfigurasi admin dan modul admin ke file konfigurasi
config/config.exs
konfigurasi :ex_admin, repo: Proyek Saya.Repo, modul: Proyek Saya, # Proyek Saya.Web untuk phoenix >= 1.3.0-rc modul: [Proyek Saya.ExAdmin.Dashboard, ]
Ambil dan kompilasi ketergantungan
mix do deps.get, deps.compile
Konfigurasikan ExAdmin:
mix admin.install
Tambahkan rute admin
web/router.ex
defmodule MyProject.Router lakukan gunakan Proyek Saya.Web, :router gunakan ExAdmin.Router ... lingkup "/", Proyek Saya lakukan... akhir # atur rute ExAdmin di /admin cakupan "/admin", ExAdmin dopipe_through :browseradmin_routes() akhir
Tambahkan konfigurasi paging
lib/proyek_saya/repo.ex
defmodule MyProject.Repo douse Ecto.Repo, otp_app: :my_projectuse Scrivener, page_size: 10 akhir
Edit file brunch-config.js Anda dan ikuti instruksi yang ditambahkan penginstal ke file ini. Ini mengharuskan Anda menyalin 2 blok dan mengganti blok yang ada.
Mulai aplikasi dengan iex -S mix phoenix.server
Kunjungi http://localhost:4000/admin
Anda akan melihat halaman Dashboard default.
Untuk menambahkan model, gunakan tugas campuran admin.gen.resource
:
mix admin.gen.resource MyModel
Tambahkan modul baru ke file konfigurasi:
config/config.exs
konfigurasi :ex_admin, repo: Proyek Saya.Repo, modul: Proyek Saya, modul: [Proyek Saya.ExAdmin.Dashboard,Proyek Saya.ExAdmin.Model Saya, ]
Mulai server phoenix lagi dan ramban ke http://localhost:4000/admin/my_model
Anda sekarang dapat membuat daftar/menambah/mengedit/dan menghapus MyModel
s.
ExAdmin akan menggunakan perubahan skema Anda. Secara default, kami memanggil fungsi changeset
pada skema Anda, meskipun Anda dapat mengonfigurasi set perubahan yang kami gunakan untuk memperbarui dan membuat secara terpisah.
perubahan khusus:
defmodule TestExAdmin.ExAdmin.Sederhana dilakukan gunakan ExAdmin.Daftar register_resource TestExAdmin.Doupdate_changeset sederhana :changeset_updatecreate_changeset :changeset_create akhir
Kami mendukung banyak-ke-banyak dan memiliki banyak hubungan seperti yang disediakan oleh Ecto. Kami merekomendasikan penggunaan cast_assoc untuk hubungan banyak-ke-banyak dan put_assoc untuk hubungan banyak-banyak. Anda dapat melihat contoh perubahan di skema pengujian kami
Saat meneruskan hasil dari formulir untuk hubungan, kami melakukan beberapa pemaksaan agar lebih mudah digunakan dalam kumpulan perubahan Anda. Untuk kotak centang koleksi kami akan meneruskan array id opsi yang dipilih ke set perubahan Anda sehingga Anda bisa mendapatkannya dan menggunakan put_assoc seperti yang terlihat di sini
Untuk mendukung banyak penghapusan, Anda perlu menyiapkan atribut virtual pada skema Anda. Pada skema terkait Anda perlu menambahkan atribut virtual _destroy sehingga kami dapat melacak properti penghancuran dalam formulir. Anda juga perlu memasukkan ini ke dalam set perubahan Anda. Berikut adalah contoh perubahan. Dalam skenario ini Pengguna memiliki banyak produk dan produk dapat dihapus. Kami juga memiliki banyak peran yang terkait.
defmodule TestExAdmin.Pengguna melakukannya impor Ecto.Changeset gunakan Ecto.Schema impor Ecto.Query skema "pengguna" 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: :menghapus akhir @fields ~w(nama email aktif) def changeset(model, params %{}) domodel|> cast(params, @fields)|> validasi_required([:email, :name])|> cast_assoc(:products, diperlukan: false)|> add_roles(params) akhir def add_roles(changeset, params) doif Enum.count(Map.get(params, :roles, [])) > 0 do ids = params[:roles] role = TestExAdmin.Repo.all(dari r di TestExAdmin.Role, dimana: r.id di ^ids) put_assoc(changeset, :roles, role)else changesetend endenddefmodule TestExAdmin.Role lakukan gunakan Ecto.Schema impor Ecto.Changeset alias TestExAdmin.Repo skema "peran" dofield :name, :stringhas_many :uses_roles, TestExAdmin.UserRolemany_to_many :users, TestExAdmin.User, join_through: TestExAdmin.UserRole akhir @fields ~w(nama) def changeset(model, params %{}) domodel|> cast(params, @fields) endenddefmodule TestExAdmin.Produk lakukan gunakan Ecto.Schema impor Ecto.Changeset skema "produk" dofield :_destroy, :boolean, virtual: truefield :title, :stringfield :price, :decimalbelongs_to :user, TestExAdmin.User akhir def changeset(skema, params %{}) doschema|> cast(params, ~w(harga judul user_id))|> validasi_required(~w(harga judul))|> mark_for_deletion akhir defp mark_for_deletion(changeset) do# Jika delete telah disetel dan benar, mari kita ubah tindakannyaif get_change(changeset, :_destroy) do %{changeset | tindakan: :delete}lainnya ubah setend akhir
Entri blog yang bagus ada di blog Platformatec yang menjelaskan cara kerja hubungan ini: http://blog.plataformatec.com.br/2015/08/working-with-ecto-associations-and-embeds/
Gunakan perintah index do
untuk menentukan bidang yang akan ditampilkan.
admin/model_saya.ex
defmodule MyProject.ExAdmin.MyModel lakukan gunakan ExAdmin.Daftar register_resource MyProject.MyModel doindex do selectable_column() kolom :id kolom :nama tindakan() # menampilkan tindakan default di akhir kolom akhir
Contoh berikut memperlihatkan cara mengkustomisasi formulir dengan makro form
:
defmodule MyProject.ExAdmin.Contact lakukan gunakan ExAdmin.Daftar register_resource MyProject.Contact doform contact do inputs 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 end inputs "Grup" doinputs :groups, as: :check_boxes, collection: Proyek Saya.Grup.semua akhir akhir
Contoh berikut mengilustrasikan cara memodifikasi halaman pertunjukan.
defmodule MyProject.ExAdmin.Question lakukan gunakan ExAdmin.Daftar register_resource MyProject.Question prioritas domenu: 3tampilkan pertanyaan lakukan atribut_tabel # tampilkan atribut default # buat panel untuk membuat daftar panel pilihan pertanyaan "Pilihan" dotable_for(question.choices) do kolom :kolom kunci :nameend endend akhir
Dukungan untuk jenis bidang khusus dilakukan di dua area, bidang rendering, dan kontrol masukan.
Gunakan protokol ExAdmin.Render.to_string/
untuk jenis rendering yang tidak didukung oleh ExAdmin.
Misalnya, untuk mendukung rendering Tuple, tambahkan file berikut ke proyek Anda:
# lib/render.exdefimpl ExAdmin.Render, untuk: Tuple do def to_string(tuple), lakukan: inspeksi(tuple)end
Gunakan item konfigurasi :field_type_matching
untuk mengatur jenis input.
Misalnya, diberikan proyek berikut:
defmodule ElixirLangMoscow.SpeakerSlug lakukan gunakan EctoAutoslugField.Slug, dari: [:name, :company], ke: :slugenddefmodule ElixirLangMoscow.Speaker do gunakan ElixirLangMoscow.Web, :model gunakan Arc.Ecto.Model alias ElixirLangMoscow.SpeakerSlug skema "speaker" dofield :slug, SpeakerSlug.Typefield :avatar, ElixirLangMoscow.Avatar.Type akhir
Tambahkan yang berikut ke konfigurasi proyek Anda:
konfigurasi :ex_admin, # ... field_type_matching: %{ElixirLangMoscow.SpeakerSlug.Type => :string,ElixirLangMoscow.Avatar.Type => :file }
ExAdmin mendukung 2 tema. Tema AdminLte2 baru diaktifkan secara default. Tema ActiveAdmin lama juga didukung bagi mereka yang menginginkan kompatibilitas ke belakang.
Untuk mengubah tema menjadi ActiveAdmin, berikut ini file config/config.exs
Anda:
config/config.exs
konfigurasi :ex_admin, tema: ExAdmin.Theme.ActiveAdmin, ...
Tema AdminLte2 memiliki sejumlah warna kulit yang berbeda termasuk biru, hitam, ungu, hijau, merah, kuning, biru terang, hitam terang, ungu terang, hijau terang, merah terang, dan kuning terang.
Untuk mengubah warna kulit menjadi ungu misalnya:
config/config.exs
konfigurasi :ex_admin, warna_kulit: :ungu, ...
Anda dapat menambahkan pemilih tema di kanan atas bilah menu dengan menambahkan yang berikut ini ke file config/config.exs
Anda:
config/config.exs
konfigurasi :ex_admin, theme_selector: [{"AdminLte", ExAdmin.Theme.AdminLte2},{"ActiveAdmin", ExAdmin.Theme.ActiveAdmin} ], ...
Anda dapat mengganti nama model dengan mendefinisikan fungsi model_name/0
pada modul. Ini berguna jika Anda ingin menggunakan modul berbeda untuk beberapa tindakan Anda.
admin/model_saya.ex
def model_name lakukan "nama_kustom" berakhir
ExAdmin menyerahkan tugas otentikasi ke paket pihak ketiga. Untuk contoh penggunaan Koherensi, checkout Proyek Demo Kontak.
Kunjungi Wiki untuk informasi lebih lanjut tentang menambahkan Otentikasi.
Kami menghargai kontribusi apa pun kepada ExAdmin. Periksa panduan CODE_OF_CONDUCT.md dan CONTRIBUTING.md kami untuk informasi lebih lanjut. Kami biasanya menyimpan daftar fitur dan bug di pelacak masalah.
Contoh Detil Demo ExAdmin
Untuk tutorial singkat, silakan kunjungi Tutorial Survei Elixir
Demo Langsung
dokumen
ex_admin
adalah Hak Cipta (c) 2015-2016 E-MetroTel
Kode sumber dirilis di bawah Lisensi MIT.
Periksa LISENSI untuk informasi lebih lanjut.