summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-08-06 04:17:29 +0200
committererdgeist <erdgeist@erdgeist.org>2026-08-06 04:17:29 +0200
commitcb16e35c5f9fc93a3382391de496153515cf05ca (patch)
tree4833c790deb177d93262ee4ac3f43899a48a44ca
parent0d91c5a4aa47fa34e0dfe6742b94aa23d59544bc (diff)
Preload page titles for the sitemap, and order containers before leaves
-rw-r--r--app/controllers/nodes_controller.rb6
-rw-r--r--app/helpers/nodes_helper.rb14
-rw-r--r--app/models/concerns/nested_tree.rb4
-rw-r--r--config/locales/de.yml1
-rw-r--r--config/locales/en.yml1
5 files changed, 16 insertions, 10 deletions
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
256 256
257 def sitemap 257 def sitemap
258 @sitemap = Node.root.self_and_descendants_ordered_with_level 258 @sitemap = Node.root.self_and_descendants_ordered_with_level
259
260 ActiveRecord::Associations::Preloader.new(
261 :records => @sitemap.map(&:first),
262 :associations => [{ :head => :translations }, { :draft => :translations }]
263 ).call
264
259 @sitemap_descendant_counts = descendant_counts_for(@sitemap) 265 @sitemap_descendant_counts = descendant_counts_for(@sitemap)
260 end 266 end
261 267
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 @@
1module NodesHelper 1module NodesHelper
2 2
3 def title_for_node node 3 def title_for_node node
4 if node.head 4 return node.head.title if node.head&.title.present?
5 node.head.title 5 return node.draft.title if node.draft&.title.present?
6 else 6
7 if not node.draft or not node.draft.title 7 logger.error "Missing title in node #{node.id}"
8 logger.error "Missing title in node #{node.id}" 8 t("admin.common.no_title")
9 return "NO TITLE"
10 end
11 node.draft.title
12 end
13 end 9 end
14 10
15 def truncated_title_for_node node 11 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
61 def self_and_descendants_ordered_with_level 61 def self_and_descendants_ordered_with_level
62 nodes = [self] + descendants.to_a 62 nodes = [self] + descendants.to_a
63 children_by_parent = nodes.group_by(&:parent_id) 63 children_by_parent = nodes.group_by(&:parent_id)
64 children_by_parent.each_value { |list| list.sort_by!(&:id) } 64 children_by_parent.each_value do |list|
65 list.sort_by! { |n| [children_by_parent.key?(n.id) ? 0 : 1, n.slug.to_s] }
66 end
65 67
66 result = [] 68 result = []
67 visit = ->(node, level) do 69 visit = ->(node, level) do
diff --git a/config/locales/de.yml b/config/locales/de.yml
index fe40e507..591b45d1 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -377,6 +377,7 @@ de:
377 force_render: "Vorschau neu rendern" 377 force_render: "Vorschau neu rendern"
378 revisions: "Revisionen" 378 revisions: "Revisionen"
379 explain: "Was macht das?" 379 explain: "Was macht das?"
380 no_title: "kein Titel"
380 "yes": "ja" 381 "yes": "ja"
381 "no": "nein" 382 "no": "nein"
382 columns: 383 columns:
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 55c0abc5..f8a7144c 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -325,6 +325,7 @@ en:
325 force_render: "Force preview render" 325 force_render: "Force preview render"
326 revisions: "revisions" 326 revisions: "revisions"
327 explain: "What does this do?" 327 explain: "What does this do?"
328 no_title: "no title"
328 "yes": "yes" 329 "yes": "yes"
329 "no": "no" 330 "no": "no"
330 columns: 331 columns: