Hinweis: Diese Version wurde aktualisiert, um sowohl Ecto 1.1 als auch Ecto 2.0 zu unterstützen. Weitere Informationen finden Sie unter Installation.
ExAdmin ist ein automatisches Verwaltungspaket für Elixir und das Phoenix Framework, eine Portierung/Inspiration von ActiveAdmin für Ruby on Rails.
Schauen Sie sich die Live-Demo an. Den Quellcode finden Sie unter ExAdmin Demo.
Schauen Sie sich diese zusätzliche Live-Demo an, um Beispiele für Viele-zu-Viele-Beziehungen, verschachtelte Attribute und Authentifizierung zu erhalten.
Weitere Informationen finden Sie in den Dokumenten und im Wiki.
ExAdmin ist ein Add-on für eine Anwendung, die das Phoenix Framework verwendet, um ein CRUD-Verwaltungstool mit wenig oder keinem Code zu erstellen. Indem Sie ein paar Mischaufgaben ausführen, um zu definieren, welche Ecto-Modelle Sie verwalten möchten, erhalten Sie etwas, das ohne zusätzlichen Code funktioniert.
Bevor Sie ExAdmin verwenden können, müssen Sie ein Phoenix-Projekt und ein Ecto-Modell erstellen.
Fügen Sie ex_admin zu Ihren Deps hinzu:
mix.exs
defp deps do ... {:ex_admin, "~> 0.8"}, ... Ende
mix.exs
defp deps do ... {:ex_admin, github: "smpallen99/ex_admin"}, ... Ende
Fügen Sie der Konfigurationsdatei einige Admin-Konfigurationen und die Admin-Module hinzu
config/config.exs
config :ex_admin, Repo: MyProject.Repo, Modul: MyProject, # MyProject.Web für Phoenix >= 1.3.0-rc Module: [MyProject.ExAdmin.Dashboard, ]
Rufen Sie die Abhängigkeit ab und kompilieren Sie sie
mix do deps.get, deps.compile
ExAdmin konfigurieren:
mix admin.install
Fügen Sie die Admin-Routen hinzu
web/router.ex
defmodule MyProject.Router tun Verwenden Sie MyProject.Web, :router Verwenden Sie ExAdmin.Router ... Bereich „/“, MyProject tun... Ende # Richten Sie die ExAdmin-Routen auf /admin ein Geltungsbereich „/admin“, ExAdmin dopipe_through :browseradmin_routes() Ende
Fügen Sie die Paging-Konfiguration hinzu
lib/my_project/repo.ex
defmodule MyProject.Repo douse Ecto.Repo, otp_app: :my_projectuse Scrivener, page_size: 10 Ende
Bearbeiten Sie Ihre brunch-config.js-Datei und befolgen Sie die Anweisungen, die das Installationsprogramm an diese Datei angehängt hat. Dazu müssen Sie 2 Blöcke kopieren und die vorhandenen Blöcke ersetzen.
Starten Sie die Anwendung mit iex -S mix phoenix.server
Besuchen Sie http://localhost:4000/admin
Sie sollten die Standard-Dashboard-Seite sehen.
Um ein Modell hinzuzufügen, verwenden Sie die Mix-Aufgabe admin.gen.resource
:
mix admin.gen.resource MyModel
Fügen Sie das neue Modul zur Konfigurationsdatei hinzu:
config/config.exs
config :ex_admin, Repo: MyProject.Repo, Modul: MyProject, Module: [MyProject.ExAdmin.Dashboard,MyProject.ExAdmin.MyModel, ]
Starten Sie den Phoenix-Server erneut und navigieren Sie zu http://localhost:4000/admin/my_model
Sie können jetzt MyModel
s auflisten/hinzufügen/bearbeiten/löschen.
ExAdmin verwendet die Änderungssätze Ihres Schemas. Standardmäßig rufen wir die changeset
-Funktion in Ihrem Schema auf, Sie können den Changeset, den wir für die Aktualisierung verwenden, jedoch separat konfigurieren und erstellen.
Benutzerdefinierter Änderungssatz:
defmodule TestExAdmin.ExAdmin.Simple tun Verwenden Sie ExAdmin.Register register_resource TestExAdmin.Simple doupdate_changeset :changeset_updatecreate_changeset :changeset_create enden
Wir unterstützen Many-to-Many und haben viele Beziehungen, wie sie Ecto bietet. Wir empfehlen die Verwendung von cast_assoc für Viele-zu-Viele-Beziehungen und put_assoc für Has-Viele-Beziehungen. Beispiel-Changesets finden Sie in unseren Testschemata
Bei der Übergabe von Ergebnissen aus einem Formular für Beziehungen führen wir eine gewisse Erzwingung durch, um die Arbeit mit ihnen in Ihrem Änderungssatz zu erleichtern. Für Sammlungs-Kontrollkästchen übergeben wir ein Array der ausgewählten Options-IDs an Ihren Changeset, damit Sie diese abrufen und put_assoc verwenden können, wie hier gezeigt
Um viele Löschungen zu unterstützen, müssen Sie ein virtuelles Attribut in Ihrem Schema einrichten. Im zugehörigen Schema müssen Sie ein virtuelles Attribut _destroy hinzufügen, damit wir die Eigenschaft destroy im Formular verfolgen können. Sie müssen dies auch in Ihren Änderungssatz umwandeln. Hier ist ein Beispiel-Changeset. In diesem Szenario verfügt ein Benutzer über viele Produkte und Produkte können gelöscht werden. Mit uns sind auch viele Rollen verbunden.
defmodule TestExAdmin.User tun Ecto.Changeset importieren Verwenden Sie Ecto.Schema Ecto.Query importieren Schema „Benutzer“ 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: :löschen Ende @fields ~w(Name der aktiven E-Mail-Adresse) def changeset(model, params %{}) domodel|> cast(params, @fields)|>validate_required([:email, :name])|> cast_assoc(:products, required: false)|> add_roles(params) Ende def add_roles(changeset, params) doif Enum.count(Map.get(params, :roles, [])) > 0 do ids = params[:roles] Roles = TestExAdmin.Repo.all(from r in TestExAdmin.Role, wobei: r.id in ^ids) put_assoc(changeset, :roles, Roles)else changesetend enddefmodule TestExAdmin.Role tun Verwenden Sie Ecto.Schema Ecto.Changeset importieren Alias TestExAdmin.Repo Schema „Rollen“ dofield :name, :stringhas_many :uses_roles, TestExAdmin.UserRolemany_to_many :users, TestExAdmin.User, join_through: TestExAdmin.UserRole Ende @fields ~w(Name) def changeset(model, params %{}) domodel|> cast(params, @fields) enddefmodule TestExAdmin.Product do Verwenden Sie Ecto.Schema Ecto.Changeset importieren Schema „Produkte“ dofield :_destroy, :boolean, virtual: truefield :title, :stringfield :price, :decimalbelongs_to :user, TestExAdmin.User Ende def changeset(schema, params %{}) doschema|> cast(params, ~w(title price user_id))|>validate_required(~w(title price))|> mark_for_deletion Ende defp mark_for_deletion(changeset) do# Wenn delete gesetzt wurde und wahr ist, ändern wir die Aktionif get_change(changeset, :_destroy) do %{changeset | Aktion: :delete}else changesetend enden
Auf dem Platformatec-Blog gibt es einen guten Blogbeitrag, der beschreibt, wie diese Beziehungen funktionieren: http://blog.plataformatec.com.br/2015/08/working-with-ecto-associations-and-embeds/
Verwenden Sie den Befehl index do
um die anzuzeigenden Felder zu definieren.
admin/my_model.ex
defmodule MyProject.ExAdmin.MyModel tun Verwenden Sie ExAdmin.Register register_resource MyProject.MyModel doindex do selectable_column() Column :id Column :Name Actions() # zeigt das Standard-Aktionsspaltenende an enden
Das folgende Beispiel zeigt, wie Sie das Formular mit dem form
anpassen:
defmodule MyProject.ExAdmin.Contact do Verwenden Sie ExAdmin.Register register_resource MyProject.Contact doform contact do inputs doinput contact, :first_nameinput contact, :last_nameinput contact, :emailinput contact, :register_date, type: Date # wenn Sie Ecto :date verwenden, geben Sie in Ihrem Schemainput contact, :category, Collection: MyProject.Category ein .all end inputs „Groups“ doinputs :groups, as: :check_boxes, Sammlung: MyProject.Group.all endend enden
Das folgende Beispiel veranschaulicht, wie die Show-Seite geändert wird.
defmodule MyProject.ExAdmin.Question do Verwenden Sie ExAdmin.Register register_resource MyProject.Question Domenu-Priorität: 3 Frage anzeigen do attributes_table # die Standardattribute anzeigen # ein Panel erstellen, um die Auswahlmöglichkeiten der Frage aufzulisten. Panel „Choices“ dotable_for(question.choices) do Column :key Column :nameend endend enden
Die Unterstützung für benutzerdefinierte Feldtypen erfolgt in zwei Bereichen: Rendering-Felder und Eingabesteuerelemente.
Verwenden Sie das ExAdmin.Render.to_string/
-Protokoll zum Rendern von Typen, die von ExAdmin nicht unterstützt werden.
Um beispielsweise das Rendern eines Tupels zu unterstützen, fügen Sie Ihrem Projekt die folgende Datei hinzu:
# lib/render.exdefimpl ExAdmin.Render, für: Tuple do def to_string(tuple), do: inspect(tuple)end
Verwenden Sie das Konfigurationselement :field_type_matching
um den Eingabetyp festzulegen.
Nehmen wir zum Beispiel das folgende Projekt:
defmodule ElixirLangMoscow.SpeakerSlug do Verwenden Sie EctoAutoslugField.Slug von: [:name, :company] bis: :slugenddefmodule ElixirLangMoscow.Speaker Verwenden Sie ElixirLangMoscow.Web, :model Verwenden Sie Arc.Ecto.Model alias ElixirLangMoscow.SpeakerSlug Schema „Lautsprecher“ dofield :slug, SpeakerSlug.Typefield :avatar, ElixirLangMoscow.Avatar.Type enden
Fügen Sie Folgendes zur Konfiguration Ihres Projekts hinzu:
config :ex_admin, # ... field_type_matching: %{ElixirLangMoscow.SpeakerSlug.Type => :string,ElixirLangMoscow.Avatar.Type => :file }
ExAdmin unterstützt 2 Themen. Das neue AdminLte2-Design ist standardmäßig aktiviert. Das alte ActiveAdmin-Design wird auch für diejenigen unterstützt, die Abwärtskompatibilität wünschen.
Um das Design in ActiveAdmin zu ändern, gehen Sie wie folgt in Ihre config/config.exs
Datei ein:
config/config.exs
config :ex_admin, Thema: ExAdmin.Theme.ActiveAdmin, ...
Das AdminLte2-Design verfügt über eine Reihe verschiedener Hautfarben, darunter Blau, Schwarz, Lila, Grün, Rot, Gelb, Blaulicht, Schwarzlicht, Lila-Licht, Grünlicht, Rotlicht und Gelblicht
Um die Hautfarbe beispielsweise in Lila zu ändern:
config/config.exs
config :ex_admin, Hautfarbe: :lila, ...
Sie können oben rechts in der Menüleiste eine Themenauswahl hinzufügen, indem Sie Folgendes zu Ihrer Datei config/config.exs
hinzufügen:
config/config.exs
config :ex_admin, theme_selector: [{"AdminLte", ExAdmin.Theme.AdminLte2},{"ActiveAdmin", ExAdmin.Theme.ActiveAdmin} ], ...
Sie können den Namen eines Modells überschreiben, indem Sie im Modul eine Funktion model_name/0
definieren. Dies ist nützlich, wenn Sie für einige Ihrer Aktionen ein anderes Modul verwenden möchten.
admin/my_model.ex
def Modellname do „custom_name“ende
ExAdmin überlässt die Authentifizierung den Paketen von Drittanbietern. Ein Beispiel für die Verwendung von Coherence finden Sie im Contact Demo Project.
Weitere Informationen zum Hinzufügen der Authentifizierung finden Sie im Wiki.
Wir freuen uns über jeden Beitrag zu ExAdmin. Weitere Informationen finden Sie in unseren Leitfäden CODE_OF_CONDUCT.md und CONTRIBUTING.md. Normalerweise führen wir im Issue-Tracker eine Liste der Funktionen und Fehler.
Detailliertes Beispiel einer ExAdmin-Demo
Eine kurze Anleitung finden Sie im Elixir Survey Tutorial
Live-Demo
Dokumente
ex_admin
ist Copyright (c) 2015-2016 E-MetroTel
Der Quellcode wird unter der MIT-Lizenz veröffentlicht.
Weitere Informationen finden Sie unter LIZENZ.