Как работает Str::slug
По описаниям, Str::slug использует библиотеку portable-ascii, которая принимает параметр языка. Параметр влияет на таблицу замен: для некоторых языков включаются диапазоны символов, которые иначе игнорируются. Результат для русского языка в официальной документации подробно не расписан, поэтому его нужно проверить.
Str::transliterate
Отдельный метод Str::transliterate переводит специальные символы в ASCII-эквиваленты. Распространён шаблон Str::slug(Str::transliterate($title)), описанный в публикации Laravel News.
Как проверить таблицу
Чтобы узнать, как ваш проект на Laravel превращает заголовок в адрес, создайте тестовую страницу с названием «Щёлково цех юг» и сравните результат. Таблица Яндекса даёт shhelkovo-ceh-yug; привычный английский вариант — shchyolkovo-tsekh-yug. Как читать другие результаты — в статье «Транслит Яндекса против встроенного в CMS».
Если результат не совпадает с Яндексом
- Принять результат Laravel, если важнее единообразие: все адреса проекта создаются одним способом.
- Написать собственный хелпер с таблицей Яндекса. Готовый код функции на PHP — в статье «Функция транслита на PHP, JavaScript и Python».
- Задавать slug вручную из генератора.
Уникальность и смена slug
При совпадении заголовков добавляйте суффикс: как это сделать. После смены slug опубликованной записи настройте редирект.
Связанные статьи
Именованные маршруты и слаги в Laravel — в статье «Маршрутизация в Laravel».
Источники
Использованы обсуждения: о Str::slug и portable-ascii и публикация Laravel News о Str::transliterate. Сверьтесь с официальной документацией вашей версии.
Типичные ошибки
- Полагаться на Str::slug, не проверив таблицу.
- Использовать разные хелперы для slug в разных частях проекта.
- Не добавлять суффикс при совпадении.
- Менять slug опубликованной записи без редиректа.
Пошагово: приводим адреса к единому виду
- Проверьте, как
Str::slugобрабатывает контрольную фразу. - Сравните результат с таблицей Яндекса.
- Если нужна схема Яндекса, подключите собственный хелпер.
- Для существующих записей пересчитайте slug скриптом.
- Для опубликованных записей настройте редиректы.
Разбор заголовка по шагам
Возьмём заголовок «Как выбрать беговые кроссовки» и пройдём путь до адреса. Str::slug создаёт slug из заголовка.
Заголовок: Как выбрать беговые кроссовки
Без служебных слов: Как выбрать беговые кроссовки
Адрес целиком: kak-vybrat-begovye-krossovki
Адрес короче: kak-vybrat-begovye-krossovki
Режим «Убрать служебные слова» в генераторе делает второй шаг сам. Короткий адрес читается легче и лучше помещается в строку браузера. Ограничения по длине и другие правила составления адреса собраны в статье «Как составить ЧПУ-адрес страницы».
Памятка для редактора
Если в проекте несколько редакторов, дайте им короткую памятку. Достаточно этих правил:
- Проверяем Str::slug контрольной фразой.
- Один хелпер на весь проект.
- Меняем slug — с редиректом.
Чек-лист
- Проверить Str::slug контрольной фразой.
- Выбрать схему.
- Использовать один хелпер.
- При смене slug настраивать редирект.
Частые вопросы
Превращает ли Str::slug кириллицу в латиницу?
По описаниям — да, используется библиотека portable-ascii. Таблицу нужно проверить.
Зачем параметр языка?
Он влияет на таблицу замен. Подробности — в документации библиотеки.
Как получить таблицу Яндекса?
Написать свой хелпер или задавать slug вручную из генератора.
Что делать при совпадении slug?
Добавить суффикс и проверять уникальность перед сохранением.
Проверьте свои заголовки: вставьте их в генератор ЧПУ и посмотрите, как в адресе выглядят слова с этой буквой.