Implement shared template layout system

This commit is contained in:
bronku 2025-03-29 07:33:23 +01:00
parent 3be7fb76e7
commit 08b669fd8f
9 changed files with 69 additions and 45 deletions

View file

@ -13,24 +13,32 @@ import (
var templates embed.FS
func (h *Server) loadTemplates() {
var err error
h.tmpl, err = template.ParseFS(templates, "templates/*")
if err != nil {
log.Fatal(err)
h.tmpl = make(map[string]*template.Template)
pages := []string{"orders", "order", "cake", "cakes", "confirmation"}
for _, page := range pages {
tmpl, err := template.ParseFS(templates,
"templates/layout/*.html",
"templates/"+page+".html",
)
if err != nil {
log.Fatal(err)
}
h.tmpl[page] = tmpl
}
}
func (s *Server) render(fetch fetcher, templateName string) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("content-type", "text/html")
data, code, err := fetch(r)
if err != nil {
logging.ErrorPage(err, code).ServeHTTP(w, r)
return
}
err = s.tmpl.ExecuteTemplate(w, templateName, data)
err = s.tmpl[templateName].ExecuteTemplate(w, "layout", data)
if err != nil {
logging.ErrorPage(err, http.StatusInternalServerError).ServeHTTP(w, r)
return
}
w.Header().Set("content-type", "text/html")
}
}