#### 1.模板渲染问题
```go
// Render html 输出
func Render(ctx echo.Context, contentTpl string, data map[string]interface{}) error {
if data == nil {
data = map[string]interface{}{}
}
objLog := logic.GetLogger(ctx)
contentTpl = LayoutTpl + "," + contentTpl
// 为了使用自定义的模板函数,首先New一个以第一个模板文件名为模板名。
// 这样,在ParseFiles时,新返回的*Template便还是原来的模板实例
htmlFiles := strings.Split(contentTpl, ",")
for i, contentTpl := range htmlFiles {
htmlFiles[i] = config.TemplateDir + contentTpl
}
tpl, err := template.New("layout.html").Funcs(funcMap).
Funcs(template.FuncMap{"include": tplInclude}).ParseFiles(htmlFiles...)
if err != nil {
objLog.Errorf("解析模板出错(ParseFiles):[%q] %s\n", Request(ctx).RequestURI, err)
return err
}
data["pos_ad"] = logic.DefaultAd.FindAll(ctx, ctx.Path())
data["cur_time"] = times.Format("Y-m-d H:i:s")
data["path"] = ctx.Path()
data["filter"] = false
if _, ok := filterPathes[ctx.Path()]; ok {
data["filter"] = true
}
// TODO:每次查询有点影响性能
hasLoginMisson := false
me, ok := ctx.Get("user").(*model.Me)
if ok {
// 每日登录奖励
hasLoginMisson = logic.DefaultMission.HasLoginMission(ctx, me)
}
data["has_login_misson"] = hasLoginMisson
return executeTpl(ctx, tpl, data)
}
```
tpl, err := template.New("layout.html").Funcs(funcMap).
Funcs(template.FuncMap{"include": tplInclude}).ParseFiles(htmlFiles...)
上边这个函数不太明白,这个最后应该是渲染一个完整的html界面吧,看完后还是不清楚如何将layout.html和里面的content模块组合在一起的。
#### 2.帖子分页问题
主题帖子分页查找----->显示的流程不太清楚,主要是model里定义的数据结构没有解释,虽然从名称大概能看出什么意思。现在刚开始看,心里是有点恐惧的,主要是web开发这块经验还是不足,好多业务功能可能没做过。现在源码的整体架构大概明白,可能函数中的一些细节需要进一步阅读。
不知道大家是如何阅读源码的,可以分享一些经验吗?
更多评论
你看下 layout.html 文件中的 `template content`,它就是串联起模板!
其实这个社区分几块:主题、文章、项目、资源等,一方面你看懂了整个架构;另一方面,可以关注下首页,然后看下主题这块,应该就大体弄懂了。
#1