Как я могу настроить макет активного администратора?

Мне нужно настроить макет активного администратора, но как я могу это сделать?


person zolter    schedule 17.09.2011    source источник


Ответы (5)


Когда представление определено в геме И в приложении rails, обслуживается представление, определенное в приложении Rails. Это логический приоритет.

Поэтому, если вам нужно переопределить все или некоторые активные представления администратора, вам придется скопировать их в свое приложение и изменить по своему усмотрению.

person apneadiving    schedule 17.09.2011
comment
Хотя где я могу их найти? Я ищу в git AGES и просто не могу найти! - person Mexxer; 06.06.2012
comment
То же самое здесь @Mexxer; Я потратил довольно много времени на то, чтобы правильно переопределить это. - person jackyalcine; 27.06.2012

Активный макет администратора на самом деле не определяется как файл макета, а генерируется программно. Таким образом, размещение пользовательского макета в каталоге макетов фактически не заменит макет по умолчанию.

Тем не менее, вы можете «обезьянить» или «утиным ударом» активные методы макета администратора внутри вашего приложения.

Следующее добавит в заголовок таблицу стилей, специфичную для ie:

module ActiveAdmin
  module Views
    module Pages
      class Base < Arbre::HTML::Document

        alias_method :original_build_active_admin_head, :build_active_admin_head unless method_defined?(:original_build_active_admin_head)

        def build_active_admin_head
          within @head do
            meta :"http-equiv" => "Content-type", :content => "text/html; charset=utf-8"
            insert_tag Arbre::HTML::Title, [title, active_admin_application.site_title].join(" | ")
            active_admin_application.stylesheets.each do |path|
              link :href => stylesheet_path(path), :media => "screen", :rel => "stylesheet", :type => "text/css"
            end
            active_admin_application.javascripts.each do |path|
              script :src => javascript_path(path), :type => "text/javascript"
            end
            text_node csrf_meta_tag
            text_node "<!--[if lt IE 7]>
            <link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"admin_ie7.css\ />
            <![endif] -->".html_safe
          end
        end

      end
    end
  end
end

Явно некрасивое решение.

person Toby Hede    schedule 28.02.2012
comment
@jalcine я добавляю это в инициализатор - person Toby Hede; 28.07.2012
comment
Так бы добавил: module ActiveAdmin module Views module Pages layout :application end end end А я бы хорошо? - person jackyalcine; 29.07.2012
comment
Я знаю, что немного опоздал, чтобы присоединиться к вечеринке, но вот каталог git со всеми определенными представлениями: github.com/gregbell/active_admin/tree/master/lib/active_admin/ - person omninonsense; 09.03.2013
comment
@TobyHede: утиный удар? - person dax; 21.08.2015
comment
@dax утиный удар - person New Alexandria; 19.01.2016
comment
ActiveAdmin версии 1.4 и выше должен заменить @head на head. Итак, within(head) do ... end. - person Hari Gopal; 10.12.2018

Может быть, ActiveAdmin уже предоставляет более удобный способ сделать это? Я не знаю. Однако здесь был бы пример более чистого патча для этой ситуации, в моем примере, чтобы добавить драгоценные камни webpacker javascript_pack_tag в мою область администратора.

module MyApp
  module ActiveAdmin
    module Views
      module Pages
        module BaseExtension
          def build_active_admin_head
            super
            within @head do
              text_node(javascript_pack_tag('application'))
            end
          end
        end
      end
    end
  end
end

class ActiveAdmin::Views::Pages::Base < Arbre::HTML::Document
  prepend MyApp::ActiveAdmin::Views::Pages::BaseExtension
end
person trueunlessfalse    schedule 26.10.2017
comment
Это лучший ответ ИМО. Однако мы можем использовать менее подробный способ добавления модуля в начало: Феррандис/ - person François F; 07.03.2018

(Используя rails 5.1.4) Я попробовал здесь два решения, которые включали возню с библиотекой active_admin, и они у меня вообще не сработали. Я нашел свое решение в config/initializers/active_admin.rb. Я добавляю небольшое количество стилей начальной загрузки к макету по умолчанию. Что касается ссылки на таблицы стилей, javascripts и т. д., это было так же просто, как добавить это в мой active_admin.rb, как указано в комментариях:

  # == Register Stylesheets & Javascripts
  #
  # We recommend using the built in Active Admin layout and loading
  # up your own stylesheets / javascripts to customize the look
  # and feel.
  #
  # To load a stylesheet:
  #   config.register_stylesheet 'my_stylesheet.css'
  config.register_stylesheet 'https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css', { integrity: 'sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk', crossorigin: 'anonymous' }

Что касается редактирования сгенерированного макета, мне еще предстоит разобраться, но это можно сделать, по крайней мере, косвенно через JavaScript и включение этого javascipt в этот файл через

config.register_javascript 'active_admin_view_tweaks.js', { defer: true }

Я собираюсь редактировать атрибуты класса, чтобы мои страницы реагировали с помощью начальной загрузки, поэтому я мог бы следовать чему-то вроде эту статью от geeksforgeeks для редактирования страниц с помощью JavaScript после их загрузки.

Я не знаю, есть ли способ более непосредственного редактирования сгенерированного макета, но в некоторых случаях это должно работать.

person Ethan Groat    schedule 03.08.2020

Вы можете переопределить активный макет страницы администратора, поместив следующий код в файл config/intializers/active_admin.rb:

module AdminPageLayoutOverride
  def build_page(*args)
    within super do
      render "shared/your_custom_view_partial"
    end
  end
end

ActiveAdmin::Views::Pages::Base.send :prepend, AdminPageLayoutOverride

В приведенном выше примере у меня есть файл пользовательского представления в app/views/shared/_your_custom_view_partial.html.erb месте, и я добавляю его на все мои активные страницы администратора с помощью приведенного выше кода.

person K M Rakibul Islam    schedule 30.01.2021