2012-11-12 12 views
7

Ich spiele gerade mit dem Yesod-Framework herum und dachte mir, dass die Erstellung eines kleinen CMS ein gutes Projekt wäre.Wie implementiere ich andere Layouts als defaultLayout

Im Moment kämpfe ich mit wie man ein anderes Layout als das defaultLayout implementieren würde. Angenommen, für den Admin-Bereich des CMS hätten Sie ein adminLayout, das sich sehr von dem StandardLayout unterscheidet.

Gibt es eine Möglichkeit, das defaultLayout zu "replizieren", und wie? - Oder sollte ich einen anderen Ansatz wählen?

Auch bin ich ziemlich neu in beiden Yesod und Haskell, aber meine Art und Weise bin Kauen durch

EDIT :):

Wie Sie sehen können, ich am Ende meine eigene Frage zu beantworten. Dies gesagt, wenn jemand einen besseren Weg hat, dies zu tun, werde ich mehr als glücklich sein, ihre Frage zu akzeptieren.

Antwort

13

Nach etwas Hilfe von einem super netten Gentleman [1], trat eine kleine Epiphanie auf. Für zukünftige Googler, das Gleiche zu tun suchen, dann stelle ich kurz alle es dauerte:

ich dies nur in der Prozedur setzen, dass ich es in benötigt, ist alles, was Sie brauchen folgendes zu importieren:

import Yesod.Default.Config (appExtra) 

und dann definieren die adminLayout als

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") 

dann können Sie es verwenden, wie Sie verwenden würde defaultlayout. Hoffe, das hilft, weil ich mich blinder bei den Fehlern eine lange Zeit -.- anstarrte '...

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