Создание sitemap.xml для ленивых Ruby on Rails программистов

Кусочки мозайки

В одном из своих прошлых постов я рассказал как можно создать sitemap.xml файл в Rails не прибегая к использованию сторонних плагинов. Те кто прочитал этот пост наверное заметили что для того чтобы добиться результата пришлось совершить немало телодвижений. Сейчас же я расскажу про способ который сведёт все ваши усилия по созданию sitemap.xml к минимуму.

Способ сводиться к использованию одного из плагинов который сделает за вас всю “грязную работу”. А использовать мы будем плагин под названием sitemap. Есть одна маленькая тонкость его работы о которой бы я сразу хотел вас предупредить, дело в том что он использует для построения sitemap файла RESTful routing-и, а это значит что ваши контроллеры должны работать по законам REST, если это не так, то лучше для генерации sitemap.xml использовать способ описанный в предыдущем моём посте.

Коротко расскажу о REST подходе. Предположим у вас есть чистый контроллер под названием Messages для работы с сообщениями(добавление, изменение удаление и т.п.), чтобы он зажил по законам REST, добавте в routes.rb файл строку

map.resources :messages

это строка создаст следующие маршруты

GET    /messages/                               {:action=>"index", :controller=>"messages"}
GET    /messages.:format/                       {:action=>"index", :controller=>"messages"}
POST   /messages/                               {:action=>"create", :controller=>"messages"}
POST   /messages.:format/                       {:action=>"create", :controller=>"messages"}
GET    /messages/new/                           {:action=>"new", :controller=>"messages"}
GET    /messages/new.:format/                   {:action=>"new", :controller=>"messages"}
GET    /messages/:id/edit/                      {:action=>"edit", :controller=>"messages"}
GET    /messages/:id/edit.:format/              {:action=>"edit", :controller=>"messages"}
GET    /messages/:id/                           {:action=>"show", :controller=>"messages"}
GET    /messages/:id.:format/                   {:action=>"show", :controller=>"messages"}
PUT    /messages/:id/                           {:action=>"update", :controller=>"messages"}
PUT    /messages/:id.:format/                   {:action=>"update", :controller=>"messages"}
DELETE /messages/:id/                           {:action=>"destroy", :controller=>"messages"}
DELETE /messages/:id.:format/                   {:action=>"destroy", :controller=>"messages"}

А это в свою очередь означает что если вы например хотите изменить сообщение, то должны сделать PUT запрос по адресу /messages/:id, а Rails в свою очередь вызовет метод update у контроллера messages в котором уже ваш код обновит сообщение. Если вы хотите больше узнать о REST, в качестве отправной точки можете прочитать об этом подходе в книге ”Гибкая разработка веб-приложений в среде Rails” или статью в википедии.

Итак, у вас есть Rails приложение в которое вы хотите добавить sitemap.xml. Для начала перейдём в корневую директорию приложения и проинсталируем плагин с помощью комманды:

script/plugin install git://github.com/queso/sitemap.git

После установки плагина станет доступен генератор который создаст миграцию добавляющую в БД таблицы которые использует плагин. Запускаем генератор и “накатываем” созданную им миграцию на БД:

script/generate sitemap_migration
rake db:migrate

Собственно на этом установка завершена. Осталось только сконфигурировать плагин. Для этого запускаем приложение и переходим по адресу http://<ваш сайт>/sitemap_settings. И вуаля! Перед нами страница для настройки sitemap.xml, а мы ещё не написали не одной строчки кода :)

Страница настроек sitemap.xml
Страница настроек sitemap.xml

С предназначением полей на этой странице я думаю всё понятно. В поле “Site Name” укажите название вашего сайта, в поле “Description” его описание. В поле “XML Location” введите URL по которому будет доступен ваш sitemap.xml и не забудьте нажать кнопку “Save”

Затем перейдём в раздел “Widgets”. В нем можно настроить добавление в sitemap.xml динамически генерируемых URL на основе любой из имеющихся у вас моделей. Вот тут как раз и потребуются контроллеры живущие по законам REST. Добавте новый виджет кликнув по ссылке “Add a Widget”, после чего откроется следующая страница:

Настройка динамически генерируемых ссылок
Настройка динамически генерируемых ссылок

В первом поле надо ввести название вашей модели. На основе предоставляемых ею данных будут генерироваться URL. В следующее поле надо ввести название метода который возвращает ссылку на index страницу вашего контроллера. Помните строку в routes.rb которая задаёт REST маршруты для контроллера? Помимо маршрутов, ещё создаётся динамический метод message_url (чем-то похожий на url_for). если вызвать его без параметров, то он как раз и вернёт URL указывающий на действие index контроллера message. Поэтому во второе поле мы вставляем название этого метода. Третье поле позволяет наложить простой фильтр на данные из модели Message (например можно указать что в sitemap.xml надо помещать только сообщения которые были опубликованы). Смысл же оставшихся трёх полей я рекомендую посмотреть на sitemap.org

Раздел для добавления статических ссылок я описывать не буду так как он практически идентичен разделу для добавления динамических ссылок и вы сможете сами в нём разобраться.

После того как вы всё настроили sitemap.xml файл будет доступен по указанному вами адресу. Вот например что у меня получилось:

Пример генерации sitemap.xml
Пример генерации sitemap.xml

Да, получился HTML, а не XML файл как следовало ожидать :) Потому как умный REST контроллер который генерирует sitemap.xml просёк что к нему обращаются из браузера. Чтобы всё же увидеть результат в XML формате просто обратитесь к sitemap.xml файлу установив заголовок “_Accept: text/xml_”, например выполнив команду:

curl -H "Accept: text/xml" http://localhost:3000/sitemap.xml

Как видите не написав ни одной строчки кода мы научились создавать sitemap.xml для своего Rails приложения… если конечно вы используете REST подход ;) На этом пока всё.

Тэги: sitemap
Будь всегда в курсе последних новостей блога подписавшись на новости
в формате RSS. Присоединяйся!
* * *

Комментарии

* * *

Добавить новый комментарий

Доступные BB теги

*

* (не будет опубликован)

(если есть)

  • Multi CAPTCHA Refresh2
  • *

1. Проверьте комментарий перед отправкой
2. Все комментарии проходят модерацию перед публикацией в блоге