آفلاین
user-avatar

فارسی سازی اسلاگ در لاراول 5.5

5 ماه پیش
توسط reza kamali آپدیت شد
آفلاین
user-avatar
none ( 1001 تجربه )
3 سال پیش

سلام -
دوستانی که با لاراول 5.5 کار کردن میدونن که استراکچر پکیج elequent-sluggable عوض شده
سوالی که من داشتم اینکه چطور بخش فارسی رو بهش اضافه کنم — الان من از قسمت vendor/cviebtock/elequent-sluggable/reaource/config/sluggable.php بخش methode رو عوض کردم ولی باز اسلاگ فارسی نشد — منون میشم اگه کمک کنید

بهترین پاسخ انتخاب شده توسط none
آفلاین
user-avatar
حسام موسوی
3 سال پیش

من الان دارم از این پکیج در لاراول ۵.۵ بدونه مشکل استفاده میکنم
بعد از نصب این پکیج و اضافه کردن provider به app.php باید دستور زیر رو وارد کنید

php artisan vendor:publish

با وارد کردن این دستور یک فایل config به فولدر config روت اصلی اضافه میشه
که اونو باز میکنید و قطعه کد پایین رو دقیقا در دقیقا در بخش method میزارید البته من کد کامل فایل config رو در پایین قرار میدم

<?php

return [

    /**
     * What attributes do we use to build the slug?
     * This can be a single field, like "name" which will build a slug from:
     *
     *     $model->name;
     *
     * Or it can be an array of fields, like ("name", "company"), which builds a slug from:
     *
     *     $model->name . ' ' . $model->company;
     *
     * If you've defined custom getters in your model, you can use those too,
     * since Eloquent will call them when you request a custom attribute.
     *
     * Defaults to null, which uses the toString() method on your model.
     */

    'source' => null,

    /**
     * The maximum length of a generated slug.  Defaults to "null", which means
     * no length restrictions are enforced.  Set it to a positive integer if you
     * want to make sure your slugs aren't too long.
     */

    'maxLength' => null,

    /**
     * If left to "null", then use the cocur/slugify package to generate the slug
     * (with the separator defined below).
     *
     * Set this to a closure that accepts two parameters (string and separator)
     * to define a custom slugger.  e.g.:
     *
     *    'method' => function( $string, $sep ) {
     *       return preg_replace('/[^a-z]+/i', $sep, $string);
     *    },
     *
     * Otherwise, this will be treated as a callable to be used.  e.g.:
     *
     *    'method' => array('Str','slug'),
     */

    '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 to use when generating slugs.  Defaults to a hyphen.
     */

    'separator' => '-',

    /**
     * Enforce uniqueness of slugs?  Defaults to true.
     * If a generated slug already exists, an incremental numeric
     * value will be appended to the end until a unique slug is found.  e.g.:
     *
     *     my-slug
     *     my-slug-1
     *     my-slug-2
     */

    'unique' => true,

    /**
     * If you are enforcing unique slugs, the default is to add an
     * incremental value to the end of the base slug.  Alternatively, you
     * can change this value to a closure that accepts three parameters:
     * the base slug, the separator, and a Collection of the other
     * "similar" slugs.  The closure should return the new unique
     * suffix to append to the slug.
     */

    'uniqueSuffix' => null,

    /**
     * Should we include the trashed items when generating a unique slug?
     * This only applies if the softDelete property is set for the Eloquent model.
     * If set to "false", then a new slug could duplicate one that exists on a trashed model.
     * If set to "true", then uniqueness is enforced across trashed and existing models.
     */

    'includeTrashed' => false,

    /**
     * An array of slug names that can never be used for this model,
     * e.g. to prevent collisions with existing routes or controller methods, etc..
     * Defaults to null (i.e. no reserved names).
     * Can be a static array, e.g.:
     *
     *    'reserved' => array('add', 'delete'),
     *
     * or a closure that returns an array of reserved names.
     * If using a closure, it will accept one parameter: the model itself, and should
     * return an array of reserved names, or null. e.g.
     *
     *    'reserved' => function( Model $model) {
     *      return $model->some_method_that_returns_an_array();
     *    }
     *
     * In the case of a slug that gets generated with one of these reserved names,
     * we will do:
     *
     *    $slug .= $separator + "1"
     *
     * and continue from there.
     */

    'reserved' => null,

    /**
     * Whether to update the slug value when a model is being
     * re-saved (i.e. already exists).  Defaults to false, which
     * means slugs are not updated.
     *
     * Be careful! If you are using slugs to generate URLs, then
     * updating your slug automatically might change your URLs which
     * is probably not a good idea from an SEO point of view.
     * Only set this to true if you understand the possible consequences.
     */

    'onUpdate' => true,

];
آفلاین
user-avatar
حسام موسوی ( 413236 تجربه )
3 سال پیش
تخصص : طراح و برنامه نویس

من الان دارم از این پکیج در لاراول ۵.۵ بدونه مشکل استفاده میکنم
بعد از نصب این پکیج و اضافه کردن provider به app.php باید دستور زیر رو وارد کنید

php artisan vendor:publish

با وارد کردن این دستور یک فایل config به فولدر config روت اصلی اضافه میشه
که اونو باز میکنید و قطعه کد پایین رو دقیقا در دقیقا در بخش method میزارید البته من کد کامل فایل config رو در پایین قرار میدم

<?php

return [

    /**
     * What attributes do we use to build the slug?
     * This can be a single field, like "name" which will build a slug from:
     *
     *     $model->name;
     *
     * Or it can be an array of fields, like ("name", "company"), which builds a slug from:
     *
     *     $model->name . ' ' . $model->company;
     *
     * If you've defined custom getters in your model, you can use those too,
     * since Eloquent will call them when you request a custom attribute.
     *
     * Defaults to null, which uses the toString() method on your model.
     */

    'source' => null,

    /**
     * The maximum length of a generated slug.  Defaults to "null", which means
     * no length restrictions are enforced.  Set it to a positive integer if you
     * want to make sure your slugs aren't too long.
     */

    'maxLength' => null,

    /**
     * If left to "null", then use the cocur/slugify package to generate the slug
     * (with the separator defined below).
     *
     * Set this to a closure that accepts two parameters (string and separator)
     * to define a custom slugger.  e.g.:
     *
     *    'method' => function( $string, $sep ) {
     *       return preg_replace('/[^a-z]+/i', $sep, $string);
     *    },
     *
     * Otherwise, this will be treated as a callable to be used.  e.g.:
     *
     *    'method' => array('Str','slug'),
     */

    '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 to use when generating slugs.  Defaults to a hyphen.
     */

    'separator' => '-',

    /**
     * Enforce uniqueness of slugs?  Defaults to true.
     * If a generated slug already exists, an incremental numeric
     * value will be appended to the end until a unique slug is found.  e.g.:
     *
     *     my-slug
     *     my-slug-1
     *     my-slug-2
     */

    'unique' => true,

    /**
     * If you are enforcing unique slugs, the default is to add an
     * incremental value to the end of the base slug.  Alternatively, you
     * can change this value to a closure that accepts three parameters:
     * the base slug, the separator, and a Collection of the other
     * "similar" slugs.  The closure should return the new unique
     * suffix to append to the slug.
     */

    'uniqueSuffix' => null,

    /**
     * Should we include the trashed items when generating a unique slug?
     * This only applies if the softDelete property is set for the Eloquent model.
     * If set to "false", then a new slug could duplicate one that exists on a trashed model.
     * If set to "true", then uniqueness is enforced across trashed and existing models.
     */

    'includeTrashed' => false,

    /**
     * An array of slug names that can never be used for this model,
     * e.g. to prevent collisions with existing routes or controller methods, etc..
     * Defaults to null (i.e. no reserved names).
     * Can be a static array, e.g.:
     *
     *    'reserved' => array('add', 'delete'),
     *
     * or a closure that returns an array of reserved names.
     * If using a closure, it will accept one parameter: the model itself, and should
     * return an array of reserved names, or null. e.g.
     *
     *    'reserved' => function( Model $model) {
     *      return $model->some_method_that_returns_an_array();
     *    }
     *
     * In the case of a slug that gets generated with one of these reserved names,
     * we will do:
     *
     *    $slug .= $separator + "1"
     *
     * and continue from there.
     */

    'reserved' => null,

    /**
     * Whether to update the slug value when a model is being
     * re-saved (i.e. already exists).  Defaults to false, which
     * means slugs are not updated.
     *
     * Be careful! If you are using slugs to generate URLs, then
     * updating your slug automatically might change your URLs which
     * is probably not a good idea from an SEO point of view.
     * Only set this to true if you understand the possible consequences.
     */

    'onUpdate' => true,

];
آفلاین
user-avatar
محسن صادقی ( 5235 تجربه )
3 سال پیش
تخصص : برنامه نویس

سلام من سایت رو فرستادم روی سرور
توی لوکال slug ها توی مدیریت ساخته میشن و توی دیتا بیس میشینن
ولی توی سرور که بارگزاری کردم توی بخش ادمین slug ها ساخته نمیشن حروف الفبا چه فارسی چه انگلیسی ساخته نمیشن و فقط در صورت دو عنوان مشابه عدد اضافه میشه . سرور centos 7 با دایرکت ادمین
ممنون میشم راهنمایی کنید

آفلاین
user-avatar
حسام موسوی ( 413236 تجربه )
3 سال پیش
تخصص : طراح و برنامه نویس

این مورد چیزی هم نیست که بخوایم بگیم تنظیم خاصی باید فعال باشه تا این مورد کار کنه
اگر در لاراول کار میکنه و در هاست کار نمیکنه حتما مشکل از قستمی از سرور شماست
که اینطوری نمیشه فهمید داستان چیه
بر روی یک سرور دیگه کدهای خودتون رو تست کنید لطفا

آفلاین
user-avatar
مهدی ( 16058 تجربه )
9 ماه پیش
تخصص : برنامه نویس و طراح وب

@hesammousavi با سلام
آیا در لاراول 7 و آخرین نسخه این پکیج تنظیماتی که گفتید قابل اعمال هست؟ و یک سوال دیگر این تنظیماتی که شما دادید از روی عنوان (title) یا هر فیلد دیگه ای فارسی اسلاگ انگلیسی میسازه دیگه؟

آفلاین
user-avatar
حسام موسوی ( 413236 تجربه )
9 ماه پیش
تخصص : طراح و برنامه نویس

@mrmmg
سلام بله مشکلی نداره
البته این مربوط به پکیج sluggable میشه و این تنظمیات هم مربوط به همونه

آفلاین
user-avatar
مهدی ( 16058 تجربه )
9 ماه پیش
تخصص : برنامه نویس و طراح وب

@hesammousavi
تشکر میکنم از شما، من از این پکیج با تنظیماتی که شما فرستادید انجام دادم و کار هم کرد منتهی چیزی که مد نظر من بود میخواستم اگه title یا هرچیز دیگری وارد شد معادل انگلیسی آن به عنوان slug ذخیره بشه، مثلا:
title => وبسایت
slug => website
آیا چنین کاری امکان پذیره؟ اگر هست لطفا مرا راهنمایی کنید که چطوری اینکار امکان پذیره؟

آفلاین
user-avatar
حسام موسوی ( 413236 تجربه )
9 ماه پیش
تخصص : طراح و برنامه نویس

@mrmmg
مترجم که نیست، این فقط میاد به شکل slug تبدیل میکنه یک متن رو

آفلاین
user-avatar
coarad supp ( 25370 تجربه )
9 ماه پیش
تخصص : برنامه نویس لاراول

@mrmmg

سلام؛ یه سری من تست کردم به همین شکلی که میخواین انجام داد، ولی نه دقیق، به درستی تبدیل نمیکرد، توی همین فیال کانفیگ متد رو خالی بذارین، خودش تبدیل رو انجام میده، تست کنید ببینید به چه شکل هست

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

دوستان شما وقتی بخوایید دستور php artisan config:cache رو بزنید خب بهتون خطای کلوژر میده خب. چرا متد رو بصورت مستقیم استفاده کردید تو فایل کانفیگ!؟؟؟

 LogicException

  Your configuration files are not serializable.

  at C:\Users\Shaparak\Desktop\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Console\ConfigCacheCommand.php:71
    67|             require $configPath;
    68|         } catch (Throwable $e) {
    69|             $this->files->delete($configPath);
    70|
  > 71|             throw new LogicException('Your configuration files are not serializable.', 0, $e);
    72|         }
    73|
    74|         $this->info('Configuration cached successfully!');
    75|     }
آفلاین
user-avatar
reza kamali ( 410 تجربه )
5 ماه پیش
تخصص : PHP &amp; WordPress

برای حل مشکل فارسی سازی اسلاگ میشه یک helper دلخواه نوشت
ابتدا پوشه ی Helper رو در app ایجاد و در ان پوشه ی ایجاد فایل help.php
نوشنن متد مورد نظر در ان سپس معرفی فایل help به composer.json
سپس در cmd دستور composer dump-autoload

برای ارسال پاسخ باید وارد سایت شوید