2013-06-01 2 views
1

Я пытаюсь использовать CKEditor в своем приложении Yesod. Данные из CKEditor возвращаются на сервер через Textarea, затем я сохраняю его как Html в базе данных. Моя проблема заключается в том, что я знаю, как отображать Html-алгебраический тип данных, как только я получаю его из базы данных в обработчике. Я читал this учебник, но он будет отображать Html как большую длинную строку, а не как разметку.Как визуализировать тип алгебраических данных Html в Yesod

Примечание: titleA и contextA - это переменная, которую я хочу отобразить в статье-локальном дисплее. contextA is 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 

Теперь оно отображается правильно.