Column Usage

InfoPanel has a lot of built-in operation methods for columns, which can be used to manipulate column data very flexibly.

Set Width

info.AddField("Name", "name", db.Varchar).FieldWidth(100)


info.AddField("Name", "name", db.Varchar).FieldHide()

Be Sortable

info.AddField("Name", "name", db.Varchar).FieldSortable()

Be Fixed

info.AddField("Name", "name", db.Varchar).FieldFixed()

Be Filterable

info.AddField("Name", "name", db.Varchar).FieldFilterable()

Set filter operator and operation form type:

// Set the operator to like, fuzzy query
info.AddField("Name", "name", db.Varchar).FieldFilterable(types.FilterType{Operator: types.FilterOperatorLike})
// Set to single selection type
info.AddField("Gender", "gender", db.Tinyint).
FieldFilterable(types.FilterType{FormType: form.SelectSingle}).
{Value: "0", Text: "men"},
{Value: "1", Text: "women"},
}).FieldFilterOptionExt(map[string]interface{}{"allowClear": true})
// Set to the time range type, range queries
info.AddField("CreatedAt", "created_at", db.Timestamp).FieldFilterable(types.FilterType{FormType: form.DatetimeRange})
// Set the filter field processing function
info.AddField("Name", "name", db.Varchar).
FieldFilterable(types.FilterType{Operator: types.FilterOperatorLike}).
FieldFilterProcess(func(s string) string {
// Even if the error input with extra spaces from the request, here can filter the spaces for SQL queries
return strings.TrimSpace(s)

Add column operation button

If you want to add some function button, then you can do like this:

info.AddActionButton(title template.HTML, icon string, action Action, color ...template.HTML)

title is the title of Button, iconis the icon of Button, actionis a set of operations of Button and color are the background color and text color.

For example:

import (
info.AddActionButton("Today Data", icon.Save, action.PopUp("/admin/data/analyze", "Data Analysis"))

Added a popup operation, will go to request the corresponding routing, corresponding routing return is the content of the popup, "data analysis" as the title for the popup.

Operation of class Action as an interface, as follows:

type Action interface {
// Returns the corresponding JS
Js() template.JS
// Access to the class
BtnClass() template.HTML
// Returns the button properties
BtnAttribute() template.HTML
// Returns the extra HTML
ExtContent() template.HTML
// The set up button ID, supply Js () method call
SetBtnId(btnId string)
// SetData
SetBtnData(data interface{})
// Return request node, including routing method and the corresponding controller
GetCallbacks() context.Node

You can implement a Action yourself or use the Action provided of framework. There are three default Action: PopUp, Ajax and Jump.

import (
// Return a Jump Action,parameter one is the url,two is the extra html.
// Jump Action is a link jump operation. If you need to carry the id of operation row, you can do like this:
// action.Jump("/admin/info/manager?id={{.Id}}")
// {{.Id}} is the placeholder of id.
action.JumpInNewTab("/admin/info/manager", "管理员")
// Return a PopUp Action, parameter one is the url, two is the title, three is handler method.
// When user click the button, the request will be sent to the handler with the row id.
action.PopUp("/admin/popup", "Popup Example", func(ctx *context.Context) (success bool, msg string, data interface{}) {
// Access to the paramters:
// ctx.FormValue["id"]
// ctx.FormValue["ids"]
// The data return is the content of popup.
return true, "", "<h2>hello world</h2>"
// Return a Ajax Action, parameter one is the url, two is the handler method.
func(ctx *context.Context) (success bool, msg string, data interface{}) {
// Access to the paramters:
// ctx.FormValue["id"]
// ctx.FormValue["ids"]
return true, "success", ""


Show as a switch

import ""
info.AddField("ShowEnable", "show_status", db.Tinyint).FieldEditAble(table.Switch).FieldEditOptions(types.FieldOptions{
{Value: "1", Text: "Enable"},
{Value: "2", Text: "Disable"},

Maybe you want to add filter together

info.AddField("ShowEnable", "show_status",db.Tinyint).FieldEditAble(table.Switch).FieldEditOptions(types.FieldOptions{
{Value: "1", Text: "Enable"},
{Value: "2", Text: "Disable"},
}).FieldFilterable(types.FilterType{FormType: form.SelectSingle}).FieldFilterOptions(types.FieldOptions{
{Value: "1", Text: "Enable"},
{Value: "2", Text: "Disable"},
}).FieldFilterOptionExt(map[string]interface{}{"allowClear": true})

Help Methods

String manipulation

Limit the output length

info.AddField("Name", "name", db.Varchar).FieldLimit(10)


info.AddField("Name", "name", db.Varchar).FieldToTitle()

Trim space

info.AddField("Name", "name", db.Varchar).FieldTrimSpace()

String interception

info.AddField("Name", "name", db.Varchar).FieldSubstr(0, 3)

String to uppercase

info.AddField("Name", "name", db.Varchar).FieldToUpper()

String to lowercase

info.AddField("Name", "name", db.Varchar).FieldToLower()

If you want to add global filtering operation

Then you can do like this:

adminPlugin := admin.NewAdmin(...)
// limit output
adminPlugin.AddDisplayFilterLimit(limit int)
// trim space
// substr
adminPlugin.AddDisplayFilterSubstr(start int, end int)
// make title
// to upper
// to lower
// xss filter
// js filter

If you want to add filtering operation in display level of info table or forms

info := table.NewDefaultTable(...).GetInfo()
info.AddLimitFilter(limit int)
info.AddSubstrFilter(start int, end int)
form := table.NewDefaultTable(...).GetForm()
form.AddLimitFilter(limit int)
form.AddSubstrFilter(start int, end int)