سلام -
دوستانی که با لاراول 5.5 کار کردن میدونن که استراکچر پکیج elequent-sluggable عوض شده
سوالی که من داشتم اینکه چطور بخش فارسی رو بهش اضافه کنم — الان من از قسمت vendor/cviebtock/elequent-sluggable/reaource/config/sluggable.php بخش methode رو عوض کردم ولی باز اسلاگ فارسی نشد — منون میشم اگه کمک کنید
من الان دارم از این پکیج در لاراول ۵.۵ بدونه مشکل استفاده میکنم
بعد از نصب این پکیج و اضافه کردن 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,
];
سلام من سایت رو فرستادم روی سرور
توی لوکال slug ها توی مدیریت ساخته میشن و توی دیتا بیس میشینن
ولی توی سرور که بارگزاری کردم توی بخش ادمین slug ها ساخته نمیشن حروف الفبا چه فارسی چه انگلیسی ساخته نمیشن و فقط در صورت دو عنوان مشابه عدد اضافه میشه . سرور centos 7 با دایرکت ادمین
ممنون میشم راهنمایی کنید
این مورد چیزی هم نیست که بخوایم بگیم تنظیم خاصی باید فعال باشه تا این مورد کار کنه
اگر در لاراول کار میکنه و در هاست کار نمیکنه حتما مشکل از قستمی از سرور شماست
که اینطوری نمیشه فهمید داستان چیه
بر روی یک سرور دیگه کدهای خودتون رو تست کنید لطفا
@hesammousavi با سلام
آیا در لاراول 7 و آخرین نسخه این پکیج تنظیماتی که گفتید قابل اعمال هست؟ و یک سوال دیگر این تنظیماتی که شما دادید از روی عنوان (title) یا هر فیلد دیگه ای فارسی اسلاگ انگلیسی میسازه دیگه؟
@mrmmg
سلام بله مشکلی نداره
البته این مربوط به پکیج sluggable میشه و این تنظمیات هم مربوط به همونه
@hesammousavi
تشکر میکنم از شما، من از این پکیج با تنظیماتی که شما فرستادید انجام دادم و کار هم کرد منتهی چیزی که مد نظر من بود میخواستم اگه title یا هرچیز دیگری وارد شد معادل انگلیسی آن به عنوان slug ذخیره بشه، مثلا:
title => وبسایت
slug => website
آیا چنین کاری امکان پذیره؟ اگر هست لطفا مرا راهنمایی کنید که چطوری اینکار امکان پذیره؟
سلام؛ یه سری من تست کردم به همین شکلی که میخواین انجام داد، ولی نه دقیق، به درستی تبدیل نمیکرد، توی همین فیال کانفیگ متد رو خالی بذارین، خودش تبدیل رو انجام میده، تست کنید ببینید به چه شکل هست
دوستان شما وقتی بخوایید دستور 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| }
برای حل مشکل فارسی سازی اسلاگ میشه یک helper دلخواه نوشت
ابتدا پوشه ی Helper رو در app ایجاد و در ان پوشه ی ایجاد فایل help.php
نوشنن متد مورد نظر در ان سپس معرفی فایل help به composer.json
سپس در cmd دستور composer dump-autoload
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟