Skip to content

Latest commit

 

History

History
153 lines (112 loc) · 7.87 KB

README.md

File metadata and controls

153 lines (112 loc) · 7.87 KB

StRoutes

При создании Интернет-магазина на базе Rails одной из проблем является создание ЧПУ (человеко подобных ссылок) для удобной навигации и SEO-прожвижения. Существующие методы, описанные например, здесь и здесь, позволяют частично решить проблему путем, фактически, замены цифрового идентфиикатора на friendly-slug. При этом сложно добиться ряда SEO-эффектов:

  1. В рамках традиционной модели роутинга Rails отсутствует управление вложенностью категорий. То есть непросто сделать такой url, как /tovary/phones/android/nexus-phones. Такую иерархию можно сделать через namespaces, но корректировать такую иерархию может только программист изменнием исходного кода. Такое ограничение хорошо видно на Spree, где даже указав в админке категорию, и родительскую категорию, на уровне URL все категории будут все равно отображаться на одном уровне глубины.
  2. Обычно часть URL, отвечающая за обработку контроллера, совпадает по имени с контроллером. Альтернативный вариант указать as: при создании route. При этом изменить его пользователем самостоятельно, например, через админку, без программиста, затруднительно.

Модуль StRoutes обеспечивает:

  • Вложенность категорий
  • Автогенерация уникальных имен категорий и страниц
  • Возможность отнесения одной страницы к разным категориям
  • Возможность отнесения одной категории к нескольким родительским категориям
  • Возможность депубликовать временно страницу
  • Генерация файла sitemap.txt
  • Автоматический вызов контроллера и действия, соответствующего по неймингу типу страницы
  • Расчет числа страниц в каждой категории
  • Поддержка канонических ссылок
  • Сокрытие корневной категории из URL
  • Генерация HTML-фрагмента "хлебных крошек"

Использование модуля

Работа плагина сосотоит из следующей последовательности действий:

  1. Подключение модуля
  2. Расширение миграций для страниц и категорий
  3. Создание корневых категорий
  4. Настройка роутинга
  5. Настройка фоновых задач

ToDo:

  1. Админка для модуля ActiveAdmin
  2. Генератор 301-х ридеректов
  3. Генератор коротких ссылок
  4. Интеграция с метрикой

Шаг 1 - Подключение модуля

Добавьте в Gemfile:

gem 'st_routes'

Выполните:

$ bundle

Или запустите отдельную инсталляцию гема:

$ gem install st_routes

Шаг 2 - Расширение миграций для страниц и категорий

Создайте дополнительные миграции для таблиц pages и categories. Добавьте в них необходимые поля для отображения и управления страницами и категориями. Например, поля описания, метаданных, изображение-обложку и пр.

Пример:

class ExpandStRoutesPages < ActiveRecord::Migration[5.0]

  def change
    add_column :st_routes_pages, :body, :text, default: ''
  end
end

Шаг 3 - Создание корневых категорий

Скопируйте в папку db/seeds шаблоны корневых категорий:

$ rails st_routes:install:roots

В файле root_categories.rb необходимо отключить или изменить не нужные категории, и загрузить их в базу данных:

$ rails st_routes:install:seed

Чтобы использовать библиотечные функции st_routes, необходимо добавить в файл application.rb следующую строку

config.autoload_paths += Dir["#{StRoutes::Engine.root}/lib/**/"]

Шаг 4 - Настройка роутинга

Добавьте в файл routes.rb последней строкой следующую:

get "*path", to: StRoutes::RecognizeRoute.new

Добавление этой строки обеспечит передачу URL страницы или категории в модуль StRoutes, где произойдет распознование (парсинг) URL, выделение страницы и категории, и вызов соответствующего контроллера с действием. При этом будет доступна следующая структура

params = {
    :type => :category, # Тип маршрута: :category, :page, :mainpage, :not_found
    :category_id => 34, # Идентификатор категории
    :page_id => 0, # Идентификатор страницы
    :breadcrumb => [1, 11, 12] # Массив ID категорий для построения "хлебных крошек"
}

Если необходимо добавить иные типы страниц, например - корзину или поисковую выдачу, необходимо добавить соответствующие маршруты до указанной в начале этого пункта строки.

ToDo: пример файла

Шаг 5 - Настройка фоновых задач

ToDo: определение количества страниц в категории

Описание

Основные понятия

  • корневая категория
  • категория
  • страница

Таблицы базы данных

  • categories - список категорий
  • category_links - связь категорий между собой по принципу каждый с каждым
  • pages - список страниц
  • page_links - связь страниц с категориями
  • category_urls - кеш, в котором хранятся заранее построенные полные пути категорий и информация для "хлебных крошек"

Вспомогательные библиотеки

  • parser - класс StRoutes::URL::Parser, который обеспечивает распознование введенного URL и преобразование его в идентификаторы страницы и категории

License

Этот гем доступен по условиям лицензии MIT License.