今天继续上一节的开发

今天我们须要详细的开发一个图书馆站点,分为下面几个页面

  • / 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,然后在页面上引用。

引用代码很easy

<img src=@{StaticR logo_jpg}>

这里须要注意的是,yesod会将文件夹结构和.分隔符用_来替代

接下来在src的同级创建一个static文件夹,并copylogo.jpg到当中

然后我们在routes结构中添加对于static的声明/static StaticR Static getStatic,当中的getStatic是说明从何处存取static文件

我们须要全局声明static的文件夹,在全局范围上添加$(staticFiles "static")

改动App的声明 data App = App{getStatic::Static}

改动App的构造方式,添加注入static文件夹的方式

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} #userC∑lick>用户设置

这样通过使用$if $else标签,我们就差别了用户存在和不存在的状态

Haskell之Yesod开发–边踩坑边开发(2)的更多相关文章

  1. 微信内置浏览器WebApp开发,踩坑 · Issue #31 · maxzhang/maxzhang.github.com · GitHub

    最近花6天时间完成了一个七夕的小活动,是一个简单的WebApp.由于我前期对面向微信的Web开发评估不足,导致开发过程十分艰难.写这篇文章总结下,惊醒自己未来不要再犯这样的错误. 问题: 1. 有些比 ...

  2. ubuntu搭建开发环境踩坑实录

    谨以此文,记录和ubuntu系统不死不休的搏斗过程,后续待补. 1.双系统安装,windows采用uefi模式安装(优启通可制作uefi的win10安装盘),ubuntu不要划分boot区,而应该划分 ...

  3. VScode+Flutter 开发继续踩坑

    运行慢解决方法1:修改build.gradle,注释掉jcenter(),google().使用阿里的镜像.原因是jcenter google库无法访问到导致的问题.虽然我有万能的爬墙工具,开启全局代 ...

  4. web APP 开发之踩坑手记

    屏蔽输入框怪异的内阴影 -webkit-appearance:none 禁止自动识别电话和邮箱 <meta content="telephone=no" name=" ...

  5. iOS开发遇到的坑之一: 开发遇见如下错误:Undefined symbols for architecture arm64

    博客处女作,写得不好望谅解! “for architecture arm64”就是说没有支持arm64,在Build settings里architecture相关的几项需要配置正确 在最近升级coc ...

  6. react学习 | 踩坑指南

    react样式模块化的"omit -loader"坑 众所周知 react样式的模块化(css modules) 是自己模块中写自己的css,与其他模块互补影响,解决了命名冲突和全 ...

  7. Java 开发中如何正确踩坑

    为什么说一个好的员工能顶 100 个普通员工 我们的做法是,要用最好的人.我一直都认为研发本身是很有创造性的,如果人不放松,或不够聪明,都很难做得好.你要找到最好的人,一个好的工程师不是顶10个,是顶 ...

  8. Android SDK 开发——发布使用踩坑之路

    前言 在 Android 开发过程中,有些功能是通用的,或者是多个业务方都需要使用的. 为了统一功能逻辑及避免重复开发,因此将该功能开发成一个 SDK 是相当有必要的. 背景 刚好最近自己遇到了类似需 ...

  9. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

随机推荐

  1. iOSUI基础——懒加载

    1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化 ...

  2. 64位操作系统下IIS报“试图加载格式不正确的程序”错误

    缘由:在64位操作系统下IIS发布32位的项目,报“项目依赖的dll无法读取,试图加载格式不正确的程序”错误. 原因:程序集之间的通讯要么全是64位环境下的,要么全是32位环境下的.不能混编访问.不然 ...

  3. Linux服务器指令

    1.查看cpu信息:/proc/cpuinfo2.查看内存信息:/prco/meminfo3.查看服务器版本信息:cat /etc/issue4.服务器系统位数:uname -a5.网卡信息:ifco ...

  4. 跨域的iframe自动调整高度(cross-domain iframe resizer)

    可以使用iframe-resizer项目地址: http://davidjbradshaw.github.io/iframe-resizer/演示地址: http://davidjbradshaw.c ...

  5. 想追赶.Net的脚步?Java面前障碍重重

    待到Java 8面世之时 .Net的进度时钟恐怕已经又走过了两到五年——届时微软做出的调整将使二者差距进一步拉大. 就在几周之前,我详细介绍了Java 8中值得期待的几大主要功能.不过当时我并没有提到 ...

  6. cxf框架使用(一)

    1.创建调用接口 @WebService public interface IQueryBusinessService { public @WebResult(name="QueryBusi ...

  7. JavaScript重复元素处理

    判断一个字符串中出现次数最多的字符,统计这个次数 //将字符串的字符保存在一个hash table中,key是字符,value是这个字符出现的次数 var str = "abcdefgadd ...

  8. CSS实现div居中

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. MySql存储过程—3、变量

    1.变量的定义 在Mysql里面可以像我们写代码中一样定义变量来保持中间结果,看下面的格式: DECLARE variable_name datatype(size) DEFAULT default_ ...

  10. phpinfo.php

    ---恢复内容开始--- apache中的配置不对 查看httpd.conf文件中是否有: AddType ...... AddType application/x-httpd-php .php -- ...