Current section
Files
Jump to
Current section
Files
ex_admin_runtime
README.md
README.md
# ExAdmin[![Build Status][travis-img]][travis] [![Hex Version][hex-img]][hex] [![License][license-img]][license][travis-img]: https://travis-ci.org/smpallen99/ex_admin.svg?branch=master[travis]: https://travis-ci.org/smpallen99/ex_admin[hex-img]: https://img.shields.io/hexpm/v/ex_admin.svg[hex]: https://hex.pm/packages/ex_admin[license-img]: http://img.shields.io/badge/license-MIT-brightgreen.svg[license]: http://opensource.org/licenses/MITNote: This version has been updated to support both Ecto 1.1 and Ecto 2.0. See [Installation](#installation) for more information.ExAdmin is an auto administration package for [Elixir](http://elixir-lang.org/) and the [Phoenix Framework](http://www.phoenixframework.org/), a port/inspiration of [ActiveAdmin](http://activeadmin.info/) for Ruby on Rails.Checkout the [Live Demo](http://demo.exadmin.info/admin). The source code can be found at [ExAdmin Demo](https://github.com/smpallen99/ex_admin_demo).Checkout this [Additional Live Demo](http://demo2.exadmin.info/admin) for examples of many-to-many relationships, nested attributes, and authentication.See the [docs](https://hexdocs.pm/ex_admin/) and the [Wiki](https://github.com/smpallen99/ex_admin/wiki) for more information.## UsageExAdmin is an add on for an application using the [Phoenix Framework](http://www.phoenixframework.org) to create an CRUD administration tool with little or no code. By running a few mix tasks to define which Ecto Models you want to administer, you will have something that works with no additional code.Before using ExAdmin, you will need a Phoenix project and an Ecto model created.### InstallationAdd ex_admin to your deps:#### Hexmix.exs```elixir defp deps do ... {:ex_admin, "~> 0.8"}, ... end```#### GitHub with Ecto 2.0mix.exs```elixir defp deps do ... {:ex_admin, github: "smpallen99/ex_admin"}, ... end```#### GitHub with Ecto 1.1mix.exs```elixir defp deps do ... {:ex_admin, github: "smpallen99/ex_admin"}, {:phoenix_ecto, "~> 2.0.0", override: true}, # the override is necessary {:ecto, "~> 1.1", override: true}, # the override is necessary ... end```Add some admin configuration and the admin modules to the config fileconfig/config.exs```elixirconfig :ex_admin, repo: MyProject.Repo, module: MyProject, modules: [ MyProject.ExAdmin.Dashboard, ]```Fetch and compile the dependency```mix do deps.get, deps.compile```Configure ExAdmin:```mix admin.install```Add the admin routesweb/router.ex```elixirdefmodule MyProject.Router do use MyProject.Web, :router use ExAdmin.Router ... scope "/", MyProject do ... end # setup the ExAdmin routes on /admin scope "/admin", ExAdmin do pipe_through :browser admin_routes() end```Add the paging configurationlib/my_project/repo.ex```elixir defmodule MyProject.Repo do use Ecto.Repo, otp_app: :my_project use Scrivener, page_size: 10 end```Edit your brunch-config.js file and follow the instructions that the installer appended to this file. This requires you copy 2 blocks and replace the existing blocks.Start the application with `iex -S mix phoenix.server`Visit http://localhost:4000/adminYou should see the default Dashboard page.## Getting Started### Adding an Ecto Model to ExAdminTo add a model, use `admin.gen.resource` mix task:```mix admin.gen.resource MyModel```Add the new module to the config file:config/config.exs```elixirconfig :ex_admin, repo: MyProject.Repo, module: MyProject, modules: [ MyProject.ExAdmin.Dashboard, MyProject.ExAdmin.MyModel, ]```Start the phoenix server again and browse to `http://localhost:4000/admin/my_model`You can now list/add/edit/and delete `MyModel`s.### Customizing the index pageUse the `index do` command to define the fields to be displayed.admin/my_model.ex```elixirdefmodule MyProject.ExAdmin.MyModel do use ExAdmin.Register register_resource MyProject.MyModel do index do selectable_column() column :id column :name actions() # display the default actions column end endend```### Customizing the formThe following example shows how to customize the form with the `form` macro:```elixirdefmodule MyProject.ExAdmin.Contact do use ExAdmin.Register register_resource MyProject.Contact do form contact do inputs do input contact, :first_name input contact, :last_name input contact, :email input contact, :category, collection: MyProject.Category.all end inputs "Groups" do inputs :groups, as: :check_boxes, collection: MyProject.Group.all end end endend```### Customizing the show pageThe following example illustrates how to modify the show page.```elixirdefmodule MyProject.ExAdmin.Question do use ExAdmin.Register register_resource MyProject.Question do menu priority: 3 show question do attributes_table # display the defaults attributes # create a panel to list the question's choices panel "Choices" do table_for(question.choices) do column :key column :name end end end endend```## Custom TypesSupport for custom field types is done in two areas, rendering fields, and input controls.### Rendering Custom TypesUse the `ExAdmin.Render.to_string/` protocol for rendering types that are not supported by ExAdmin.For example, to support rendering a tuple, add the following file to your project:```elixir# lib/render.exdefimpl ExAdmin.Render, for: Tuple def to_string(tuple), do: inspect(tuple)end```### Input TypeUse the `:field_type_matching` config item to set the input type.For example, given the following project:```elixirdefmodule ElixirLangMoscow.SpeakerSlug do use EctoAutoslugField.Slug, from: [:name, :company], to: :slugenddefmodule ElixirLangMoscow.Speaker do use ElixirLangMoscow.Web, :model use Arc.Ecto.Model alias ElixirLangMoscow.SpeakerSlug schema "speakers" do field :slug, SpeakerSlug.Type field :avatar, ElixirLangMoscow.Avatar.Type endend```Add the following to your project's configuration:```elixirconfig :ex_admin, # ... field_type_matching: %{ ElixirLangMoscow.SpeakerSlug.Type => :string, ElixirLangMoscow.Avatar.Type => :file }```## Theme SupportExAdmin supports 2 themes. The new AdminLte2 theme is enabled by default. The old ActiveAdmin theme is also supported for those that want backward compatibility.### Changing the ThemeTo change the theme to ActiveAdmin, at the following to your `config/config.exs` file:config/config.exs```elixirconfig :ex_admin, theme: ExAdmin.Theme.ActiveAdmin, ...```### Changing the AdminLte2 Skin ColorThe AdminLte2 theme has a number of different skin colors including blue, black, purple, green, red, yellow, blue-light, black-light, purple-light, green-light, red-light, and yellow-lightTo change the skin color to, for example, purple:config/config.exs```elixirconfig :ex_admin, skin_color: :purple, ...```### Enable Theme SelectorYou can add a theme selector on the top right of the menu bar by adding the following to your `config/config.exs` file:config/config.exs```elixirconfig :ex_admin, theme_selector: [ {"AdminLte", ExAdmin.Theme.AdminLte2}, {"ActiveAdmin", ExAdmin.Theme.ActiveAdmin} ], ...```## AuthenticationExAdmin leaves the job of authentication to 3rd party packages. For an example of using [Coherence](https://github.com/smpallen99/coherence) checkout the [Contact Demo Project](https://github.com/smpallen99/contact_demo).Visit the [Wiki](https://github.com/smpallen99/ex_admin/wiki/Add-authentication) for more information on adding Authentication.## ContributingWe appreciate any contribution to ExAdmin. Check our [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) and [CONTRIBUTING.md](CONTRIBUTING.md) guides for more information. We usually keep a list of features and bugs [in the issue tracker][1].## References* Detailed Example [ExAdmin Demo](https://github.com/smpallen99/ex_admin_demo)* For a brief tutorial, please visit [Elixir Survey Tutorial](https://github.com/smpallen99/elixir_survey_tutorial)* [Live Demo](http://demo.exadmin.info/admin)* [Docs](https://hexdocs.pm/ex_admin/) [1]: https://github.com/smpallen99/ex_admin/issues [2]: http://groups.google.com/group/exadmin-talk## License`ex_admin` is Copyright (c) 2015-2016 E-MetroTelThe source code is released under the MIT License.Check [LICENSE](LICENSE) for more information.