我正在使用 Snap 创建一个相当简单的投资组合,在大多数情况下,它只是将内容存储在数据库中并将其显示给用户。我希望拥有的功能之一是能够展示我的投资组合的退役设计。每个设计都只不过是一个模板和少量资产(图像、CSS 等)。出于组织目的,我想将属于单个设计的所有内容放在一起,并与我的投资组合的模板/资产分开。
src/Site.hs
static/images/logo.png
static/css/responsive.css
archives/foo.com/2012-03/index.html
archives/foo.com/2012-03/images/logo.png
archives/foo.com/2012-03/css/styles.css
archives/foo.com/2012-03/favicion.ico
archives/bar.com/2011-08/index.html
archives/bar.com/2011-08/images/logo.png
archives/bar.com/2011-08/css/styles.css
archives/bar.com/2011-08/favicion.ico
我确实尝试使用serveDirectory
on archives
。像人们期望的那样请求example.com/bar.com/2012/03/
请求,这在某些情况下很好。archives/bar.com/2012/03/index.html
我希望能够使用一些已编译的拼接或Charade,以便在无法复制原始内容时页面看起来不会那么空(通常是因为它来自早已被遗忘的数据库)。
也许为此目的制作一个单独的 snaplet 更有意义?如果是这样,我将如何去做?作为参考,我网站的 snaplet 相当基本,看起来像这样:
app :: SnapletInit App App
app = makeSnaplet "connex" "A snaplet for the connex site." Nothing $ do
h <- nestSnaplet "heist" heist $ heistInit' "templates" defaultHeistState
s <- nestSnaplet "session" sess $ initCookieSessionManager "config/site_key.txt" "session" (Just 86400)
d <- nestSnaplet "db" db pgsInit
addRoutes
[ ("/", indexH siteH)
-- more routes here
, ("", serveDirectory "static")
]
return $ App h s d
where
defaultHeistState = mempty {
hcInterpretedSplices = defaultInterpretedSplices,
hcLoadTimeSplices = defaultLoadTimeSplices
}
(PS 我有一个类似但不相关的项目,允许用户自定义他们自己的“站点”的外观。目前,自定义仅限于图像和 CSS。如果上述问题的解决方案可以用于允许自定义布局模板每个用户,那就太好了。如果没有,不用担心。)