Мне нужно настроить макет активного администратора, но как я могу это сделать?
Как я могу настроить макет активного администратора?
Ответы (5)
Когда представление определено в геме И в приложении rails, обслуживается представление, определенное в приложении Rails. Это логический приоритет.
Поэтому, если вам нужно переопределить все или некоторые активные представления администратора, вам придется скопировать их в свое приложение и изменить по своему усмотрению.
Активный макет администратора на самом деле не определяется как файл макета, а генерируется программно. Таким образом, размещение пользовательского макета в каталоге макетов фактически не заменит макет по умолчанию.
Тем не менее, вы можете «обезьянить» или «утиным ударом» активные методы макета администратора внутри вашего приложения.
Следующее добавит в заголовок таблицу стилей, специфичную для 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
Явно некрасивое решение.
module ActiveAdmin module Views module Pages layout :application end end end
А я бы хорошо?
- person jackyalcine; 29.07.2012
@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
(Используя 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 после их загрузки.
Я не знаю, есть ли способ более непосредственного редактирования сгенерированного макета, но в некоторых случаях это должно работать.
Вы можете переопределить активный макет страницы администратора, поместив следующий код в файл 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
месте, и я добавляю его на все мои активные страницы администратора с помощью приведенного выше кода.