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标签,咱们就差异了用户存在和不存在的状态

相关文章
相关标签/搜索