[golang gin框架] 22.Gin 商城项目-商店设置模块,以及通过反射获取系统设置里面的数据

一.商店设置模块界面

通用信息

配置网站标题,logo,seo相关数据,备案信息等
云存储相关配置
缩略图相关配置

OSS储存配置

缩略图尺寸配置

二.代码展示

1.模型

package models

//系统设置

type Setting struct {
    //使用反射功能:`form:"xxx"`配置:可以批量获取表单数据,form后面的需要和html中表单字段一致
    Id              int    `form:"id"`
    SiteTitle       string `form:"site_title"`    //标题
    SiteLogo        string    //logo
    SiteKeywords    string `form:"site_keywords"`    //关键词
    SiteDescription string `form:"site_description"`    //描述
    NoPicture       string    //默认图片,不需要form设置, 因为该字段的数据需要用到上传功能,要校验
    SiteIcp         string `form:"site_icp"`  //备案信息
    SiteTel         string `form:"site_tel"`    //电话
    SearchKeywords  string `form:"search_keywords"` //搜索关键词
    TongjiCode      string `form:"tongji_code"`    //统计代码
    Appid           string `form:"appid"`    //oss appid
    AppSecret       string `form:"app_secret"`    //oss 密钥
    EndPoint        string `form:"end_point"`    //oss 访问结点域名
    BucketName      string `form:"bucket_name"` //oss 桶名称
    OssStatus       int    `form:"oss_status"` //oss 开启状态: 1 是, 0 否
    OssDomain       string `form:"oss_domain"` //oss domain
    ThumbnailSize   string `form:"thumbnail_size"` //缩略图大小设置
}

func (Setting) TableName() string {
    return "setting"
}

2.控制器

上传功能见:
[golang gin框架] 15.Gin 商城项目-封装上传图片方法,轮播图的增删改查以及异步修改状态,数量
[golang gin框架] 19.Gin 图片上传到云服务器(腾讯云,阿里云)
package admin

import (
    "github.com/gin-gonic/gin"
    "goshop/models"
    "net/http"
)

type SettingController struct {
    BaseController
}

func (con SettingController) Index(c *gin.Context) {
    setting := models.Setting{}
    models.DB.First(&setting)
    c.HTML(http.StatusOK, "admin/setting/index.html", gin.H{
        "setting": setting,
    })
}

func (con SettingController) DoEdit(c *gin.Context) {
    setting := models.Setting{Id: 1}
    models.DB.Find(&setting)
    //c.ShouldBind(&setting): 绑定表单中的数据到结构体
    if err := c.ShouldBind(&setting); err != nil {
        con.Error(c, "修改数据失败,请重试", "/admin/setting")
        return
    } else {
        // 上传图片 logo
        siteLogo, err1 := models.UploadImg(c, "site_logo")
        if len(siteLogo) > 0 && err1 == nil {
            setting.SiteLogo = siteLogo
        } else if err1 != nil {
             con.Error(c, "上传错误", "/admin/setting")
             return
        }
        //上传图片 no_picture
        noPicture, err2 := models.UploadImg(c, "no_picture")
        if len(noPicture) > 0 && err2 == nil {
            setting.NoPicture = noPicture
        }

        err3 := models.DB.Save(&setting).Error
        if err3 != nil {
            con.Error(c, "修改数据失败", "/admin/setting")
            return
        }

        con.Success(c, "修改数据成功", "/admin/setting")
    }
}

3.视图(html)

index.html

{{ define "admin/setting/index.html" }}
{{ template "admin/public/page_header.html" .}}

<div class="container-fluid">
    <div class="row">
        <div class="panel panel-default">              
            <div class="panel-heading">
             系统设置
            </div>
            <div class="panel-body">
                <div class="table-responsive input-form news_content">
                    <form action="/admin/setting/doEdit" method="post" enctype="multipart/form-data">
                        <ul class="nav nav-tabs" role="tablist">
                            <li role="presentation" class="active"><a href="#general" role="tab"
                                    data-toggle="tab">通用信息</a></li>
                            <li role="presentation"><a href="#oss" role="tab" data-toggle="tab">OSS云存储配置</a></li>
                            <li role="presentation"><a href="#thumb" role="tab" data-toggle="tab">缩略图尺寸</a></li>

                        </ul>

                        <div class="tab-content">
                            <div role="tabpanel" class="tab-pane active" id="general">
                                <ul class="form_input">
                                    <li>
                                        <span>网站标题:</span> <input type="text" class="input" name="site_title" value="{{.setting.SiteTitle}}"/>
                                    </li>
            
                                    <li><span>网站logo:</span>  
                                        <input type="file" name="site_logo"/>   
                                        <br />       
                                        {{if ne .setting.SiteLogo ""}}              
                                        <span></span>    <img style="width:80px" class="pic" src="{{.setting.SiteLogo | FormatImg}}" />
                                        {{end}}                           
                                     </li>                     
            
                                    <li><span>网站关键词:</span> <input type="text"  class="input" name="site_keywords"  value="{{.setting.SiteKeywords}}"/></li>
            
                                    <li><span>网站描述:</span>  <textarea name="site_description" style="width:600px;">{{.setting.SiteDescription}}</textarea></li>
            
                                    <li><span>商品默认图片:</span>  <input type="file" name="no_picture" />   
                                        <br />                     
                                        {{if ne .setting.NoPicture ""}}
                                        <span></span> <img class="pic" style="width:80px"  src="/{{.setting.NoPicture | FormatImg}}" />
                                        {{end}}                            
                                    </li> 
                                     <li> <span>备案信息:</span> <input type="text" class="input" name="site_icp" value="{{.setting.SiteIcp}}"/></li>
                                     <li> <span>网站电话:</span> <input type="text" class="input" name="site_tel" value="{{.setting.SiteTel}}"/></li>
            
                                     <li> <span>搜索关键词:</span> <input type="text" class="input" name="search_keywords" value="{{.setting.SearchKeywords}}"/></li>
            
                                     <li> <span>统计代码:</span> 
                                        <textarea name="tongji_code" style="width:600px;">{{.setting.TongjiCode}}</textarea>
                                    
                                    </li>
            
                                </ul>
                            </div>
                            <div role="tabpanel" class="tab-pane" id="oss">
                                <ul class="form_input">
                                    <li>  <span>是否开启Oss: </span>
                                        <input type="radio" name="oss_status" {{if eq .setting.OssStatus 1}} checked {{end}} value="1" id="a"/> <label for="a">是</label>     
                                        
                                        <input type="radio" name="oss_status" {{if eq .setting.OssStatus 0}} checked {{end}} value="0" id="b"/><label for="b">否</label>  </li>


                                    <li>
                                        <span>BucketName:</span> <input type="text" class="input" name="bucket_name" value="{{.setting.BucketName}}"/>
                                    </li>
                                    <li>
                                        <span>Appid:</span> <input type="text" class="input" name="appid" value="{{.setting.Appid}}"/>
                                    </li>
                                    <li>
                                        <span>AppSecret:</span> <input type="text" class="input" name="app_secret" value="{{.setting.AppSecret}}"/>
                                    </li>            
                                    <li>
                                        <span>EndPoint:</span> <input type="text" class="input" name="end_point" value="{{.setting.EndPoint}}"/>
                                    </li>
                                    <li>
                                        <span>OssDomain:</span> <input type="text" class="input" name="oss_domain" value="{{.setting.OssDomain}}"/>
                                    </li>
                                </ul>
                            </div>
                            <div role="tabpanel" class="tab-pane" id="thumb">
                                <ul class="form_input">

                                    <li>
                                        <span>缩略图尺寸:</span> <input type="text" class="input" name="thumbnail_size" value="{{.setting.ThumbnailSize}}"/> <i>如:200,300,400 这样的话将会生成200x200 300x300以及400x400的图片</i>
                                    </li>

                                </ul>
                            </div>
                        </div>
                        
                        <button type="submit" class="btn btn-success goods_content_btn">提交</button>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>
{{end}}      

4.配置路由

在routers/adminRouters.go下配置设置相关路由
//商城系统设置
adminRouters.GET("/setting", admin.SettingController{}.Index)
adminRouters.POST("/setting/doEdit", admin.SettingController{}.DoEdit)

[上一节][golang gin框架] 21.Gin 商城项目-导航模块功能

[下一节][golang gin框架] 23.Gin 商城项目-前台templates模板分离,首页,顶部导航,轮播图 左侧分类数据渲染

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值