如何在Middleman中生成导航?

Rob*_*des 9 ruby navigation middleman

我只是习惯了Middleman和Ruby.生成具有活动状态的导航的最佳方法是什么?

mm2*_*001 9

在当前版本的MM(2.x,尽管3.0已经关闭)中,您可以通过config.rb导航文件中的以下添加和一些调整来实现.这是一个工作版本,以防我遗漏一些关键位:

首先创建一个辅助函数:

helpers do
  def nav_active(page)
    @page_id == page ? {:class => "Active"} : {}
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,在导航栏包含文件(在这种情况下是一个haml文件)中,您可以使用nav_active帮助程序,如下所示:

#HeaderNavigationBar
  %ul
    %li{nav_active("index")}= link_to t('top_navigation.home'), t('paths.index')
    %li{nav_active("pricing")}= link_to t('top_navigation.pricing'), t('paths.pricing')
    %li{nav_active("faq")}= link_to t('top_navigation.faq'), t('paths.faq')
Run Code Online (Sandbox Code Playgroud)

最终结果是,在为此页面构建页面时,将"Active"类添加到导航栏中的链接.即如果页面是名为"index"的文件,那么@page_id将是"index",该链接将具有Active主题.

要完成该示例,以下是定义active 的scss样式partial的摘录:

&.Active {
  font-weight: bold;
}
Run Code Online (Sandbox Code Playgroud)

在头文件的更高版本中,我们实际上在活动页面上删除了链接.它看起来像 - 可以清楚地整理,但FWIW:D:

%li{nav_active("index")}
  -if "index" == @page_id
    = t('top_navigation.home')
  -else
    = link_to t('top_navigation.home'), root()
  ... (etc)
Run Code Online (Sandbox Code Playgroud)

请注意,所有t('stuff')都与i18n的转换函数有关.你可以忽略它.我不想通过尝试删除它们来使语法错误.

希望这会有所帮助 - 另请参阅http://forum.middlemanapp.com/上的论坛.