Haskell之Yesod開發–邊踩坑邊開發(2)

今天繼續上一節的開發
今天咱們需要詳細的開發一個圖書館站點,分爲下面幾個頁面php

  • / HomeR GET 主頁
  • /login LoginR GET 用戶登陸頁面
  • /library LibraryR GET 圖書館介紹頁面
  • /booklist BookListR GET 圖書列表頁面
  • /book/#Integer BookR GET 詳細圖書頁面
  • /user/#Integer UserR GET 詳細用戶頁面

首先咱們簡單完畢HomeRLibraryR的頁面(詳細代碼省略,你們本身完畢)。
假設要作一個站點,必要的圖片是不可或缺的。咱們想在LibraryR中放置一個Logo圖標。所以咱們需要像一般的web開發框架那樣。在一個詳細文件夾下存放logo.jpg,而後在頁面上引用。web


引用代碼很easymarkdown

<img src=@{StaticR logo_jpg}>

這裏需要注意的是,yesod會將文件夾結構和.分隔符用_來替代
接下來在src的同級建立一個static文件夾,並copylogo.jpg到當中
而後咱們在routes結構中添加對於static的聲明/static StaticR Static getStatic,當中的getStatic是說明從何處存取static文件框架

咱們需要全局聲明static的文件夾,在全局範圍上添加$(staticFiles "static")spa

改動App的聲明 data App = App{getStatic::Static}code

改動App的構造方式,添加註入static文件夾的方式xml

main = do
    s@(Static settings) <- static "static"
    wrap 3000 $ App s

這樣就可以讀入static文件夾和當中的文件了圖片

首頁上的內容你們本身構造,在這裏咱們來講明一下怎樣作一個帶參數的連接。路由

咱們已經聲明瞭UserR路由。這個路由帶有一個用戶ID開發

getHomeR :: Handler Html
getHomeR = do
    ...
    let userid = -1 :: Integer
    ...

在頁面上咱們但願經過該ID的不一樣值來渲染節點

$if (userid == -1) <label> $else <a href=@{UserR userid} #userClick>用戶設置

這樣經過使用$if $else標籤,咱們就差異了用戶存在和不存在的狀態

相關文章
相關標籤/搜索