www.www.zaachi.com » Blog/Ruby on Rails » Sitemap v Ruby on Rails

Sitemap je soubor, který pomáhá vyhledávačům zorientovat se na webové stránce. Ukážeme si jak jednoduše vygenerovat tento soubor v Ruby.
Co je to sitemap, vysvětlovat nebudu, stručný popis je na Wikipedii, kde si jej můžete přečíst.
Vygenerovat sitemap v Ruby on Rails je vcelku primitivni záležitost.
Jako první si v vytvoříme URL adresu. V routes.rb si přidáme řádek:
map.connect 'sitemap.xml', :controller => "Sitemap", :action => "Sitemap"
v dalším kroku je nutné vytvořit controller. který umístíme, jak jinak než do adresáře app/controllers. Bude se jednat o soubor sitemap_controller.rb ve kterém implementujeme třídu SitemapController odvozenou od ApplicationController.
class SitemapController < ApplicationController
layout nil
def Sitemap
#nove clanky
@articles = Article.find(:all, :select => 'id, name, updated_at', :conditions => ["public = 1"], :order => "created_at DESC", :limit => 100)
#nove ucty
@users = User.find(:all, :select => 'id, username, updated_at', :conditions => ["confirm = 1"], :order => "created_at DESC ", :limit => 100)
render :action => 'google_sitemap.rxml'
end
end
Třída vytváří nový controller, který nemusí používat žádný layout (nastavení: layout nil) protože se bude jednat o čisté XML. Obsahuje jedinou metodu - Sitemap, která vytáhne z databáze záznamy o datech, které chceme zobrazit v sitemapě. v tomto případě se jedná o nové články a nové uživatelské účty na našem webu.
Nakonec odkazujeme do pohledu, který jsme si pojmenovali google_sitemap.rxml (rxml - Rails XML). Tento pohled je umístěn v adresáři: app/views/sitemap.
xml.instruct!
xml.urlset "xmlns" => "http://www.google.com/schemas/sitemap/0.9" do
xml.url do
xml.loc index_url(:subdomain => false)
xml.lastmod SitemapDate(Time.now)
xml.changefreq "always"
end
@articles.each do |article|
xml.url do
xml.loc url_for(:only_path => false, :controller => 'articles', :action => 'show', :id => article)
xml.lastmod SitemapDate(post.updated_at)
xml.changefreq "daily"
xml.priority 0.9
end
end
@users.each do |user|
xml.url do
xml.loc index_url(:subdomain => user.username)
xml.lastmod SitemapDate(user.updated_at)
xml.changefreq "weekly"
xml.priority 0.5
end
end
end
Na prvním místě si do sitemapy umístíme odkaz na web samotný, tedy na jeho index, do něj odkazujeme přes namapovaný index, pomocí index_url.
V pohledu dále využijeme proměnné, které jsme si z controlleru předali a ty postupně vypíšeme jako XML záznam.
Abychom příklad trochu rozšířili, využíváme v pohledu funkci SitemapDate, kterou si doimplementujeme do helperu:
Sobuor sitemap_helper.rb umístíme do adresáře: app/helpers:
module SitemapHelper
#upravi datum pro sitemapu
def SitemapDate(date)
date.utc.strftime("%Y-%m-%dT%H:%M:%S+00:00")
end
end
Vygenerovat sitemap v Ruby on Rails je opravdu otázkou několika minut, pokud máme aplikaci rozumně rozvrženou. Stačí pouze vytáhnout data z databáze a jednoduše je vypsat v pohledu.

Autor: Zaachi
Publikováno: 26.4.2010 21:45:46
Seriál Ruby on Rails 1: Začínáme s Ruby
Seriál Ruby on Rails 5: Počítání s Ruby
Ruby on Rails: Exceptions
Ruby on Rails - Rake