2012-11-12 52 views
7

我现在正在与Yesod框架一起玩耍,并认为制作kindda小型CMS将是一个不错的项目。如何实现defaultLayout以外的布局

目前我正在努力如何实现另一个布局比defaultLayout。比如说,对于CMS的管理区域,您将拥有一个与defaultLayout完全不同的adminLayout。

有没有办法“复制”defaultLayout,以及如何? - 或者我应该采取另一种方法吗?

而且,我是相当新的都耶索德和Haskell,但我嚼我的方式,通过它:)

编辑:

正如你可能会看到,我结束了回答我的问题。这就是说,如果有人有更好的方法去解决这个问题,我会很乐意接受他们的问题。

回答

13

经过一位超级绅士的帮助[1],发生了一个小的顿悟。对于未来的Google希望做同样的事情,我将简要地解释所有的花:

我只是把这个在我需要它在处理程序,所有你需要的是输入以下内容:

import Yesod.Default.Config (appExtra) 

然后定义adminLayout为

adminLayout :: Widget -> Handler Html 
adminLayout widget = do 
    master <- getYesod 
    mmsg <- getMessage 
    pc <- widgetToPageContent $ do 
     $(combineStylesheets 'StaticR 
      [ css_normalize_css 
      , css_bootstrap_css 
      ]) 
     $(combineScripts 'StaticR 
      [ js_jquery_js 
      , js_bootstrap_min_js 
      ]) 
     $(widgetFile "admin-layout") 
    giveUrlRenderer $(hamletFile "templates/admin-layout-wrapper.hamlet") 

那么你可以使用它,你会使用defaultLayout。希望这会有所帮助,因为我长时间盯着错误 - ' - '...

[1] https://groups.google.com/forum/?fromgroups=#!topic/yesodweb/9KpfYBJBwJE