From a986b1f2b5676624f02373cb54eb3b81b18f3f79 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Thu, 20 Aug 2026 19:39:39 +0200 Subject: Add banner render logic --- app/controllers/content_controller.rb | 1 + app/models/node.rb | 11 +++++++++++ app/models/page.rb | 17 ++++++++--------- app/views/layouts/application.html.erb | 3 +++ public/stylesheets/ccc.css | 6 ++++++ 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/app/controllers/content_controller.rb b/app/controllers/content_controller.rb index debb69b9..8a25f8f7 100644 --- a/app/controllers/content_controller.rb +++ b/app/controllers/content_controller.rb @@ -19,6 +19,7 @@ class ContentController < ApplicationController :status => @page.redirect_status) end + @banners = Node.current_banners.to_a render( :template => @page.valid_template, :layout => true diff --git a/app/models/node.rb b/app/models/node.rb index ef981a97..8f59de43 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -632,6 +632,17 @@ class Node < ApplicationRecord .distinct end + def self.current_banners + parent = Node.find_by(:unique_name => CccConventions::BANNER_PARENT_NAME) + return Node.none unless parent + + parent.children + .joins(:head) + .where("pages.published_at IS NULL OR pages.published_at <= ?", Time.now) + .order("pages.published_at DESC") + .includes(:head => { :related_assets => :asset }) + end + # This one is for admin-only views, where finding a draft is the point. # Substring match on whichever of head/draft is present. def self.editor_search(term) diff --git a/app/models/page.rb b/app/models/page.rb index 91b7e975..679a4aff 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -327,17 +327,16 @@ class Page < ApplicationRecord end end - def redirect_target - return nil if redirect.blank? - - if redirect_node_id.present? - return nil unless redirect_node&.head - return RedirectTarget.new(redirect_node, nil) + def link_target + if redirect_node_id.present? && redirect_node&.head + RedirectTarget.new(redirect_node, nil) + elsif external_url.present? + RedirectTarget.new(nil, external_url) end + end - return RedirectTarget.new(nil, external_url) if external_url.present? - - nil + def redirect_target + redirect.present? ? link_target : nil end def redirect_status diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 756b4bdd..55cb4e34 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -64,6 +64,9 @@ <%= calendar %>
+ <% if @banners&.any? %> + <%= render "content/banner", :banner => @banners.first %> + <% end %> <%= yield :layout %>