From cb16e35c5f9fc93a3382391de496153515cf05ca Mon Sep 17 00:00:00 2001 From: erdgeist Date: Thu, 6 Aug 2026 04:17:29 +0200 Subject: Preload page titles for the sitemap, and order containers before leaves --- app/controllers/nodes_controller.rb | 6 ++++++ app/helpers/nodes_helper.rb | 14 +++++--------- app/models/concerns/nested_tree.rb | 4 +++- 3 files changed, 14 insertions(+), 10 deletions(-) (limited to 'app') diff --git a/app/controllers/nodes_controller.rb b/app/controllers/nodes_controller.rb index 447d596d..5b919b1f 100644 --- a/app/controllers/nodes_controller.rb +++ b/app/controllers/nodes_controller.rb @@ -256,6 +256,12 @@ class NodesController < ApplicationController def sitemap @sitemap = Node.root.self_and_descendants_ordered_with_level + + ActiveRecord::Associations::Preloader.new( + :records => @sitemap.map(&:first), + :associations => [{ :head => :translations }, { :draft => :translations }] + ).call + @sitemap_descendant_counts = descendant_counts_for(@sitemap) end diff --git a/app/helpers/nodes_helper.rb b/app/helpers/nodes_helper.rb index 5884c8cd..48f44f8b 100644 --- a/app/helpers/nodes_helper.rb +++ b/app/helpers/nodes_helper.rb @@ -1,15 +1,11 @@ module NodesHelper def title_for_node node - if node.head - node.head.title - else - if not node.draft or not node.draft.title - logger.error "Missing title in node #{node.id}" - return "NO TITLE" - end - node.draft.title - end + return node.head.title if node.head&.title.present? + return node.draft.title if node.draft&.title.present? + + logger.error "Missing title in node #{node.id}" + t("admin.common.no_title") end def truncated_title_for_node node diff --git a/app/models/concerns/nested_tree.rb b/app/models/concerns/nested_tree.rb index befcdb38..87a94d23 100644 --- a/app/models/concerns/nested_tree.rb +++ b/app/models/concerns/nested_tree.rb @@ -61,7 +61,9 @@ module NestedTree def self_and_descendants_ordered_with_level nodes = [self] + descendants.to_a children_by_parent = nodes.group_by(&:parent_id) - children_by_parent.each_value { |list| list.sort_by!(&:id) } + children_by_parent.each_value do |list| + list.sort_by! { |n| [children_by_parent.key?(n.id) ? 0 : 1, n.slug.to_s] } + end result = [] visit = ->(node, level) do -- cgit v1.3