سعید
4 سال پیش توسط سعید مطرح شد
12 پاسخ

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

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

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

"cviebrock/eloquent-sluggable"

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

وبسایت راکت

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

وبسایت-راکت

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

🤚🤚🤚


ثبت پرسش جدید
meisam moradian
تخصص : برنامه نویس و توسعه دهنده
@meisammoradian8 4 سال پیش مطرح شد
1

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

تنظیم کن


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

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


coarad supp
تخصص : برنامه نویس لاراول
@coaradsupp 4 سال پیش مطرح شد
0

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


سعید
تخصص : برنامه نویس وب
@Saeeed 4 سال پیش مطرح شد
0

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


سعید
تخصص : برنامه نویس وب
@Saeeed 4 سال پیش مطرح شد
0

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


coarad supp
تخصص : برنامه نویس لاراول
@coaradsupp 4 سال پیش مطرح شد
0

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

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

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


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

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

https://parsclick.net/course/PL3Y-E4YSE4wYWg9eXKMT9y0bJKbhOWT0B?nextPage=CDIQAA&v=y-Yo9P__au0
https://parsclick.net/course/PL3Y-E4YSE4wYWg9eXKMT9y0bJKbhOWT0B?nextPage=CDIQAA&v=9y3CXAsB8wo

حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
1

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


سعید
تخصص : برنامه نویس وب
@Saeeed 4 سال پیش مطرح شد
0

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


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش آپدیت شد
0

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


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 4 سال پیش آپدیت شد
0

@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' => '-',

افشین داداش نژاد
تخصص : لاراول(Laravel)
@afshin.dadashnezhad 2 سال پیش مطرح شد
0

دوستانی که از لاراول ۸ به بالا استفاده میکنند و هنگام استفاده از فارسی ساز 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' ],

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


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

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