【发布时间】:2014-04-11 01:47:41
【问题描述】:
我正在使用 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
我确实尝试在archives 上使用serveDirectory。正如人们所期望的那样,请求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。如果可以使用上述问题的解决方案来允许自定义每个用户的布局模板,那就太好了。如果没有,不用担心。)
【问题讨论】:
标签: haskell-snap-framework heist