Я недавно добавил динамическую карту сайта в приложение блога. Эти шаги должны начать вас.
Добавьте этот маршрут в конец файла config/routes.rb
(над ним должны быть указаны более конкретные маршруты):
map.sitemap '/sitemap.xml', :controller => 'sitemap'
Создайте SitemapController
(app / controllers / sitemap_controller):
class SitemapController < ApplicationController
layout nil
def index
headers['Content-Type'] = 'application/xml'
last_post = Post.last
if stale?(:etag => last_post, :last_modified => last_post.updated_at.utc)
respond_to do |format|
format.xml { @posts = Post.sitemap } # sitemap is a named scope
end
end
end
end
- Как вы можете видеть, это для блога, поэтому используется модель Post
.
Это шаблон представления (app / views / sitemap / index.xml.builder):
base_url = "http://#{request.host_with_port}"
xml.instruct! :xml, :version=>'1.0'
xml.tag! 'urlset', 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9' do
for post in @posts do
xml.tag! 'url' do
xml.tag! 'loc', "#{base_url}#{post.permalink}"
xml.tag! 'lastmod', post.last_modified
xml.tag! 'changefreq', 'monthly'
xml.tag! 'priority', '0.5'
end
end
end
Вот и все! Вы можете проверить это, вызвав http://localhost:3000/sitemap.xml (при использовании Mongrel) в браузере, или, возможно, используя cURL.
Обратите внимание, что контроллер использует метод stale?
для выдачи ответа HTTP 304 Not Modified, если нет новых сообщений, поскольку карта сайта была запрошена последним.