دسته‌بندی مدل‌های الکوئنت در فریم‌ورک لاراول

دسته‌بندی مدل‌های الکوئنت در فریم‌ورک لاراول با پکیج Laravel Categorizable
دسته‌بندی مدل‌های الکوئنت در فریم‌ورک لاراول با پکیج Laravel Categorizable


در اکثر اپلیکیشن های تحت وب دسته‌بندی ها (Categories) نقش مهمی ایفا می‌کنند. در یک بلاگ ساده، یک فروشگاه اینترنتی، یک سیستم آموزشی و حتی سامانه‌های شخصی سازی شده و غیره مفهوم دسته بندی همیشه حظور دارد; مثلا در یک بلاگ، پست‌ها می‌توانند در دسته بندی‌ های خاص خود باشند و همین طور محصولات یک فروشگاه، مقالات آموزشی یک موسسه و ...

من پس از بارها پیاده سازی فیچِر دسته بندی‌ها در پروژه های مختلف، به این نتیجه رسیدم که سورس کد این فیچر را به یک پکیج لاراولی تبدیل کنم. در نتیجه پکیجی‌ را به نام Laravel Categorizable منتشر کردم.

این پکیج با بهره گیری از روابط چندریختی (Polymorphism) این امکان را به ما می‌دهد که: هر مدلی را که خواستیم دسته بندی کنیم. به عبارت دیگر در یک اپلیکیشن لاراولی می‌توانیم پست‌ها، محصولات، ویدیو‌ها و هر تعداد مدل دیگر که نیاز داریم را براحتی دسته بندی‌ کنیم. با این پکیج همچنین ساخت، به روزرسانی و حذف دسته بندی‌ها به راحتی قابل انجام است. در این نوشته به شرح موارد زیر می‌پردازیم:


  • پیش نیاز‌
  • نصب پکیج
  • ساخت و مدیریت دسته بندی ها
  • روش استفاده از پکیج (آماده سازی مدل)
  • بررسی متدهایی که پکیج در اختیار ما می‌گذارد
  • نتیجه گیری



پیش نیاز‌

  • نسخه PHP ۷.۲ و یا بالاتر
  • نسخه Laravel ۵.۸ و یا بالاتر (کاملا سازگار با لاراول ۶)



نصب پکیج

ابتدا به فولدر اصلی پروژه لاراولی رفته و دستورات زیر را در کامند لاین اجرا کنید.

نصب پکیج با کامپوزر:

نصب پکیج با کامپوزر
نصب پکیج با کامپوزر

انتشار و اجرای مایگریشن:

انتشار و اجرای مایگریشن
انتشار و اجرای مایگریشن



ساخت و مدیریت دسته بندی ها

پیش از آنکه به شرح چگونگی عملکرد پکیج بپردازیم.. ابتدا به چند دسته بندی اولیه جهت تست نیاز داریم. پکیح Laravel Categorizable برای مدیریت کامل دسته بندی های ساده و تو در تو،‌ خود از پکیج دیگری به نام laravel-nestedset استفاده می‌کند. در زیر طریقه افزودن دسته بندی والد و فرزند و حدف دسته بندی‌ ها مرور شده است، اما این تمام کارآیی های این پکیج نیست و برای مستندات کامل آن می‌توانید به ریپازیتوری گیت‌هاب این پکیج مراجعه کنید.

طریقه مدیریت دسته بندی ها
طریقه مدیریت دسته بندی ها



روش استفاده از پکیج (آماده سازی مدل)

برای آماده سازی مدل، فقط باید از تِرِیت پکیج داخل مدل مورد نظر استفاده کنید:

آماده سازی مدل برای استفاده از Laravel Categorizable
آماده سازی مدل برای استفاده از Laravel Categorizable

به همین سادگی ما قابلیت دسته‌بندی شدن رو به مدلPostاضافه کردیم. با این کار یک سری متد ها که مربوط به این فیچر هستند به مدل ما اضافه میشه; در بخش بعد به معرفی این متد ها می‌پردازیم.


بررسی متدهایی که پکیج در اختیار ما می‌گذارد

برای نمایش دادن متد‌ها، ابتدا چند متغیر را مقداردهی می‌کنیم:

مقداردهی متغیرها
مقداردهی متغیرها

در کد بالا ما موارد زیر را انجام دادیم:

  1. مدل های Post و Category را مورد استفاده قرار می‌دهیم
  2. یک پست ثبت شده در سیستم را مقدار دهی می‌کنیم ( از طریق الکوينت، کوئری‌بیلدر و یا Route Model Binding فرقی ندارد )
  3. به ۳ روش مختلف دسته‌بندی هایی که ساختیم را در متغیرها مقدار دهی می‌کنیم


حال که متغیرها مقدار دهی شده‌اند... برای:


افزودن پست به یک دسته بندی:

افزودن پست به یک دسته بندی
افزودن پست به یک دسته بندی

حذف پست از یک دسته‌بندی:

حذف پست از یک دسته‌بندی
حذف پست از یک دسته‌بندی

افزودن پست به چند دسته‌بندی:

افزودن پست به چند دسته‌بندی
افزودن پست به چند دسته‌بندی

حذف پست از تمام دسته‌بندی ها:

حذف پست از تمام دسته‌بندی ها
حذف پست از تمام دسته‌بندی ها

هم‌گام سازی دسته‌‌بندی های پست:

هم‌گام سازی دسته‌‌بندی های پست
هم‌گام سازی دسته‌‌بندی های پست

بررسی پیوست پست به دسته‌بندی ها:

بررسی پیوست پست به دسته‌بندی ها
بررسی پیوست پست به دسته‌بندی ها

لیست دسته‌بندی های پیوست شده به یک پست:

لیست دسته‌بندی های پیوست شده به یک پست
لیست دسته‌بندی های پیوست شده به یک پست

این لیست به صورت آرایه‌ای بازگشت داده می‌شود که کلیدهای آن فیلد id دسته بندی و مقادیر آن فیلد name دسته بندی‌ هاست.

لیست پست‌های پیوست شده به یک دسته‌بندی:

لیست پست‌های پیوست شده به یک دسته‌بندی
لیست پست‌های پیوست شده به یک دسته‌بندی

رابطه چند به چند categories:

رابطه چند به چند categories
رابطه چند به چند categories


نتیجه گیری

این پکیج به گونه ای طراحی شده تا بتونه با مدل‌های الکوئنت در تعامل باشه و هر جا که به دسته بندی ها نیاز بود براحتی قابل پیاده‌سازیه. سورس این پروژه روی گیت‌هاب موجود هست.

https://github.com/AliBayat/Laravel-Categorizable

و در پایان: چنانچه در اپلیکیشن لاراولی خود نیاز به دسته بندی دارید...نیازی به اختراع مجدد چرخ نیست. به راحتی پکیج را نصب و از آن استفاده کنید.