WEB -
Переключить навигацию

Язык

  • Русский

Введите не менее 3 символов для поиска.

  • Русский

Поиск

Введите не менее 3 символов для поиска.

Книги
  • Книги
  • JavaScript
  • HTML и CSS
  • Без категории
  • Другие темы
  • SEO
  • WordPress
  • Дизайн
  • PHP
  • Laravel
  • React js
  • Python
  • SQL и языки запросов
  • Android
  • Yii PHP framework
  • Статьи
  • Laravel
  • WordPress
  • Темы WordPress
  • Интернет магазин
  • JavaScript
  • © 2015-2026 Andrii Beznosko

  • Our partner

Генерируем ЧПУ в Laravel 5

  • Описание
  • Описание/Скачать

Обычно в ЧПУ страниц используется транслит, перевод или фраза в оригинальном состоянии без изменений. С третьим вариантом проблем возникать не должно, Laravel понимает кириллицу из коробки. Рассмотрим остальные два варианта.

Перевод

Для генерации переведённого ЧПУ нам понадобится пакет Google Translate PHP. Устанавливаем его командой composer require stichoza/google-translate-php.

Дальше нужно определиться, где и когда мы будем генерировать переведённый ЧПУ. Можно делать это автоматически при сохранении сущности (тут множество вариантов — события модели, трейт в контроллере с нужным методом и т.д.) или сделать кнопку в интерфейсе рядом с названием сущности, при нажатии на которую у сервера будет запрашиваться перевод и писаться в поле ЧПУ.

В данном примере я воспользуюсь вторым вариантом, потому как он более гибкий. У нас будет выбор — сгенерировать ЧПУ автоматически или ввести вручную.

Сам метод для перевода можно разместить в отдельном контроллере, например, SeoController или сделать трейт, который при подключении к контроллеру сущности будет добавлять метод. Тут выбор за вами.

Сам метод:

/**
 * @param Request $request
 * @return \Illuminate\Http\JsonResponse
 */
public function getTranslatedSlug(Request $request)
{
    // получаем текст из запроса
    $text = $request->get('text');

    // проверяем на пустоту
    if (!$text || trim($text) === "") {
        return response()->json(["result" => ""]);
    }

    // создаём наш Google Translate клиент
    // первым аргументом вводится язык источника
    // вторым — язык, на который нужно перевести
    // соответственно, если первый аргумент null, то производится автоматическое определение языка
    $tr = new TranslateClient(null, 'en');
    
    // переводим и преобразуем в корректный url
    $translatedSlug = str_slug($tr->translate($text));

    // возвращаем
    return response()->json(["result" => $translatedSlug]);
}

Собственно, вот и всё, осталось написать фронтенд на пару строк. Можно лапшой на jQuery, примерно так:

$('#translate-slug').on('click', function(e) {
    e.preventDefault();
    var url = '/seo/translated-slug';

    $.ajax(url, {
        dataType: "json",
        data: { text: $('#name').val() },
        success: function(resp) {
            $('#slug').val(resp.result);
    

}
});
});
Транслит

Для транслита нам уже не обязательно посылать что-либо на сервер, так как его можно сгенерировать на клиенте. Поэтому достаточно воспользоваться каким-либо готовым плагином, например, jQuery Generate URL или написать своё решение. Если вы всё же хотите сгенерировать транслит на сервере, то можно использовать str_slug().

Заключение

В заключение приведу ссылку на рекомендации Google о структуре URL на сайте. Смотреть в раздел «Структура URL сайта».

Комментарии

Всего комментариев: 0

Оставить комментарий Отменить ответ

Ваш email не будет опубликован.

Категория: Главная » Статьи » Laravel » Генерируем ЧПУ в Laravel 5
Статус: For advanced readers
Ссылка на оригинальную статью (если указана или статья не является нашей) Скачать
Добавил Янв 2, 2016 09:15 Andriy

Статьи, опубликованные на WEB-Программист, сопровождаются ссылками на источники. Администрация сайта не несёт ответственности за использование этих материалов.

Смотрите также:

Отладка запросов в Laravel

Laravel предоставляет отличный конструктор запросов и ORM — Eloquent. Это позволяет писать запросы невероятно простым и понятным способом. Тем не менее, бывают случаи, когда вам нужно создать сложный запрос и увидеть, какой SQL в действительности сгенерируется. В этом руководстве мы...

Способы организации пространств имён классов в Laravel

В коде: <?php namespace App; class SendReceipt {}   Структура папок: src Receipt ReceiptRepository SendReceipt SendReceiptHandler User UserRepository CreateUser CreateUserHandler   Преимущества: Проще не иметь дело с подпространствами имён. В очень маленьких приложениях это может быть нормально. Если у вас...

Преимущества использования Репозиториев в Laravel

Что такое репозитории? Если вы читали мои предыдущие посты, то вы, наверное, уже знаете, что из себя представляют репозитории. Но понимаете ли вы, что является причинами для использования Репозиториев? Хотя для некоторых причины использования паттерна очевидны, я думаю, многие люди...

Трюки Eloquent для лучших репозиториев (Laravel)

Одна из лучших вещей в написании кода - очевидность хороших практик, ведь если им не следовать, возникает раздражение. Очень надоедает, когда вам нужно писать одну и ту же вещь снова и снова. Когда вы чувствуете себя недовольным из-за повторения одних...

Структура приложения и пространств имён при DDD в Laravel

Я обычно разделяю большие приложения на 4-5 пространств имён, которые привязаны к глобальному app пространству имён. Например, я хочу создать приложение ToDo List, так что базовое пространство имён будет ToDo. Затем у меня есть 3 пространства имён внутри этого: App...

Связаться с нами

- Премиум темы и плагины WP Star бесплатно -

Поддержать автора

Настройки cookie

Мы используем необязательные аналитические cookie, чтобы понимать, какие материалы полезны. Вы можете продолжить без аналитики.

Вы можете изменить свой выбор в любое время.