پکیج Eloquent Sluggable

گردآوری و تالیف : عرفان کاکایی
تاریخ انتشار : 27 خرداد 1397
دسته بندی ها : لاراول

با تشکر از پیکج Eloquent Sliggable ساخته شده توسط Colin Viebrock، اضافه کردن اسلاگ (Slug) به مدل‌های شما آسان‌تر شده است.

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

برای مثال، اگر می‌خواستید بر روی یک مدل از فیلد title با ستون slug استفاده کنید،‌ باید چنین کاری را انجام می‌دادید:

use Cviebrock\EloquentSluggable\Sluggable;

class Post extends Model
{
    use Sluggable;

    /**
     * پیکربندی‌های اسلاگ برای این مدل را برگردان.
     *
     * @return array
     */
    public function sluggable()
    {
        return [
            'slug' => [
                'source' => 'title'
            ]
        ];
    }
}

مثال دیگری که در توضیحات خود پکیج قرار دارد، به این صورت است:

$post = new Post([

    'title' => 'My Awesome Blog Post',

]);



$post->save();

$post->slug; // my-awesome-blog-post



$newPost = $post->replicate();

// $newPost->slug is "my-awesome-blog-post-1"

نکته خوبی که در این پکیج می‌بینم،‌ این است که اگر پست‌ها به طور تصادفی عنوان مشابهی داشته باشند،‌ آن‌ها را تغییر می‌دهد تا منحصل به فرد شوند.

در کنار این پکیج، گزینه‌های پیکربندی متفکرانه‌ای نیز وجود دارند، تا بتوانید نحوه کارکرد اسلاگ‌ها را سفارشی سازی کنید. تنظیمات پیشفرض این گزینه‌ها به صورت زیر است:

return [
    'source'             => null,
    'maxLength'          => null,
    'maxLengthKeepWords' => true,
    'method'             => null,
    'separator'          => '-',
    'unique'             => true,
    'uniqueSuffix'       => null,
    'includeTrashed'     => false,
    'reserved'           => null,
    'onUpdate'           => false,
];

با بررسی صفحه گیت هاب این پکیج می‌توانید مثال‌های بیشتری مثل کار با ویژگی‌های relationship را ببینید.

البته اگر میخواهید در پروژه های فارسی و جملات فارسی از این موضوع استفاده کنید باید تنظیماتی را برای این پکیج در فایل config آن قرار دهید . شما باید قطعه کد پایین را در فایل config و بخش method قرار دهید.

    'method' => function($string, $separator = '-') {
        $_transliteration = ["/ö|œ/" => "e",
            "/ü/" => "e",
            "/Ä/" => "e",
            "/Ü/" => "e",
            "/Ö/" => "e",
            "/À|Á|Â|Ã|Å|Ǻ|Ā|Ă|Ą|Ǎ/" => "",
            "/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/" => "",
            "/Ç|Ć|Ĉ|Ċ|Č/" => "",
            "/ç|ć|ĉ|ċ|č/" => "",
            "/Ð|Ď|Đ/" => "",
            "/ð|ď|đ/" => "",
            "/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/" => "",
            "/è|é|ê|ë|ē|ĕ|ė|ę|ě/" => "",
            "/Ĝ|Ğ|Ġ|Ģ/" => "",
            "/ĝ|ğ|ġ|ģ/" => "",
            "/Ĥ|Ħ/" => "",
            "/ĥ|ħ/" => "",
            "/Ì|Í|Î|Ï|Ĩ|Ī| Ĭ|Ǐ|Į|İ/" => "",
            "/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/" => "",
            "/Ĵ/" => "",
            "/ĵ/" => "",
            "/Ķ/" => "",
            "/ķ/" => "",
            "/Ĺ|Ļ|Ľ|Ŀ|Ł/" => "",
            "/ĺ|ļ|ľ|ŀ|ł/" => "",
            "/Ñ|Ń|Ņ|Ň/" => "",
            "/ñ|ń|ņ|ň|ʼn/" => "",
            "/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/" => "",
            "/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/" => "",
            "/Ŕ|Ŗ|Ř/" => "",
            "/ŕ|ŗ|ř/" => "",
            "/Ś|Ŝ|Ş|Ș|Š/" => "",
            "/ś|ŝ|ş|ș|š|ſ/" => "",
            "/Ţ|Ț|Ť|Ŧ/" => "",
            "/ţ|ț|ť|ŧ/" => "",
            "/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/" => "",
            "/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/" => "",
            "/Ý|Ÿ|Ŷ/" => "",
            "/ý|ÿ|ŷ/" => "",
            "/Ŵ/" => "",
            "/ŵ/" => "",
            "/Ź|Ż|Ž/" => "",
            "/ź|ż|ž/" => "",
            "/Æ|Ǽ/" => "E",
            "/ß/" => "s",
            "/IJ/" => "J",
            "/ij/" => "j",
            "/Œ/" => "E",
            "/ƒ/" => ""];
        $quotedReplacement = preg_quote($separator, '/');
        $merge = [
            '/[^\s\p{Zs}\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]/mu' => ' ',
            '/[\s\p{Zs}]+/mu' => $separator,
            sprintf('/^[%s]+|[%s]+$/', $quotedReplacement, $quotedReplacement) => '',
        ];
        $map = $_transliteration + $merge;
        unset($_transliteration);
        return preg_replace(array_keys($map), array_values($map), $string);
    },

می‌توانید این پکیج را با استفاده از دستور زیر و از طریق composer نصب کنید:

# For Laravel 5.6, use v4.5 of this package
# Check the readme for version matching
composer require cviebrock/eloquent-sluggable:^4.5

منبع

مقالات پیشنهادی

بهترین پکیج های لاراولی – سری اول

پکیج ها قابلیت عملیاتی لاراول را افزایش می‌دهند و عملکرد آنرا بهبود می‌بخشند. پکیج ها میتوانند یک راه مناسب برای کار با تاریخ در پروژه باشد مثل پکیج C...

ساخت پکیج لاراول 5 - قسمت دوم

برای قسمت دوم سری آموزش های ساخت پکیج لاراول ما سراغ توسعه و کدنویسی میریم. ما مباحث مسیریابی, کنترلرها و view ها رو مطرح می کنیم.

بهترین پکیج های Node.js – سری اول

با آمدن Node.js, جاوا اسکریپت پیشرفت خوبی داشت و راهی به سمت server-side شدن پیدا کرد و همچنین موجب کاهش پیچیدگی استفاده از دو زبان مختلف در frontend...

ساخت پکیج لاراول 5 - قسمت چهارم

برای قسمت چهارم این سری آموزش ها ما بحث migration و seeding رو در ساخت پکیج ها پوشش خواهیم داد.