Haskell {pageBody pc}来自哪里?
在default-layout-wrapper.hamlet文件中,有^{pageBody pc}允许我嵌入正文内容。我可以在Posith.HS文件中找到PC部分。但是pageBody是在哪里构造的(在哪个文件中)?Haskell {pageBody pc}来自哪里?,haskell,yesod,Haskell,Yesod,在default-layout-wrapper.hamlet文件中,有^{pageBody pc}允许我嵌入正文内容。我可以在Posith.HS文件中找到PC部分。但是pageBody是在哪里构造的(在哪个文件中)? 这个变量#{pageTitle pc}也有同样的问题。stackage.org上的Hoogle是这些问题的绝佳资源: pageBody是在名为pc的“变量”上调用的函数。正如Michael所说,pageBody是标准Yesod库的一部分。当whamlet引擎处理页面模板时(这就是^
这个变量#{pageTitle pc}也有同样的问题。stackage.org上的Hoogle是这些问题的绝佳资源:
pageBody是在名为pc的“变量”上调用的函数。正如Michael所说,pageBody是标准Yesod库的一部分。当whamlet引擎处理页面模板时(这就是^{…}所做的),将对其进行评估。如果您确实使用YesSOD创建了一个脚手架站点,请花一些时间阅读自动生成的处理函数-您将看到模板是如何处理的。简化类型:
data PageContent url = PageContent
{ pageTitle :: Html
, pageHead :: HtmlUrl url
, pageBody :: HtmlUrl url
}
widgetToPageContent :: Widget -> Handler (PageContent url)
。。。
和代码示例:
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
import Yesod
data App = App
mkYesod "App" [parseRoute|
/ HomeR GET
|]
myLayout :: Widget -> Handler Html
myLayout widget = do
pc <- widgetToPageContent $ do
widget
toWidget [lucius| body { font-family: arial } |]
withUrlRenderer
[hamlet|
$doctype 5
<html>
<head>
<title>#{pageTitle pc}
<meta charset=utf-8>
^{pageHead pc}
<body>
<article>
^{pageBody pc}
|]
instance Yesod App where
defaultLayout = myLayout
getHomeR :: Handler Html
getHomeR = defaultLayout
[whamlet|
<p>Some text!
|]
main :: IO ()
main = warp 3000 App
{-#语言重载字符串}
{-#语言准语言}
{-#语言模板haskell}
{-#语言类型族{-}
进口紫草
数据应用程序=应用程序
mkYesod“应用程序”[parseRoute]|
/荷马
|]
myLayout::小部件->处理程序Html
myLayout widget=do
这并不能回答这个问题。是的,这将对用户的未来有极大的帮助,但您至少应该添加pageBody
的当前位置。
defaultLayout widget = do
master <- getYesod
mmsg <- getMessage
-- We break up the default layout into two components:
-- default-layout is the contents of the body tag, and
-- default-layout-wrapper is the entire page. Since the final
-- value passed to hamletToRepHtml cannot be a widget, this allows
-- you to use normal widget features in default-layout.
pc <- widgetToPageContent $ do
addStylesheet $ StaticR css_bootstrap_css
$(widgetFile "default-layout")
withUrlRenderer $(hamletFile "templates/default-layout-wrapper.hamlet")