Commit bafdb3104c4ffa0cdd94a118699dae0523190bf8

Authored by Andrey Karpikov
1 parent ec8f803e

add sitemap

1 module Kanjai 1 module Kanjai
2 class KanjaiPluginController < SiteController 2 class KanjaiPluginController < SiteController
3 def generate_sitemap 3 def generate_sitemap
4 - 4 + []
5 end 5 end
6 end 6 end
7 end 7 end
@@ -30,7 +30,10 @@ module Kanjai @@ -30,7 +30,10 @@ module Kanjai
30 domain_title = "#{request.subdomain}.#{domain_title}" 30 domain_title = "#{request.subdomain}.#{domain_title}"
31 end 31 end
32 32
33 - domain = Domain.find_by(title: domain_title) 33 + @domain = Domain.find_by(title: domain_title)
  34 + @default_lang = @domain.default_lang.try(:code)
  35 +
  36 + @alternative_languages = @domain.page_langs.where.not(code: @default_lang).pluck(:code).uniq
34 end 37 end
35 38
36 private 39 private
@@ -31,6 +31,10 @@ module Kanjai @@ -31,6 +31,10 @@ module Kanjai
31 block: 1 31 block: 1
32 } 32 }
33 33
  34 + def full_url(scheme, lang = nil)
  35 + "#{scheme}#{domain.title}#{menu_url(scheme, lang)}"
  36 + end
  37 +
34 38
35 def menu_url(scheme, lang = nil) 39 def menu_url(scheme, lang = nil)
36 40
@@ -39,11 +43,11 @@ module Kanjai @@ -39,11 +43,11 @@ module Kanjai
39 url = self.lang_attributes(lang, :url) 43 url = self.lang_attributes(lang, :url)
40 44
41 if url.present? 45 if url.present?
42 - return generate_url(scheme, url, lang) 46 + return self.generate_url(scheme, url, lang)
43 else 47 else
44 url = self.lang_attributes(ADMIN_CONFIG['default_lang'], :url) 48 url = self.lang_attributes(ADMIN_CONFIG['default_lang'], :url)
45 if url.present? 49 if url.present?
46 - return generate_url(scheme, url, ADMIN_CONFIG['default_lang']) 50 + return self.generate_url(scheme, url, ADMIN_CONFIG['default_lang'])
47 else 51 else
48 '' 52 ''
49 end 53 end
@@ -63,7 +67,7 @@ module Kanjai @@ -63,7 +67,7 @@ module Kanjai
63 loop do 67 loop do
64 current_page_url = current_page.lang_attributes(lang, :url) 68 current_page_url = current_page.lang_attributes(lang, :url)
65 segments << current_page_url.gsub(/^\//, '').gsub(/\/$/, '') if current_page_url.to_s.present? 69 segments << current_page_url.gsub(/^\//, '').gsub(/\/$/, '') if current_page_url.to_s.present?
66 - break if current_page_url[0] == '/' 70 + break if current_page_url.to_s.present? && current_page_url[0] == '/'
67 break if current_page.parent.nil? 71 break if current_page.parent.nil?
68 current_page = current_page.parent 72 current_page = current_page.parent
69 end 73 end
@@ -126,6 +130,36 @@ module Kanjai @@ -126,6 +130,36 @@ module Kanjai
126 end 130 end
127 end 131 end
128 132
  133 + def added_to_sitemap?
  134 + lang = I18n.locale.to_s
  135 + url = self.lang_attributes(lang, :url)
  136 + url != ":param"
  137 + end
  138 +
  139 + def plugin_sitemap_pages
  140 + lang = I18n.locale.to_s
  141 +
  142 + page_url = full_url('https://', lang)
  143 +
  144 + [].tap do |n|
  145 + page_data.where(lang: lang).each do |item|
  146 + item.page_contents.each do |page_content|
  147 + if page_content.type_content == 'plugin'
  148 + controller = page_content.controller_name.constantize.new
  149 + response = controller.send 'generate_sitemap'
  150 + if response
  151 + response.each do |plugin_page|
  152 + if plugin_page[:segment].present?
  153 + n << "#{page_url}/#{plugin_page[:segment]}"
  154 + end
  155 + end
  156 + end
  157 + end
  158 + end
  159 + end
  160 + end
  161 + end
  162 +
129 def self.default_public_page_url(scheme) 163 def self.default_public_page_url(scheme)
130 page = Page.where(private_flag: false, root_page: true).first 164 page = Page.where(private_flag: false, root_page: true).first
131 if page 165 if page
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 -<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 2 +<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
  3 + xmlns:xhtml="http://www.w3.org/1999/xhtml">
  4 + <% @domain.pages.walk_tree do |page, level| -%>
  5 + <% if page.added_to_sitemap? -%>
  6 + <url>
  7 + <loc><%= page.full_url('https://', @default_lang) %></loc>
  8 + <% page.page_data.where.not(lang: @default_lang).pluck(:lang).uniq.each do |lang| -%>
  9 + <% if @alternative_languages.include?(lang) && page.lang_attributes(lang, :url) -%>
  10 + <xhtml:link rel="alternate" hreflang="<%= lang %>" href="<%= page.full_url('https://', lang) %>" />
  11 + <% end %>
  12 + <% end %>
  13 + </url>
3 14
  15 + <% page.plugin_sitemap_pages.each do |page| %>
  16 + <url>
  17 + <loc><%= page %></loc>
  18 + </url>
  19 + <% end %>
  20 +
  21 +
  22 + <% end %>
  23 +
  24 +
  25 + <% end %>
4 </urlset> 26 </urlset>
@@ -47,8 +47,8 @@ module Kanjai @@ -47,8 +47,8 @@ module Kanjai
47 when 'text' 47 when 'text'
48 content = item[:source].to_s.strip 48 content = item[:source].to_s.strip
49 if current_page 49 if current_page
50 - content = content.gsub('###link###', current_page.menu_url(session[:scheme], lang = nil))  
51 - .gsub('###title###', current_page.lang_attributes(I18n.locale, :title)) 50 + content = content.gsub('###link###', current_page.menu_url(session[:scheme], lang = nil).to_s)
  51 + .gsub('###title###', current_page.lang_attributes(I18n.locale, :title).to_s)
52 end 52 end
53 subparts << content 53 subparts << content
54 when 'repeat' 54 when 'repeat'
@@ -124,8 +124,8 @@ module Kanjai @@ -124,8 +124,8 @@ module Kanjai
124 124
125 page_collection.each do |page| 125 page_collection.each do |page|
126 if page.children.length > 0 and next_level 126 if page.children.length > 0 and next_level
127 - subparts << item[:source].to_s.gsub('###link###', page.menu_url(session[:scheme], lang = nil))  
128 - .gsub('###title###', page.lang_attributes(I18n.locale, :title)) 127 + subparts << item[:source].to_s.gsub('###link###', page.menu_url(session[:scheme], lang = nil).to_s)
  128 + .gsub('###title###', page.lang_attributes(I18n.locale, :title).to_s)
129 129
130 self.menu_generator(session, domain, next_level[:children], subparts, nil, false, page) 130 self.menu_generator(session, domain, next_level[:children], subparts, nil, false, page)
131 else 131 else
@@ -137,8 +137,8 @@ module Kanjai @@ -137,8 +137,8 @@ module Kanjai
137 end 137 end
138 else 138 else
139 if normal_state_template.present? 139 if normal_state_template.present?
140 - subparts << normal_state_template.gsub('###link###', page.menu_url(session[:scheme], lang = nil))  
141 - .gsub('###title###', page.lang_attributes(I18n.locale, :title)) 140 + subparts << normal_state_template.gsub('###link###', page.menu_url(session[:scheme], lang = nil).to_s)
  141 + .gsub('###title###', page.lang_attributes(I18n.locale, :title).to_s)
142 end 142 end
143 end 143 end
144 144
1 module Kanjai 1 module Kanjai
2 - VERSION = "0.0.349" 2 + VERSION = "0.0.350"
3 end 3 end