代码之家  ›  专栏  ›  技术社区  ›  millisami

应用程序布局中的Rails条件提要栏

  •  5
  • millisami  · 技术社区  · 16 年前

    以下是我的应用程序布局文件

      .container_12.clearfix
      = render :partial => 'shared/flashes'
    
      .grid_8
        = render :partial => 'shared/search'        
        = yield
      .grid_4
        = yield(:sidebar)
    

    它必须是网格,一个用于内容,另一个用于侧边栏。 现在我正在创建一个登录页面,我不想在其中显示我的侧边栏(只显示一个网格)。 我可以简单地用.grid_12div创建新的布局作为单个网格。

    但这给我留下了两个应用程序布局。 如何使相同的应用程序布局成为产生侧边栏的条件?

    如果有侧边栏,就和上面一样 其他的只是一个网格,如下面的网格

      .container_12.clearfix
      = render :partial => 'shared/flashes'      
      .grid_12
        = render :partial => 'shared/search'        
        = yield
    
    2 回复  |  直到 14 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    您可以检查 :sidebar 存在并呈现侧边栏(如果为真)。 轨道2.3.5将具有 content_for? 方法。同时,你可以使用我的 Helperful 宝石。

    - if has_content?(:sidebar)
      .grid_8
        = render :partial => 'shared/search'        
        = yield
      .grid_4
        = yield(:sidebar)
    - else
      .grid_12
      = render :partial => 'shared/search'        
      = yield
    

    否则,可以假定:sidebar==false,然后没有sidebar。

      def sidebar(enable = true, &block)
        if enable
          content_for :sidebar, &block
        else
          @fullpage = true
        end
      end
    
      def fullpage?
        !!@fullpage
      end
    
    - if fullpage?
      .grid_12
      = render :partial => 'shared/search'        
      = yield
    - else
      .grid_8
        = render :partial => 'shared/search'        
        = yield
      .grid_4
        = yield(:sidebar)
    

    更新:

    如果您使用的是Rails 3.x,请检查 answer to a similar question 以获得正确的解决方案。上面的解决方案不适用于Rails 3。

        2
  •  0
  •   EmFi    16 年前

    为什么不使用基于控制器中的实例变量集的if条件呢?您的默认设置看起来应该用边栏呈现。因此,如果将@disable_sidebar设置为false或nil以外的任何值,那么下面的代码将只呈现不带侧边栏的情况。

    .container_12.clearfix
    = render :partial => 'shared/flashes'
    - unless @disable_sidebar
      .grid_8
        = render :partial => 'shared/search'        
        = yield
      .grid_4
        = yield(:sidebar)
    - else
      .grid_12
      = render :partial => 'shared/search'        
      = yield