Showing
6 changed files
with
72 additions
and
13 deletions
| ... | ... | @@ -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 | ... | ... |