SEO-оптимизация, Расширения, виджеты

Расширение yii2-slug-behavior для автогенерации текстовых идентификаторов (slug)

Слаги или алиасы у постов — необходимость сегодняшнего интернета. С их помощью и формируется ЧПУ или SEO-friendly urls.

Расширение yii2-slug-behavior для автогенерации текстовых идентификаторов (slug)

Настройка ЧПУ – стандартная часть работы по SEO-оптимизации любого сайта. Формировать URL только лишь по id записи из базы данных – плохая практика. Поэтому используются текстовые идентификаторы (слаги), как правило это транслитерированные заголовки страницы. Конечно этот процесс можно и нужно автоматизировать.

Многие часто используемые в веб программировании приёмы и подходы воплощаются программистами в виде расширений. Это хорошая практика использовать хорошие расширения, дабы не изобретать велосипед. В нашем случае для Yii2 задачу автоматического формирования и сохранения слагов к постам решает созданное Александром Зелениным расширение yii2-slug-behavior. Оно подключается и работает как поведение.

Устанавливаю его через composer.

Дальше просто подключаю поведение в нужной модели

public function behaviors()
{
    return [
        'slug' => [
            'class' => 'Zelenin\yii\behaviors\Slug',
            'slugAttribute' => 'slug',
            'attribute' => 'name',
            // optional params
            'ensureUnique' => true,
            'replacement' => '-',
            'lowercase' => true,
            'immutable' => false,
            // If intl extension is enabled, see http://userguide.icu-project.org/transforms/general. 
            'transliterateOptions' => 'Russian-Latin/BGN; Any-Latin; Latin-ASCII; NFD; [:Nonspacing Mark:] Remove; NFC;'
        ]
    ];
}

Также слаг может создаваться из нескольких атрибутов, и даже связанных атрибутов

public function behaviors()
{
    return [
        'slug' => [
            ...
            'attribute' => ['name', 'language.username'],
            ...
        ]
    ];
}

Описание и обсуждение разработки этого экстеншна - http://habrahabr.ru/post/208328/