Как отобразить Html алгебраический тип данных в Yesod
Я пытаюсь использовать CKEditor в моем приложении Yesod. Данные из CKEditor возвращаются на сервер через Textarea, затем я сохраняю их как Html
в базе данных. Моя проблема в том, что я знаю, как отобразить алгебраический тип данных Html, как только я получу его из базы данных в обработчике. Я читал этот урок, но он будет отображать HTML только в виде большой длинной строки, а не в виде разметки.
Замечания: titleA
а также contextA
переменная, которую я хочу отобразить в article-local-display.contextA
это Html
алгебраический тип данных
PS: мне нужно преобразовать Html в деревню, чтобы сделать?
module Handler.Article where
import Import
import Data.Text (unpack)
import Data.Time (getCurrentTime)
import Data.String (fromString)
getArticleR :: Handler RepHtml
getArticleR = do
defaultLayout $ do
setTitle "Search For Article"
$(widgetFile "header")
$(widgetFile "article")
postArticleR :: Handler RepHtml
postArticleR = do
redirect ArticleR
getArticleLocalR :: Handler RepHtml
getArticleLocalR = do
articles <- runDB $ selectList ([] :: [Filter Article]) [Desc ArticleTime]
defaultLayout $ do
setTitle "Local Article"
$(widgetFile "header")
$(widgetFile "article-local")
getArticleLocalDisplayR :: ArticleId -> Handler RepHtml
getArticleLocalDisplayR articleId = do
article <- runDB $ get404 articleId
let titleA = articleTitle article
contextA = articleContext article
defaultLayout $ do
setTitle "Article"
$(widgetFile "header")
$(widgetFile "article-local-display")
getArticleLocalCreateR :: Handler RepHtml
getArticleLocalCreateR = do
defaultLayout $ do
setTitle "Create article"
addScript $ StaticR ckeditor_ckeditor_js
$(widgetFile "header")
$(widgetFile "article-local-create")
postArticleLocalCreateR :: Handler RepHtml
postArticleLocalCreateR = do
articleForm <- runInputPost $ ArticleForm <$> ireq textField "title" <*> ireq textareaField "editor1"
now <- liftIO getCurrentTime
let titleA = title articleForm
html = toHtml $ unTextarea $ context articleForm
_ <- runDB $ insert $ Article titleA html now
redirect ArticleLocalR
data ArticleForm = ArticleForm {
title :: Text,
context :: Textarea
}
deriving Show
файл моделей:
Article
title Text
context Html
time UTCTime
deriving
Статья-местный display.hamlet
<h1>#{titleA}
<article>#{contexA}
1 ответ
Поэтому я изменил контекст с HTML на текст.
Article
title Text
context Text
time UTCTime
deriving
Потом добавил preEscapedText
при использовании значения.
let contextA = preEscapedText $ articleContext article
Теперь он отображается правильно.