ملاحظة: تم تحديث هذا الإصدار لدعم كل من 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 إلى المديريات الخاصة بك:
mix.exs
يقوم defp dep ... {:ex_admin, "~> 0.8"}, ... نهاية
mix.exs
defp deps do ... {:ex_admin, github: "smpallen99/ex_admin"}, ... نهاية
أضف بعض تكوينات المشرف ووحدات الإدارة إلى ملف التكوين
التكوين/config.exs
التكوين: ex_admin، الريبو: MyProject.Repo، الوحدة النمطية: MyProject، # MyProject.Web لـ Phoenix>= 1.3.0-rc الوحدات: [MyProject.ExAdmin.Dashboard، ]
جلب وتجميع التبعية
mix do deps.get, deps.compile
تكوين ExAdmin:
mix admin.install
أضف مسارات الإدارة
الويب/router.ex
قم بإلغاء الوحدة 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 الخاص بك واتبع الإرشادات التي ألحقها برنامج التثبيت بهذا الملف. يتطلب ذلك نسخ كتلتين واستبدال الكتل الموجودة.
ابدأ التطبيق باستخدام iex -S mix phoenix.server
تفضل بزيارة http://localhost:4000/admin
يجب أن تشاهد صفحة لوحة المعلومات الافتراضية.
لإضافة نموذج، استخدم مهمة مزيج admin.gen.resource
:
mix admin.gen.resource MyModel
أضف الوحدة الجديدة إلى ملف التكوين:
التكوين/config.exs
التكوين: ex_admin، الريبو: MyProject.Repo، الوحدة النمطية: مشروعي، الوحدات النمطية: [MyProject.ExAdmin.Dashboard، MyProject.ExAdmin.MyModel، ]
قم بتشغيل خادم Phoenix مرة أخرى وتصفح إلى http://localhost:4000/admin/my_model
يمكنك الآن إدراج/إضافة/تحرير/وحذف MyModel
s.
سيستخدم ExAdmin مجموعات تغييرات المخطط الخاص بك. افتراضيًا، نستدعي وظيفة changeset
في مخططك، على الرغم من أنه يمكنك تكوين مجموعة التغييرات التي نستخدمها للتحديث وإنشائها بشكل منفصل.
مجموعة التغييرات المخصصة:
defmodule TestExAdmin.ExAdmin.Simple استخدم ExAdmin.Register Register_resource TestExAdmin.Simple doupdate_changeset :changeset_updatecreate_changeset :changeset_create نهاية
نحن ندعم العديد من الأطراف ولدينا العديد من العلاقات على النحو الذي توفره Ecto. نوصي باستخدام cast_assoc للعلاقات من متعدد إلى متعدد وput_assoc من أجل العلاقات التي تحتوي على العديد. يمكنك رؤية أمثلة لمجموعات التغييرات في مخططات الاختبار الخاصة بنا
عند تمرير النتائج من نموذج العلاقات، فإننا نقوم ببعض الإجبار لتسهيل العمل معهم في مجموعة التغييرات الخاصة بك. بالنسبة لمربعات اختيار التجميع، سنمرر مجموعة من معرفات الخيارات المحددة إلى مجموعة التغييرات الخاصة بك حتى تتمكن من الحصول عليها واستخدام 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 Changeset(model, params %{}) domodel|> cast(params, @fields)|> validate_required([:email, :name])|> cast_assoc(:products, Required: false)|> add_roles(params) نهاية def add_roles(changeset, params) doif Enum.count(Map.get(params, :roles, [])) > 0 do ids = params[:roles] role = TestExAdmin.Repo.all(from r في TestExAdmin.Role، حيث: r.id في ^ids) put_assoc(changeset, :roles, role)else Changesetend endenddefmodule TestExAdmin.Role القيام به استخدم Ecto.Schema استيراد Ecto.Changeset الاسم المستعار TestExAdmin.Repo مخطط "الأدوار" dofield: الاسم،: stringhas_many:uses_roles، TestExAdmin.UserRolemany_to_many:users، TestExAdmin.User، join_through: TestExAdmin.UserRole نهاية @الحقول ~ ث (الاسم) def Changeset(model, params %{}) domodel|> cast(params, @fields) endenddefmodule TestExAdmin.Product يفعل استخدم Ecto.Schema استيراد Ecto.Changeset مخطط "المنتجات" dofield :_destroy، :boolean، virtual: truefield :title، :stringfield :price، :decimalbelongs_to :user، TestExAdmin.User نهاية def Changeset(schema, params %{}) doschema|> cast(params, ~w(title Price user_id))|> validate_required(~w(سعر العنوان))|> mark_for_deletion نهاية defp mark_for_deletion(changeset) do# إذا تم تعيين الحذف وكان صحيحًا، فلنغير الإجراءif get_change(changeset, :_destroy) do %{changeset | الإجراء: :delete}else Changesetend نهاية
يوجد منشور مدونة جيد على مدونة Platformatec يصف كيفية عمل هذه العلاقات: http://blog.plataformatec.com.br/2015/08/working-with-ecto-associations-and-embeds/
استخدم أمر index do
لتحديد الحقول التي سيتم عرضها.
admin/my_model.ex
defmodule MyProject.ExAdmin.MyModel يفعل استخدم ExAdmin.Register Register_resource MyProject.MyModel doindex do Selectable_column() column :id column :nameactions() # عرض عمود الإجراءات الافتراضية نهاية
يوضح المثال التالي كيفية تخصيص النموذج باستخدام ماكرو form
:
defmodule MyProject.ExAdmin.Contact القيام به استخدم ExAdmin.Register Register_resource MyProject.Contact doform contact do inputs doinput contact،:first_nameinput contact،:last_nameinput contact،:emailinput contact،:register_date، اكتب: Date # إذا كنت تستخدم Ecto :date اكتب في جهة اتصال schemainput الخاصة بك،:category، المجموعة: MyProject.Category .جميع المدخلات النهائية "المجموعات" doinputs :groups، as: :check_boxes، المجموعة: نهاية MyProject.Group.all نهاية
يوضح المثال التالي كيفية تعديل صفحة العرض.
defmodule MyProject.ExAdmin.Question القيام به استخدم ExAdmin.Register Register_resource MyProject.Question domenu Priority: 3show question do attributes_table # عرض السمات الافتراضية # إنشاء لوحة لسرد لوحة اختيارات السؤال "Choices" dotable_for(question.choices) do column :key column :nameend endend نهاية
يتم دعم أنواع الحقول المخصصة في منطقتين، حقول العرض، وعناصر التحكم في الإدخال.
استخدم بروتوكول ExAdmin.Render.to_string/
لعرض الأنواع غير المدعومة بواسطة ExAdmin.
على سبيل المثال، لدعم تقديم صف، أضف الملف التالي إلى مشروعك:
# lib/render.exdefimpl ExAdmin.Render، لـ: Tuple do قم بتعريف to_string(tuple)، قم بما يلي: فحص(tuple)end
استخدم عنصر التكوين :field_type_matching
لتعيين نوع الإدخال.
على سبيل المثال، في ضوء المشروع التالي:
defmodule ElixirLangMoscow.SpeakerSlug do استخدم EctoAutoslugField.Slug، من: [:name، :company]، إلى: :slugenddefmodule ElixirLangMoscow.Speaker do استخدم ElixirLangMoscow.Web، :model استخدم Arc.Ecto.Model الاسم المستعار ElixirLangMoscow.SpeakerSlug مخطط "مكبرات الصوت" dofield :slug،SpeakerSlug.Typefield :avatar، ElixirLangMoscow.Avatar.Type نهاية
أضف ما يلي إلى تكوين مشروعك:
التكوين: ex_admin، #... field_type_matching: %{ElixirLangMoscow.SpeakerSlug.Type => :string,ElixirLangMoscow.Avatar.Type => :ملف }
يدعم ExAdmin موضوعين. يتم تمكين سمة AdminLte2 الجديدة بشكل افتراضي. يتم أيضًا دعم سمة ActiveAdmin القديمة لأولئك الذين يريدون التوافق مع الإصدارات السابقة.
لتغيير السمة إلى ActiveAdmin، قم بما يلي في ملف config/config.exs
الخاص بك:
التكوين/config.exs
التكوين: ex_admin، الموضوع: ExAdmin.Theme.ActiveAdmin، ...
يحتوي موضوع AdminLte2 على عدد من ألوان البشرة المختلفة بما في ذلك الأزرق والأسود والأرجواني والأخضر والأحمر والأصفر والأزرق الفاتح والأسود والأرجواني الفاتح والأخضر الفاتح والأحمر الفاتح والأصفر الفاتح
لتغيير لون البشرة إلى اللون الأرجواني مثلاً:
التكوين/config.exs
التكوين: ex_admin، لون_البشرة: :بنفسجي, ...
يمكنك إضافة محدد السمات في الجزء العلوي الأيمن من شريط القائمة عن طريق إضافة ما يلي إلى ملف config/config.exs
الخاص بك:
التكوين/config.exs
التكوين: ex_admin، theme_selector: [{"AdminLte"، ExAdmin.Theme.AdminLte2}، {"ActiveAdmin"، ExAdmin.Theme.ActiveAdmin} ]، ...
يمكنك تجاوز اسم النموذج عن طريق تحديد وظيفة model_name/0
في الوحدة النمطية. يعد هذا مفيدًا إذا كنت تريد استخدام وحدة نمطية مختلفة لبعض إجراءاتك.
admin/my_model.ex
def model_name do نهاية "custom_name".
يترك ExAdmin مهمة المصادقة لحزم الطرف الثالث. للحصول على مثال لاستخدام التماسك، راجع مشروع الاتصال التجريبي.
تفضل بزيارة Wiki لمزيد من المعلومات حول إضافة المصادقة.
نحن نقدر أي مساهمة في ExAdmin. راجع دليلي CODE_OF_CONDUCT.md وCONTRIBUTING.md لمزيد من المعلومات. نحتفظ عادةً بقائمة من الميزات والأخطاء في أداة تعقب المشكلات.
مثال تفصيلي للعرض ExAdmin
للحصول على برنامج تعليمي موجز، يرجى زيارة البرنامج التعليمي لمسح Elixir
العرض المباشر
المستندات
ex_admin
هو حقوق الطبع والنشر (ج) 2015-2016 E-MetroTel
يتم إصدار الكود المصدري بموجب ترخيص MIT.
تحقق من الترخيص لمزيد من المعلومات.