examples: add an example for #2019

This commit is contained in:
Gerasimos (Makis) Maropoulos 2022-12-17 01:16:10 +02:00
parent 1ea5cd58be
commit de8883fc98
No known key found for this signature in database
GPG Key ID: B9839E9CD30B7B6B
6 changed files with 58 additions and 7 deletions

View File

@ -512,7 +512,7 @@ $ go get github.com/kataras/iris/v12@master
**Run** **Run**
```sh ```sh
$ go mod tidy -compat=1.19 $ go mod tidy -compat=1.19 # -compat="1.19" for windows.
$ go run . $ go run .
``` ```

View File

@ -475,7 +475,7 @@ $ go get github.com/kataras/iris/v12@master
**Run** **Run**
```sh ```sh
$ go mod tidy -compat=1.19 $ go mod tidy -compat=1.19 # -compat="1.19" for windows.
$ go run . $ go run .
``` ```

View File

@ -1,6 +1,17 @@
package main package main
import "github.com/kataras/iris/v12" import (
"html/template"
"time"
"github.com/kataras/iris/v12"
)
// ViewFunctions presents some builtin functions
// for html view engines. See `View.Funcs` or `view/html.Funcs` and etc.
var Functions = template.FuncMap{
"Now": time.Now,
}
func main() { func main() {
app := iris.New() app := iris.New()
@ -13,7 +24,8 @@ func main() {
// - {{ yield . }} // - {{ yield . }}
// - {{ current . }} // - {{ current . }}
app.RegisterView(iris.HTML("./templates", ".html"). app.RegisterView(iris.HTML("./templates", ".html").
Reload(true)) // Set Reload false to production. Funcs(Functions). // Optionally register some more builtin functions.
Reload(false)) // Set Reload to true on development.
app.Get("/", func(ctx iris.Context) { app.Get("/", func(ctx iris.Context) {
// enable compression based on Accept-Encoding (e.g. "gzip"), // enable compression based on Accept-Encoding (e.g. "gzip"),
@ -30,13 +42,15 @@ func main() {
}) })
app.Get("/example_map", func(ctx iris.Context) { app.Get("/example_map", func(ctx iris.Context) {
if err := ctx.View("example.html", iris.Map{ examplePage := iris.Map{
"Name": "Example Name", "Name": "Example Name",
"Age": 42, "Age": 42,
"Items": []string{"Example slice entry 1", "entry 2", "entry 3"}, "Items": []string{"Example slice entry 1", "entry 2", "entry 3"},
"Map": iris.Map{"map key": "map value", "other key": "other value"}, "Map": iris.Map{"map key": "map value", "other key": "other value"},
"Nested": iris.Map{"Title": "Iris E-Book", "Pages": 620}, "Nested": iris.Map{"Title": "Iris E-Book", "Pages": 620},
}); err != nil { }
if err := ctx.View("example.html", examplePage); err != nil {
ctx.HTML("<h3>%s</h3>", err.Error()) ctx.HTML("<h3>%s</h3>", err.Error())
return return
} }
@ -71,6 +85,23 @@ func main() {
} }
}) })
app.Get("/functions", func(ctx iris.Context) {
var functionsPage = struct {
// A function.
Now func() time.Time
// A struct field which contains methods.
Ctx iris.Context
}{
Now: time.Now,
Ctx: ctx,
}
if err := ctx.View("functions.html", functionsPage); err != nil {
ctx.HTML("<h3>%s</h3>", err.Error())
return
}
})
// http://localhost:8080/ // http://localhost:8080/
app.Listen(":8080") app.Listen(":8080")
} }

View File

@ -0,0 +1,3 @@
<h1>Function: {{ Now }}</h1>
<h1>Field: {{ .Ctx.Request.URL.Path }} </h1>
<h1>Field Struct's Function (Method): {{ .Ctx.FullRequestURI }} </h1>

View File

@ -82,7 +82,7 @@ type Application struct {
minifier *minify.M minifier *minify.M
// view engine // view engine
view view.View view *view.View
// used for build // used for build
builded bool builded bool
defaultMode bool defaultMode bool
@ -120,6 +120,7 @@ func New() *Application {
Router: router.NewRouter(), Router: router.NewRouter(),
I18n: i18n.New(), I18n: i18n.New(),
minifier: newMinifier(), minifier: newMinifier(),
view: new(view.View),
} }
logger := newLogger(app) logger := newLogger(app)

View File

@ -2,6 +2,7 @@ package view
import ( import (
"fmt" "fmt"
"html/template"
"io" "io"
"strings" "strings"
@ -76,6 +77,21 @@ func (v *View) AddFunc(funcName string, funcBody interface{}) {
} }
} }
// Funcs registers a template func map to the registered view engine(s).
func (v *View) Funcs(m template.FuncMap) *View {
if !v.Registered() {
return v
}
if e, ok := v.Engine.(EngineFuncer); ok {
for k, v := range m {
e.AddFunc(k, v)
}
}
return v
}
// Load compiles all the registered engines. // Load compiles all the registered engines.
func (v *View) Load() error { func (v *View) Load() error {
if !v.Registered() { if !v.Registered() {