← Заметки и статьи о Laravel PHP

6 декабря 2015 перевод

Генерируем ЧПУ

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

Вариант 1: Перевод

Для генерации переведённого ЧПУ нам понадобится пакет Google Translate PHP. Устанавливаем его командой

composer require stichoza/google-translate-php

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

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

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

Сам метод:

/**
 * @param Request $request
 * @return IlluminateHttpJsonResponse
 */
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);
        }
    });
});

Вариант 2: Транслит

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

Заключение

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

Источник: https://laravelinfo.com

Плюсануть
Поделиться
Отправить