Commit bafdb3104c4ffa0cdd94a118699dae0523190bf8

Authored by Andrey Karpikov
1 parent ec8f803e

add sitemap

1 1 module Kanjai
2 2 class KanjaiPluginController < SiteController
3 3 def generate_sitemap
4   -
  4 + []
5 5 end
6 6 end
7 7 end
\ No newline at end of file
... ...
... ... @@ -30,7 +30,10 @@ module Kanjai
30 30 domain_title = "#{request.subdomain}.#{domain_title}"
31 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 37 end
35 38
36 39 private
... ...
... ... @@ -31,6 +31,10 @@ module Kanjai
31 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 39 def menu_url(scheme, lang = nil)
36 40
... ... @@ -39,11 +43,11 @@ module Kanjai
39 43 url = self.lang_attributes(lang, :url)
40 44
41 45 if url.present?
42   - return generate_url(scheme, url, lang)
  46 + return self.generate_url(scheme, url, lang)
43 47 else
44 48 url = self.lang_attributes(ADMIN_CONFIG['default_lang'], :url)
45 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 51 else
48 52 ''
49 53 end
... ... @@ -63,7 +67,7 @@ module Kanjai
63 67 loop do
64 68 current_page_url = current_page.lang_attributes(lang, :url)
65 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 71 break if current_page.parent.nil?
68 72 current_page = current_page.parent
69 73 end
... ... @@ -126,6 +130,36 @@ module Kanjai
126 130 end
127 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 163 def self.default_public_page_url(scheme)
130 164 page = Page.where(private_flag: false, root_page: true).first
131 165 if page
... ...
1 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 26 </urlset>
\ No newline at end of file
... ...
... ... @@ -47,8 +47,8 @@ module Kanjai
47 47 when 'text'
48 48 content = item[:source].to_s.strip
49 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 52 end
53 53 subparts << content
54 54 when 'repeat'
... ... @@ -124,8 +124,8 @@ module Kanjai
124 124
125 125 page_collection.each do |page|
126 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 130 self.menu_generator(session, domain, next_level[:children], subparts, nil, false, page)
131 131 else
... ... @@ -137,8 +137,8 @@ module Kanjai
137 137 end
138 138 else
139 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 142 end
143 143 end
144 144
... ...
1 1 module Kanjai
2   - VERSION = "0.0.349"
  2 + VERSION = "0.0.350"
3 3 end
... ...