1. 程式人生 > >Haskell之Yesod開發–邊踩坑邊開發(2)

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

今天繼續上一節的開發
今天我們需要具體的開發一個圖書館網站,分為以下幾個頁面

  • / 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

,然後在頁面上引用。
引用程式碼非常簡單

<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
    [email protected](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標籤,我們就區別了使用者存在和不存在的狀態

相關推薦

HaskellYesod開發開發(2)

今天繼續上一節的開發 今天我們需要具體的開發一個圖書館網站,分為以下幾個頁面 / HomeR GET 主頁 /login LoginR GET 使用者登入頁面 /library LibraryR GET 圖書館介紹頁面 /booklist BookList

HaskellYesod開發開發(2.1)

按照書上第八章的內容,我們來建立一個表單。 程式碼無誤,但是有一點,預設的庫使用了Google的CDN。這在大區域網當然沒法用。我們來改造一下 首先我們要搞定自己的靜態資源(如果你有CDN,可以跳過這裡) 1.安裝yesod-static 安裝過程會提示有些庫找不到,可以一

快應用開發

校驗 未來 bug 失敗 作用 定義 無需 功能 com 前言 嘗試一款新的開發框架的時候勢必會遇見各種各樣的問題。可能因為一開始不熟悉文檔,導致配置錯誤,或是api使用錯誤。當然開發的時候我們也不能確認框架沒有問題,是否存在bug。所以在某些出錯的情況下,我們也許會不斷懷

HaskellYesod開發–簡單網站開發(三)

現在我們進入第五章的學習 首先複製P71頁的程式碼。這裡我們看到了很多新的東西,例如setTitle,toWidget,addScriptRemote,這些具體函式我們會在後面討論到。我們先複習一下前面的知識,來改寫一下現有的邏輯程式碼。 我們先增強一下網頁

HaskellYesod開發–簡單網站開發(五)

設定網站Host instance Yesod XXX where approot = ApprootStatic "http://static.example.comn/wiki" 注意: 使用ApprootStatic的時候,URL是不需

HaskellYesod開發–簡單網站開發(四)

Widget學習 複製P74頁的程式碼,來體驗一下toWidgetHead和toWidgetBody 複製P76頁的程式碼,我們來體驗一下如何組合widget 這段程式碼在我的電腦上會報錯。誰解決了請留個言 複製P77頁的程式碼,體驗一下newIden

微信小程序開發問題整理,web-view、openID、小程序支付等匯總

模板 www. 通過 file 微信小程序 ref 網絡請求 session保持 family 微信小程序開發過程中遇到的問題踩坑整理,內容包括web-view、openID、小程序支付、網絡請求等等一系列問題匯總,希望對大家能有一定幫助和啟發。 內容如下: 關於小程序

CentOS下Nvidia docker 2.0安裝教程&實錄

CentOS下Nvidia docker 2.0之安裝教程&踩坑實錄 前言 要求 1. GNU/Linux x86_64 with kernel version > 3.10 2. Docker >= 1.12

【新手須知】Spring Boot 2.0.0 + MyBatis + Shiro + Swagger 開發專案記錄

寫在前面 Swagger 2.8.0 Spring Boot 2.0.0.RELEASE Shiro 1.4.0 Mybatis 1.3.1 填坑 踩坑一: MyBatis xml檔案

微信內建瀏覽器WebApp開發

最近花6天時間完成了一個七夕的小活動,是一個簡單的WebApp。由於我前期對面向微信的Web開發評估不足,導致開發過程十分艱難。寫這篇文章總結下,驚醒自己未來不要再犯這樣的錯誤。 問題: 1、 有些比較老舊的手機不支援多個觸點,可能是硬體不支援,也可能是軟體問題。這並

百度小程式開發實戰--經歷

 文章列表rich-text的圖片寬度問題    效果如下    後端返回的資料格式為string,小程式對次採用了rich-text來識別傳入的html   rich-text推薦使用node的陣列模式,字串模式會影響解析速度(因

Android開發遇到的-----融雲2.8.+版本修改插件列表

rsa 圖片 項目需求 tex 顯示 根據 -- 移除 pre 簡介   融雲在2.8.+的時候,對輸入區域進行了重構,輸入區域整個為RongExtension,插件為RongExtension區域的Plugin模塊 List<IPluginModule&g

【echarts記錄】2.複選框+動態隱藏、顯示資料

第一節的例子裡我將ajax請求返回的所有資料都載入成了餅狀圖,但是實際應用中我們可能並不需要全部顯示,可能需要做一個多選框選擇需要的name再傳給後臺……然而我也不想修改sql。 於是就考慮在前端控制啦,後端只需要無腦一次查出全部的資料,讓前端折騰吧~使用者點哪裡我就顯示哪

問題定位 | Peronca Xtrabackup 8.0近日總結 - xtrabackup 2.4和8.0區別

[TOC] ---- ### 前言 近期在給 `radondb/xenon` 適配 percona xtrabackup 8.0時,遇到了一些問題,經過多日調研、嘗試終於解決,特此分享。 **版本資訊:** ``` Percona-Server 8.0.19-10 Percona-Xtrabackup

Android SDK 開發——釋出使用

前言 在 Android 開發過程中,有些功能是通用的,或者是多個業務方都需要使用的。 為了統一功能邏輯及避免重複開發,因此將該功能開發成一個 SDK 是相當有必要的。 背景 剛好最近自己遇到了類似需求,在開發完 SDK 之後,整合到專案或者提供給別人的時候遇到了一些坑,這裡分享一下,以避免其他需

Android SDK開發aar從0到1

記錄一下開發aar所填的坑。 前期:      ①使用Android Studio新建一個專案      ②File--New--New Module建立一個module(在此module裡開發你的aar邏輯) 1.如果生成的aar裡沒有依賴的第三方的庫則可以使用這種

微信小程式開發tabbar

學習微信小程式中,遇到底部的TabBar不出現的問題。錯誤現象是,專案的app.json使用以下程式碼,卻沒有出現TabBar。 { "pages":[ "pages/clickDemo/clickDemo", "pages/logs/logs", "pages/index/

快應用開發

前言 嘗試一款新的開發框架的時候勢必會遇見各種各樣的問題。可能因為一開始不熟悉文件,導致配置錯誤,或是api使用錯誤。當然開發的時候我們也不能確認框架沒有問題,是否存在bug。所以在某些出錯的情況下,我們也許會不斷懷疑自己,懷疑框架,最終懷疑人生。這時候就需要開

大疆無人機Android版SDK開發旅(一)----前言

  最近一段時間一直在做大疆無人機安卓版開發,這水也是挺深的,不仔細看官網SDK的介紹就會遇到各種各樣的坑,簡單記錄一下,希望可以讓其他人少走一些彎路。   安卓端用到的SDK大概有兩種:Android SDK和Android UX SDK   Android SDK(官網介紹):   開發人員可以通過SDK

嵌入式開發STM32開發Keil(或MDK或u4)使用及

V4配置 1.配置晶片型號 2.配置輸出 3.配置過程中檔案 4.配置C 5.配置J-LINK declaration is incompatible wit