diff options
| author | erdgeist <erdgeist@erdgeist.org> | 2026-08-06 04:17:29 +0200 |
|---|---|---|
| committer | erdgeist <erdgeist@erdgeist.org> | 2026-08-06 04:17:29 +0200 |
| commit | cb16e35c5f9fc93a3382391de496153515cf05ca (patch) | |
| tree | 4833c790deb177d93262ee4ac3f43899a48a44ca | |
| parent | 0d91c5a4aa47fa34e0dfe6742b94aa23d59544bc (diff) | |
Preload page titles for the sitemap, and order containers before leaves
| -rw-r--r-- | app/controllers/nodes_controller.rb | 6 | ||||
| -rw-r--r-- | app/helpers/nodes_helper.rb | 14 | ||||
| -rw-r--r-- | app/models/concerns/nested_tree.rb | 4 | ||||
| -rw-r--r-- | config/locales/de.yml | 1 | ||||
| -rw-r--r-- | config/locales/en.yml | 1 |
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 @@ | |||
| 1 | module NodesHelper | 1 | module 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: |
