http://www.zaachi.com/cs/items/sitemap-v-ruby-on-rails.html

Sitemap v Ruby on Rails

Publikováno: 26.04.2010 21:45:46

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.

sitemap_controller.rb

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 .

sitemap.rxml

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:

sitemap_helper.rb

module SitemapHelper
    #upravi datum pro sitemapu
    def SitemapDate(date)
        date.utc.strftime("%Y-%m-%dT%H:%M:%S+00:00")
    end
end

Závěrem

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.