Как изменить элементы CSS в HAML в зависимости от того, какая страница вызывает контент?

0

Я - младенец, когда речь заходит о Ruby и Rails, и все еще нужно изучать все, но у меня есть один маленький предмет, с которым мне нужна помощь сегодня.

Я работаю над заголовком веб-сайта, который использует HAML, и мне нужно изменить имя класса <div> на основе страницы, которая его использует.

Вот вопрос:

Если это приветствуется.html.haml, мне нужен div в header.html.haml:

.navbar.navbar-inverse.navbar-fixed-top{:role => "navigation"}

Для всех других страниц мне нужен тот же самый div в header.html.haml:

.navbar.navbar-inverse.navbar-static-top{:role => "navigation"}

Я надеялся использовать что-то вроде:

    - if <PAGE IS> == 'welcome.html.haml'

    .navbar.navbar-inverse.navbar-fixed-top{:role => "navigation"}

    - else

    .navbar.navbar-inverse.navbar-static-top{:role => "navigation"}

Я просто не знаю, какое условие я могу ему дать. Мне нужна помощь с частью <PAGE IS>.

Или, если есть более простое решение, я все уши.

РЕДАКТИРОВАТЬ:

Вот что я пробовал, но получаю ошибки повсюду:

- if controller.action_name == 'welcome'
.navbar.navbar-inverse.navbar-fixed-top{:role => "navigation"}
  .container
- else
.navbar.navbar-inverse.navbar-static-top{:role => "navigation"}
  .container

ДРУГОЕ ИЗМЕНЕНИЕ:

Теги:
haml

2 ответа

0
Лучший ответ

Вы можете получить текущий контроллер и действие с помощью параметров:

if params[:controller] == 'home' && params[:action] == 'welcome'
   ...
end

РЕДАКТИРОВАТЬ:

Другое решение - передать параметр вашему заголовку. В вашем welcome.html.haml

= render 'header', navbar: :static

И в '_header.html.haml':

<div class="navbar navbar-inverse navbar-<%= local_assigns[:navbar] || 'fixed' %>-top" role="navigation">

ДРУГОЕ ОБНОВЛЕНИЕ:

Конечно, если вы не создаете заголовок в макете, то это совершенно не имеет смысла.

Другим способом сделать это может быть метод content_for.

#'welcome.html.haml'
content_for(:navbar_class) { 'fixed' }

#'_header.html.haml'
<div class="navbar navbar-inverse navbar-<%= content_for?(:navbar_class) ? yield :navbar_class : 'static' %>-top" role="navigation">
  • 0
    Спасибо, я только что отредактировал вопросы, чтобы уточнить, что страница всегда есть welcome.html.haml. Не уверен, что это изменит ваш ответ
  • 0
    Где бы я = render 'header', navbar: :static в welcome.html.haml?
Показать ещё 2 комментария
0

код haml. Это должно сделать это:

%div.navbar.navbar-inverse{(class: (params[:controller] == 'welcome' ? "navbar-fixed-top" : "navbar-static-top")}
  • 0
    Вот то, что у меня есть в настоящее время без логики: .navbar.navbar-inverse.navbar-fixed-top{:role => "navigation"} Нужно ли мне добавить свой ответ, чтобы он работал?
  • 0
    Я получаю эту ошибку, когда использую ваш код: Illegal nesting: nesting within a tag that already has content is illegal.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню