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 #######