From 4a3902432a9559fa0c4927bce8b6971dbd77caeb Mon Sep 17 00:00:00 2001 From: Ricky Lin Date: Tue, 24 Dec 2013 00:13:24 +0800 Subject: [PATCH] Added LayoutSections property to Controller users can define 0 or multipe sections in the Layout template file so all kinds of content such as scripts, css can go to proper sections in the generated html file. --- controller.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/controller.go b/controller.go index 84c8cd74..1f148f06 100644 --- a/controller.go +++ b/controller.go @@ -38,6 +38,7 @@ type Controller struct { actionName string TplNames string Layout string + LayoutSections map[string]string // the key is the section name and the value is the template name TplExt string _xsrf_token string gotofunc string @@ -161,6 +162,25 @@ func (c *Controller) RenderBytes() ([]byte, error) { } tplcontent, _ := ioutil.ReadAll(newbytes) c.Data["LayoutContent"] = template.HTML(string(tplcontent)) + + if c.LayoutSections != nil { + for sectionName, sectionTpl := range c.LayoutSections { + if (sectionTpl == "") { + c.Data[sectionName] = "" + continue + } + + sectionBytes := bytes.NewBufferString("") + err = BeeTemplates[sectionTpl].ExecuteTemplate(sectionBytes, sectionTpl, c.Data) + if err != nil { + Trace("template Execute err:", err) + return nil, err + } + sectionContent, _ := ioutil.ReadAll(sectionBytes) + c.Data[sectionName] = template.HTML(string(sectionContent)) + } + } + ibytes := bytes.NewBufferString("") err = BeeTemplates[c.Layout].ExecuteTemplate(ibytes, c.Layout, c.Data) if err != nil {