Создание Sitemap.xml в Rails
-
01 октября 2008 13:08
-
Комментарии (1)
Создание Sitemap в Rails довольно простая задача. Всё что вам нужно сделать это:
1) Создать контроллер или использовать уже готовый. Я пошел вторым путём. В этот контроллер нужно добавить действие которое будет отвечать за создание Sitemap.xml страницы.
def sitemap
headers['Content-Type'] = "application/xml"
@messages = Message.find :all, :limit => 50000, :order => "published_at DESC"
end
Первая строка устанавливает заголовок Content-Type в “application/xml” это означает для браузера (или поискового сервера) что контент файла находится в формате XML. Sitemap который мы создаём соответствует спецификации под номером 0.9 в которой сказано что контент должен быть именно в этом формате.
Вторая строка извлекает все сообщения в блоге и сортирует их в обратном порядке (чтобы более новые сообщения были вначале Sitemap файла). Ограничение в 50000 записей опять же установлено на основе спецификации (хотя есть ещё ограничение в 10Мб, но мы его не учитываем).
Ещё один немаловажный момент связанны с этим методом: нужно отключить текущий layout если он у вас установлен.
layout 'main', :except => [:sitemap]
Если этого не сделать, то весть XML код который мы сгенерируем на следующем шаге будет помешен в этот layout, а это в свою очередь будет означать что sitemap файл станет не корректным.
Кстати, как вариант, заместо этой строчки можно добавить в метод (в конец метода) следующую строчку такого вида:
render :layout => false
2) Следующим шагом будет создание представления которое называется так же как и наше действие и лежит в каталоге представления ассоциированном с контроллером. Называется он у меня так: sitemap.rxml. Обратите внимание на расширение rxml это означает что в этом файле мы собираемся работать с XML а вспомогательные методы Rails помогут нам в этом.
xml.instruct! :xml, :version=>"1.0"
xml.urlset(:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9") {
xml.url {
xml.loc(url_for :controller => 'blog', :only_path => false)
lastmod = @messages[0].published_at.strftime("%Y-%m-%d") if !@messages.nil?
lastmod = lastmod || Time.now.strftime("%Y-%m-%d")
xml.lastmod(lastmod)
xml.changefreq("daily")
xml.priority(1)
}
for message in @messages
xml.url {
xml.loc(url_for :controller => 'blog', :action => 'message', :id => message.id, :only_path => false)
xml.lastmod(message.published_at.strftime("%Y-%m-%d"))
xml.changefreq("weekly")
xml.priority(0.8)
}
end
}
В первой строке мы задаём сигнатуру XML файла. А затем, во второй строке, создаём корневой XML тэг под названием urlset с атрибутом xmlns который указывает на то какую версию Sitemap спецификации мы используем при генерации файла.
Затем обратите внимание на два места в коде где встречается строка xml.url в первом случае этот тег будет описывать главную страницу блога, а во втором каждое конкретное сообщение блога (т.к. этот тег находится внутри цикла который перебирает сообщения). Подобным же способом можно добавить ссылки на другие страницы вашего сайта (например на страницу с описанием сайта и т.п.)
Тэг xml.loc содержит полный URL путь в странице (чтобы получить полный путь, а не относительный, у метода urlfor_ устанавливаем опцию onlypath_ равной false)
Тэг xml.lastmod содержит дату (время указывать необязательно) последнего изменения страницы. Для главной страницы блога я вычисляю его на основании первой последней записи в созданной блоге.
Тэг xml.changefreq указывает с какой частотон надо проводить сканирование каждой конкретной страницы (учтите что вы всего лишь предлагаете поисковому боту сканировать с такой частотой, а он сам затем решает следовать вашим указаниям или нет). В данном случае я хочу чтобы главная страница сканировалась ежедневно (daily), а страницы с сообщениями раз в неделю (weekly)
Тэг xml.priority указывает в каком порядке бот должен сканировать страницы (допустимы знчения от 0.0 до 1.0) После этих 2-х шагов по адресу http://localhost:3000/<контроллер содержащий действие sitemap>/sitemap вы должны получить контент sitemap файла.
3) Последний завершающий штрих состоит в том что мы заставим Rails отдавать sitemap файл по более короткому URL. Для этого в файл config/routes.rb добавим следующую строку:
map.sitemap "/sitemap.xml", :controller => "<ваш контроллер>", :action => "sitemap"
Теперь обратившись по адресу http://localhost:3000/sitemap.xml вы получите sitemap.xml файл.
На этом создание sitemap.xml файла закончено.
P.S. Есть ещё более правильный способ создания sitemap файла, это использование специальных плагинов, но этот способ я постараюсь рассмотреть позже.
Создание sitemap.xml для ленивых Ruby on Rails программистов
-
19 октября 2008 00:01
-
Комментарии (2)

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

