gpt4 book ai didi

haskell - 如何更改 IHP 应用程序中的 <title>?

转载 作者:行者123 更新时间:2023-12-05 02:04:28 26 4
gpt4 key购买 nike

我看到 <title>App</title>硬编码在 defaultLayout 中在 Web/View/Layout.hs 和 Web/View/Context.hs 中有

    let viewContext = ViewContext {
requestContext = ?requestContext,
user = currentUserOrNothing,
flashMessages,
controllerContext = ?controllerContext,
layout = let ?viewContext = viewContext in defaultLayout
}

但是如何为特定 View 使用不同的函数? html View 类的函数似乎没有返回新的上下文,只是为页面的一部分返回一个新的 html。

最佳答案

明白了:在 View 类中有一个 beforeRender 函数,您可以在其中设置它,例如

data ShowView = ShowView { targets :: [Include "comments" Post], postTitle :: Text }

instance View ShowView ViewContext where
beforeRender (context, view) = (context { layout = myLayout (postTitle view) }, view)
html ShowView { .. } = [hsx| … |]

(并在Web/Controller/Posts.hs中设置postTitle),然后更改Web/View/Layout.hs做

defaultLayout :: Html -> Html
defaultLayout = myLayout "App"

myLayout :: Text -> Html -> Html
myLayout title inner = H.docTypeHtml ! A.lang "en" $ [hsx|
<head>
{metaTags}

{stylesheets}
{scripts}

<title>{title}</title>
</head>
<body>
<div class="container mt-4">
{renderFlashMessages}
{inner}
</div>
</body>
|]

关于haskell - 如何更改 IHP 应用程序中的 &lt;title&gt;?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64295142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com