2016-04-16 6 views
1

Ich habe eine Servant-Anwendung, der ich einige HTML-Seiten mit einer gemeinsamen Master/Layout-Seite hinzufügen möchte. Welche html-template Bibliothek sollte ich für die Erstellung verwenden? Ich habe ein paar gesehen, aber noch nicht einen gefunden, der war:Was ist heutzutage eine anständige HTML-Vorlage/Layout-Bibliotheken?

  1. mehr oder weniger auf dem neuesten Stand

  2. die externen HTML-Dateien verwendet, anstatt ein HTML-Layout in Haskell Code beschreibt. Das heißt, ich habe nicht so etwas wie diese

    getHomeR = defaultLayout 
        [whamlet| 
         <h1>Welcome to the homepage 
         <p> 
          Feel free to visit the # 
          <a [email protected]{SubsiteR SubHomeR}>subsite 
          \ as well. 
        |] 
    
  3. verwenden möge einfach in meiner Diener Anwendung angeschlossen werden kann. Aber nicht nur zu einer Servant-App, später könnte ich Web-Apps in anderen Frameworks haben, also möchte ich diese Bibliothek auch mit diesen verwenden.

+0

Sie können externe Dateien mit Hamlet verwenden. Ich bin mir Lucid nicht so sicher. – Sibi

+0

@Sibi, in Hamlet habe ich nur das Gegenteil gesehen. Wie, hast du einen Link? – Jushiti

+0

Ich habe ein funktionierendes Beispiel in der Antwort hinzugefügt. Ich würde auch empfehlen, dass Sie dieses Kapitel durchgehen: http://www.yesodweb.com/book/shakespearean-templates – Sibi

Antwort

2

Hamlet unterstützt die Verwendung externer HTML-Vorlagendateien. Ein Beispiel Arbeits Code mit Servant:

data Person = Person { firstName :: String, lastName :: String } 
      deriving (Show, Eq, Generic) 

instance ToJSON Person 

instance ToMarkup [Person] where 
    toMarkup persons = showPersons persons 

    preEscapedToMarkup p = showPersons p 

people :: [Person] 
people = 
    [ Person "Isaac" "Newton" 
    , Person "Albert" "Einstein" 
    ] 

showPersons :: [Person] -> Html 
showPersons p = $(shamletFile "person.hamlet") 

type PersonAPI = "persons" :> Get '[HTML] [Person] 

-- HTML serialization of a list of persons 

personAPI :: Proxy PersonAPI 
personAPI = Proxy 

server :: Server PersonAPI 
server = return people 

app :: Application 
app = serve personAPI server 

serveApp :: IO() 
serveApp = run 8081 app 

Notiere die Funktion shamletFile. Code in der Vorlagendatei person.hamlet:

<body> 
    <p>Profile List page 
    $forall person <- p 
     <h1>#{firstName person} 

Entire Code mit vollen Importen und ghc Erweiterungen here.

+0

danke. Was ist das "$" in "$ (shamletFile" person.hamlet ")"? darin eine Standard-Haskell-Funktion? – Jushiti

+0

ok. mit Vorlage meine ich "Master-Layout". Das heißt, ich hätte ein Master-Template-Layout, in dem es ein HTML-Layout mit einer Kopf- und Fußzeile und einem Stub für den Inhalt beschreibt. Und alle anderen HTML-Seiten würden ihren eigenen Inhalt verwenden und einfügen, während sie die Kopf- und Fußzeile teilen. Wie kann ich das machen? Unterstützt Hamlet das? – Jushiti

+0

@Jushiti Sehen Sie dies: https://StackOverflow.com/Questions/36596601/using-Licius-Hamlet-Julius-in-Service – Sibi

Verwandte Themen