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

3 هفته پیش توسط علی بیات آپدیت شد
آفلاین
user-avatar
علی بیات ( 449169 تجربه )
2 سال پیش
تخصص : توسعه دهنده ارشد وب

لینک کوتاه اشتراک گذاری

20

درود دوستان

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

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


نصب پکیج

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

composer require alibayat/laravel-categorizable

سپس پابلیش کردن و اجرای مایگریشن:

php artisan vendor:publish --provider="AliBayat\LaravelCategorizable\CategorizableServiceProvider"
php artisan migrate

آماده سازی مدل

تنها کافیست از تریت پکیح در مدل مورد نظر استفاده کنیم:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use AliBayat\LaravelCategorizable\Categorizable;

class Post extends Model
{
    use Categorizable;

}

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


مدیریت دسته‌بندی‌ ها

برای نمایش متدها، نیاز به ساخت چند دسته‌بندی داریم. در زیر نحوه ساخت و حذف دسته‌بندی ها را به علاوه ساخت دسته‌بندی ها به حالت والد و فرزند (دسته‌بندی های تو در تو (Nested)) مرور می‌کنیم:

<?php

use AliBayat\LaravelCategorizable\Category;

// create "BackEnd" category
Category::create([
    'name' => 'BackEnd'
]);

// create "PHP" category
Category::create([
    'name' => 'PHP'
]);

// create "FrontEnd" category
Category::create([
    'name' => 'FrontEnd'
]);

// create "Test" Category (alternative way)
$test = new Category();
$test->name = 'Test';
$test->save();

// assign "PHP" as a child of "BackEnd" category
$parent = Category::findByName('BackEnd');
$child = Category::findByName('PHP');
$parent->appendNode($child);

// delete "Test" Category
$testObj = Category::findByName('Test');
$testObj->delete();

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

حال که دسته‌بندی ها را ساختیم، چند متغیر را مقداردهی میکنیم و سپس عملکرد متد ها را بررسی می‌کنیم:

<?php

use App\Post;
use AliBayat\LaravelCategorizable\Category;

$post = Post::first();

// ۳ different ways of getting a category's instance
$backendCategory = Category::findById(۱);   // 'BackEnd'
$phpCategory = Category::findByName('PHP'); // 'PHP'
$frontendCategory = Category::find(۳);      // 'FrontEnd'

حال برای...

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

    $post->attachCategory($phpCategory);

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

    $post->detachCategory($phpCategory);

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

    $post->syncCategories([
        $phpCategory,
        $backendCategory
        ]); 

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

    $post->syncCategories([]); 

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

    $post->hasCategory($phpCategory);

    $post->hasCategory([
        $phpCategory,
        $backendCategory
        ]);

    // return boolean

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

    $post->categoriesList();

    // return array [id => name]

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

    $categoryPosts = Category::find(۱)
        ->entries(Post::class)
        ->get();

    // return collection

مستندات پکیج در ریپازیتوری گیت‌هاب موجود است:
https://github.com/AliBayat/Laravel-Categorizable

در صورت پیدا کردن هر گونه باگ می‌تونید در قسمت Issues گیت و یا در این گفتگو اون رو عنوان کنید.

آفلاین
user-avatar
علی بیات ( 449169 تجربه )
4 هفته پیش
تخصص : توسعه دهنده ارشد وب

لینک کوتاه اشتراک گذاری

0

@MAJIDKALI
بله در حال حاظر اسلاگ ها اتومات ساخته میشند.. در نسخه بعد پکیج یه سری متدها براش در نظر گرفتم

اما پکیج spatie/laravel-sluggable قابل سفارشی سازی هست
اگر متد generateSlugsFrom رو بررسی کنی، این متد قابلیت پاس دادن کال بک هم داره
و بدون تغییر در سورس کد پکیج میشه این متد رو داخل مدل قرار داد و هر جور که دوست داری اسلاگ رو بسازی

آفلاین
user-avatar
مجید ( 11695 تجربه )
4 هفته پیش
تخصص : برنامه نویس php , laravel,javascript

لینک کوتاه اشتراک گذاری

0

@ali.bayat
بله من تغییر توی متد یا فیلد رو نمی خواهم ایجاد کنم فقط می خواهم اسلاگ ایجاد شده به صورت فارسی ایجاد بشه
در حالی که حالا به صورت زیر هست
توضیح تصویر رو وارد کنید

آفلاین
user-avatar
علی بیات ( 449169 تجربه )
3 هفته پیش
تخصص : توسعه دهنده ارشد وب

لینک کوتاه اشتراک گذاری

0

@MAJIDKALI

درود

اولین نسخه stable پکیج منتشر شد و مشکل ساخت اسلاگ های فارسی هم درش رفع شده
کافیه نسخه پکیج رو به روز کنید:

composer update alibayat/laravel-categorizable
آفلاین
user-avatar
کیان صادقی ( 36853 تجربه )
3 هفته پیش
تخصص : کار‌آموز برنامه نویسی بک اند

لینک کوتاه اشتراک گذاری

0

درود به آقای بیات
همین الان نصب کردم و دارم استفاده میکنم این پکیج واقعا لازم میشه توی همه پروژه ها

آفلاین
user-avatar
علی بیات ( 449169 تجربه )
3 هفته پیش
تخصص : توسعه دهنده ارشد وب

لینک کوتاه اشتراک گذاری

0

@kian.sdi.0028

درود بر شما
امیدوارم مفید واقع بشه

برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.