lib/webgen/sourcehandler/sitemap.rb in webgen-0.5.8 vs lib/webgen/sourcehandler/sitemap.rb in webgen-0.5.9
- old
+ new
@@ -12,37 +12,37 @@
class Sitemap
include Webgen::WebsiteAccess
include Base
- # Create an XML sitemap from +parent+ and +path+.
- def create_node(parent, path)
- page_from_path(path)
+ # Create an XML sitemap from +path+.
+ def create_node(path)
+ page = page_from_path(path)
path.ext = 'xml'
- raise "Needed information site_url missing for sitemap <#{path}>" if path.meta_info['site_url'].nil?
- super(parent, path)
+ if path.meta_info['site_url'].nil?
+ raise Webgen::NodeCreationError.new("Needed information site_url is missing",
+ self.class.name, path)
+ end
+
+ super(path) do |node|
+ node.node_info[:sitemap] = page
+ end
end
# Return the rendered feed represented by +node+.
def content(node)
- require 'builder'
- list = website.blackboard.invoke(:create_sitemap, node, node.lang, options_for_node(node)).to_lcn_list.flatten
- sitemap = ::Builder::XmlMarkup.new(:indent => 2)
- sitemap.instruct!(:xml, :version => '1.0', :encoding => 'UTF-8')
- sitemap.urlset(:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9") do
- list.each do |alcn|
- item = node.tree[alcn]
- sitemap.url do |url|
- sitemap.loc(URI.escape(File.join(node['site_url'], item.path)))
- sitemap.lastmod(item['modified_at'].iso8601)
- changefreq = item['change_freq'] || node['default_change_freq']
- sitemap.changefreq(changefreq) if changefreq
- priority = item['priority'] || node['default_priority']
- sitemap.priority(priority) if priority
- end
- end
+ if node.node_info[:sitemap].blocks.has_key?('template')
+ node.node_info[:sitemap].blocks['template'].render(Webgen::Context.new(:chain => [node])).content
+ else
+ chain = [node.resolve("/templates/sitemap.template"), node]
+ node.node_info[:used_nodes] << chain.first.alcn
+ chain.first.node_info[:page].blocks['content'].render(Webgen::Context.new(:chain => chain)).content
end
- sitemap.target!
+ end
+
+ # Return the alcns of the sitemap +node+ as a flat list.
+ def alcns(node)
+ website.blackboard.invoke(:create_sitemap, node, node.lang, options_for_node(node)).to_lcn_list.flatten
end
#######
private
#######