www.www.zaachi.com »  Blog/Ruby on Rails  »  Sitemap v 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.

 

Reklama

Pokud mě chcete podpořit a jste milovník jedné stopy, navštivte můj projekt: MotoArena.cz

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.

 

 


linkuj topclanky
Komentáře (2)

Autor: Zaachi
Publikováno: 26.4.2010 21:45:46


Mohlo by vás zajímat:
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
TOPLIST.cz
rss coments img img img