راکت

slug صحیح در لاراول

12 پاسخ

@hesammousavi @ali.bayat @TimeRunner2359 @hosseinshirinegad98 و سایر دوستان ..

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

"cviebrock/eloquent-sluggable"

و برای اینکه از زبان فارسی پشتیبانی کنه ، الگویی که آقای موسوی داده بودند رو داخل فایل کانفیگ گذاشتم. و منبع تولید اسلاگ هم title قرار دادم.
الان وقتی اسلاگ رو میسازه ، اصلا بین کلمات خط تیره ( - ) قرار نمیده و فاصله بین اون ها رو تغییر نمیده مثلا:
عنوان ( وبسایت راکت ) رو به این صورت ذخیره میکنه:

وبسایت راکت

در صورتی که باید اینجور قرار بگیره :

وبسایت-راکت

و همین باعث میشه در url بجای فاصله ها درصد ( % ) قرار بگیره.
ممنون میشم دوستان راهنمایی کنن

🤚🤚🤚

ثبت پرسش جدید

پاسخ‌ها

12
meisam moradian
meisam moradian
@meisammoradian8

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

سلام
توی دایرکتوری config فایل sluggalble رو باز کن
'separator' => '-'

تنظیم کن

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

سلام روز بخیر
متاسفانه من تابحال از این پکیج استفاده نکردم اما مستنداتشو که دیدم خوب و آسون توضیح داده بیشتر مطالعش کن. ضمن اینکه آقای meisam moradian هم اشاره ای به سوال شما کردن انشالله که رفع مشکل بشه. پیروز باشید

شاید پاسخ شما همین‌جا باشد

coarad supp
coarad supp
@coaradsupp

تخصص: برنامه نویس لاراول

سلام
اگه این موارد رو تست کردین و نشد یه بار سرورتون رو ریستارت کنید و کش و کانفیگتونم پاک کنید احتمالا درست بشه

سعید
سعید
@Saeeed

تخصص: برنامه نویس وب

@coaradsupp @hosseinshirinegad98
سلام خیلی ممنون ، این موارد رو انجام دادم ولی درست نشد.!

سعید
سعید
@Saeeed

تخصص: برنامه نویس وب

@hosseinshirinegad98
شما از چه روشی استفاده میکنید؟

coarad supp
coarad supp
@coaradsupp

تخصص: برنامه نویس لاراول

سلام، من از این تابع استفاده میکنم و درست کار میکنه

function str_to_slug(string $string, string $separator = '-')
    {
        $string = fa_to_en(trim(mb_strtolower($string)));
        $string = preg_replace('![' . preg_quote($separator === '-' ? '_' : '-') . ']+!u', $separator, $string);

        return preg_replace(
            '/\\' . $separator . '{2,}/',
            $separator,
            preg_replace('/[^A-Za-z0-9\x{0620}-\x{064A}\x{0698}\x{067E}\x{0686}\x{06AF}\x{06CC}\x{06A9}]/ui', $separator, $string)
        );
    }

تست کنید
چون این پکیج کار کردن باش سخت نیس اگه همه چی درست باشه خطا نداره

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

من بجای slug از id استفاده کردم اینطوری سرعت اجرا بالاتره.
دوتا لینک بهتون میدم آموزش ساخته اسلاگ هست دو ویدیو به زبان فارسی.
برای دیدن ویدیوها از تحریم شکن باید استفاده کنی.

https://parsclick.net/course/PL3Y-E4YSE4wYWg9eXKMT9y0bJKbhOWT0B?nextPage=CDIQAA&v=y-Yo9P__au0
https://parsclick.net/course/PL3Y-E4YSE4wYWg9eXKMT9y0bJKbhOWT0B?nextPage=CDIQAA&v=9y3CXAsB8wo
حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

یا خیلی ساده از تا str_replace استفاده کنید

سعید
سعید
@Saeeed

تخصص: برنامه نویس وب

@hosseinshirinegad98
فکر میکنم بهترین روش همین str_repalce هست
چون پکیج هم کار خاصی انجام نمیده دیگه؟

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

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

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

@Saeeed

بنده مدت زیادی هست از همین پکیج cviebrock/eloquent-sluggable برای متن های فارسی و انگلیسی استفاده میکنم و بدون کوچکترین مشکلی کار می‌کنه.

فقط توجه داشته باشید که همون طوری که در قسمت Installation پکیج (اینجا) هم تاکید کرده باید نسخه پکیجی که استفاده میکنید با نسخه لاراولتون سازگار باشه. در غیر اینصورت با نتایج عجیب و غریبی مثل همین مشکلی که دارید مواجه میشید.

توضیح تصویر رو وارد کنید

در فایل تنظیمات یعنی config/sluggable.php هم دو تا بخش زیر رو جایگزین هر چیزی که از قبل دارید بکنید و مجدد تست کنید:

'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);
    },

و این یکی:

'separator' => '-',
افشین داداش نژاد
افشین داداش نژاد
@afshin.dadashnezhad

تخصص: لاراول(Laravel)

دوستانی که از لاراول ۸ به بالا استفاده میکنند و هنگام استفاده از فارسی ساز slug در فایل config/slugable.php به مشکل میخورند
یعنی بعد اظافه کردن هنگام استفاده از دستور php artisan optimize با ارور رو به رو میشن میتونن به روش زیر عمل کنن
۱- کلاسی با اسم دلخواه به عنوان مثال :‌HelperClass بسازید
۲- متد خودتون رو بصورت public static توش قرار بدین : به صورت زیر

class HelperClass
{
    public static function sluggableCustomSlugMethod($string, $separator = '-')
    {
        $_transliteration = array(
            '/ä|æ|ǽ/' => 'ae',
            '/ö|œ/' => 'oe',
            '/ü/' => 'ue',
            '/Ä/' => 'Ae',
            '/Ü/' => 'Ue',
            '/Ö/' => 'Oe',
            '/À|Á|Â|Ã|Å|Ǻ|Ā|Ă|Ą|Ǎ/' => 'A',
            '/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/' => 'a',
            '/Ç|Ć|Ĉ|Ċ|Č/' => 'C',
            '/ç|ć|ĉ|ċ|č/' => 'c',
            '/Ð|Ď|Đ/' => 'D',
            '/ð|ď|đ/' => 'd',
            '/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/' => 'E',
            '/è|é|ê|ë|ē|ĕ|ė|ę|ě/' => 'e',
            '/Ĝ|Ğ|Ġ|Ģ/' => 'G',
            '/ĝ|ğ|ġ|ģ/' => 'g',
            '/Ĥ|Ħ/' => 'H',
            '/ĥ|ħ/' => 'h',
            '/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ/' => 'I',
            '/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/' => 'i',
            '/Ĵ/' => 'J',
            '/ĵ/' => 'j',
            '/Ķ/' => 'K',
            '/ķ/' => 'k',
            '/Ĺ|Ļ|Ľ|Ŀ|Ł/' => 'L',
            '/ĺ|ļ|ľ|ŀ|ł/' => 'l',
            '/Ñ|Ń|Ņ|Ň/' => 'N',
            '/ñ|ń|ņ|ň|ʼn/' => 'n',
            '/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/' => 'O',
            '/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/' => 'o',
            '/Ŕ|Ŗ|Ř/' => 'R',
            '/ŕ|ŗ|ř/' => 'r',
            '/Ś|Ŝ|Ş|Ș|Š/' => 'S',
            '/ś|ŝ|ş|ș|š|ſ/' => 's',
            '/Ţ|Ț|Ť|Ŧ/' => 'T',
            '/ţ|ț|ť|ŧ/' => 't',
            '/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/' => 'U',
            '/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/' => 'u',
            '/Ý|Ÿ|Ŷ/' => 'Y',
            '/ý|ÿ|ŷ/' => 'y',
            '/Ŵ/' => 'W',
            '/ŵ/' => 'w',
            '/Ź|Ż|Ž/' => 'Z',
            '/ź|ż|ž/' => 'z',
            '/Æ|Ǽ/' => 'AE',
            '/ß/' => 'ss',
            '/IJ/' => 'IJ',
            '/ij/' => 'ij',
            '/Œ/' => 'OE',
            '/ƒ/' => 'f'
        );
        $quotedReplacement = preg_quote($separator, '/');
        $merge = array(
            '/[^\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);
    }

}

سپس در فایل config/slugable.php این رو جایگزین method کنید

    'method' => [ HelperClass::class, 'sluggableCustomSlugMethod' ],

با این کار مشکل کاملا حل میشه

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام