Laravel и Араби c слизняки - PullRequest
       12

Laravel и Араби c слизняки

1 голос
/ 18 февраля 2020

При создании слага из имени, слаг имеет буквы Engli sh.

Пример:

name = مقالة جديدة

slug = mk-l -gdyd

Это должно быть: مقالة-جديدة

Есть идеи, как решить эту проблему? Я использую этот пакет .

Модель

class Post extends Model
{
    use HasSlug;

    protected $primarykey = 'id';

    protected $fillable = [
        'title', 'slug', 'body',
    ];

    protected $dates = [
        'created_at', 'updated_at'
    ];

    public function getSlugOptions(): SlugOptions
    {
        return SlugOptions::create()
            ->generateSlugsFrom('title')
            ->saveSlugsTo('slug');
    }
}

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Вы можете попробовать следующее

dump($stringParts = array_values(array_filter(explode(" ", 'مقالة جديدة'))));

$slug = '';
foreach ($stringParts as $key =>  $string) {
    $hyphen = ($key < sizeof($stringParts) - 1) ? '-' : '';
    $slug .= $string . $hyphen;
}

dd($slug);
// "مقالة-جديدة"

Проверить рабочую демонстрацию

1 голос
/ 18 февраля 2020

Пакет spatie / laravel -sluggable использует хелпер Laravel Str::slug() для генерации слага, который может принимать третий параметр для языка, если символ имеет различную транслитерацию в зависимости от оригинальный язык используется. Чтобы использовать это с пакетом Spat ie, добавьте usingLanguage('ar') в цепочку методов.

Чтобы установить язык, используемый Str :: slug, вы можете вызывать с помощью языка Language

public function getSlugOptions() : SlugOptions
{
    return SlugOptions::create()
        ->generateSlugsFrom('title')
        ->saveSlugsTo('slug')
        ->usingLanguage('ar');
}

Однако, обратите внимание, что вся цель этого метода состоит в том, чтобы производить «дружественные к SEO» слагы путем транслитерации в ASCII (т.е. только западный алфавит), и не будет сохранять никаких -ASCII символы .

В качестве примечания, даже Yoast SEO не уверен, что делать с не-ASCII слизнями. Между тем, самый простой подход - использовать preg_replace() для удаления знаков препинания и преобразования пробелов в дефисы.

...