Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell {pageBody pc}来自哪里?_Haskell_Yesod - Fatal编程技术网

Haskell {pageBody pc}来自哪里?

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引擎处理页面模板时(这就是^

在default-layout-wrapper.hamlet文件中,有^{pageBody pc}允许我嵌入正文内容。我可以在Posith.HS文件中找到PC部分。但是pageBody是在哪里构造的(在哪个文件中)?
这个变量#{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")