【问题标题】:Categorize webpages for layout and CSS purposes in Rails在 Rails 中为布局和 CSS 目的对网页进行分类
【发布时间】:2012-11-06 18:29:16
【问题描述】:

我有很多不同的网页,但大多数都属于 6 或 7 类网页中的一种。对于这些类别的网页中的每一个,我的外观和感觉都略有不同,例如不同的背景颜色/图像。我在views/layout/application.html.erb 中有以下内容:

<header class="sub<% if content_for?(:page_type) %> <%= yield(:page_type) %><% end %>">

在每一个视图中,我都有:

<% content_for :page_type, 'information' %>

但是对每个网页都这样做真的很痛苦,当我想改变周围的东西时,我总是不得不搞乱这些(我有很多页面)。所以,我想只使用一个变量:

<header class="sub<%= @page_type ? ' ' + @page_type : '' %>">

对于视图:

<% @page_type = 'information' %>

优点是我可以在控制器中执行before_filter :set_page_type 并为它控制的所有视图设置一次页面类型(很大帮助)。

也许对我来说最好的办法就是使用 URL 的第一个文件夹作为网页的类别。我将不得不重组 URL,但无论如何这样做可能是有意义的。我确实有一些必须保留的顶级页面。

这一定是相当普遍的情况,对大多数页面进行分类并在布局中使用该分类的最佳方法是什么?

【问题讨论】:

    标签: css ruby-on-rails ruby-on-rails-3 layout ruby-on-rails-3.2


    【解决方案1】:

    我通常在 body 类中使​​用 helper —— 像这样:

    def body_class(c = nil)
      @body_class ||= [controller.controller_name]
      @body_class << c
      @body_class.flatten.compact.uniq.join(" ")
    end
    

    这将默认包含控制器名称(您也可以包含操作等。 然后我根据需要在视图中调用这个助手,例如

    <% body_class "bar" %>
    

    由于帮助器总是返回一个类字符串,因此您可以在布局中调用相同的帮助器(我使用body 标签),可能不带参数:

    <body class="<%= body_class %>">
    

    这将在前面的示例中为名为 FoosController 的控制器呈现以下内容:

    <body class="foos bar">
    

    如果您在例如应用程序控制器并使用helper_method 使其可用于视图,这应该可以满足您的需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-08
      • 2023-03-28
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 2018-07-04
      相关资源
      最近更新 更多