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:
1 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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
1 2 3 4 5 6 |
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.
velmi pekne napisane, lepsie som nenasiel ani v anglictine. dik!
Diky 🙂