module Cmor::Seo module Frontend # Example: # # # app/controllers/application_controller.rb # class ApplicationController < ActionController::Base # view_helper Cmor::Seo::Frontend::ApplicationViewHelper, as: :seo_helper # end # class ApplicationViewHelper < Rao::ViewHelper::Base def render_meta_tags item = find_item if item.present? @meta_tags = item.meta_tags.published render meta_tags: @meta_tags end end private def find_item if item = find_item_by_path(c.request.path) return item end if c.respond_to?(:resource_class) && c.instance_variable_get(:@resource).nil? raise "not implemented" return end if c.respond_to?(:resource_class) && c.instance_variable_get(:@resource).present? resource = c.instance_variable_get(:@resource) return Cmor::Seo::Item.where(resource_type: resource.class.name, resource_id: resource.id).published.first end if c.controller.class.name == "Cmor::Cms::PageController" && c.params[:page] return find_item_by_page(c.params[:page]) end end def find_item_by_page(page) page = Cmor::Cms::Page.where(pathname: "/#{page.split('/')[0..-2].join('/')}", basename: page.split('/').last, locale: I18n.locale, format: :html).first Cmor::Seo::Item.where(resource_type: page.class.name, resource_id: page.id).published.first end def find_item_by_path(path) Cmor::Seo::Item.where(path: path).published.first end end end end