当前位置: 首页 > news >正文

北京垡头网站建设公司辽宁东方建设工程有限公司网站

北京垡头网站建设公司,辽宁东方建设工程有限公司网站,jsp电商购物网站开发,整站优化工具配置清除缓存 当进入前台首页时,会缓存对应的商品相关数据,这时,如果后台修改了商品的相关数据,缓存中的对应数据并没有随之发生改变,这时就需要需改对应的缓存数据,这里有两种方法: 方法一 在管理后台操作直接清除缓存中的所有数据,当再次访问前台首页时,就会先从数据库中获取… 配置清除缓存 当进入前台首页时,会缓存对应的商品相关数据,这时,如果后台修改了商品的相关数据,缓存中的对应数据并没有随之发生改变,这时就需要需改对应的缓存数据,这里有两种方法: 方法一 在管理后台操作直接清除缓存中的所有数据,当再次访问前台首页时,就会先从数据库中获取数据,然后缓存到redis中,代码如下: (1).界面 点击 清除缓存 按钮,直接清除缓存驱动中的所有数据 (2).增加 清除缓存 按钮 在templates/admin/main/index.html页面,增加 清除缓存 按钮 ul classnav navbar-nav navbar-rightlia欢迎您,{{.username}}/a/lilia href/admin/flushAll清除缓存/alia href/admin/loginOut安全退出/a/li /ul (3).增加路由 在routers/admin/adminRouter.go中增加 清除缓存 路由 adminRouters.GET(/flushAll, admin.MainController{}.FlushAll) (4).增加清除缓存方法 在controllers/admin/MainController.go中增加清除缓存的方法 //清除缓存 func (con MainController) FlushAll(c *gin.Context) {models.RedisCache.FlushAll()con.Success(c, 清除缓存成功, /admin) } 在models /redisCache.go中增加清除缓存方法 //清除缓存 func (r RedisCache) FlushAll() {if redisEnable {RedisDb.FlushAll(ctxRedis)} } 方法二 在管理后台修改商品相关数据时,就去修改对应的缓存数据,代码:略 2.分类页面数据展示 当从首页点击 商品分类,进入商品分类的 商品展示页面时,会存在和首页共同的 公共数据 顶部导航、中间导航、左侧分类,那么就可以把公共的代码分离出来,放到 基础控制器(BaseController.go)中,实现 代码的复用; 在商品分类的商品展示页面 展示分类的对应商品,以及 筛选对应分类的商品,和对商品进行 分页操作 1).界面 首页界面 商品分类对应的商品页面: 该页面和首页都有共同的 公共数据 顶部导航、中间导航、左侧分类 商品列表 2).代码展示 (1).html 拆分publibc/page_header.html,把中部导航代码单独成一个文件middle_nav.html index.html中增加 中部导航 代码 创建product/list.html商品页面文件 page_header.html 拆分publibc/page_header.html,把中部导航代码单独成一个文件middle_nav.html !-- 相当于给模板定义一个名字, define end 必须成对出现 -- {{ define frontend/public/page_header.html }}!DOCTYPE htmlhtmlheadmeta charsetUTF-8meta nameauthor contentorder by dede58.com/title小米商城/titlelink relstylesheet typetext/css href/static/frontend/css/style.csslink relstylesheet href/static/frontend/css/swiper.min.cssscript src/static/frontend/js/jquery-1.10.1.js/scriptscript src/static/frontend/js/swiper.min.js/scriptscript src/static/frontend/js/base.js /script/headbody!-- start header 顶部导航 --headerdiv classtop centerdiv classleft flul!--获取长度,并计算,看看是否显示最后的 | 画线--{{ $temp : .topNavList | len }}{{ $navLen : Sub $temp 1 }}{{range $key, $value : .topNavList}}lia href{{$value.Link}}{{if eq $value.IsOpennew 1 }} target_blank {{end}} {{$value.Title}}/a/li{{if lt $key $navLen}}li|/li{{end}}{{end}}div classclear/div/ul/divdiv classright frdiv classgouwuche fra href购物车/a/divdiv classfrullia href./login.html target_blank登录/a/lili|/lilia href./register.html target_blank 注册/a/lili|/lilia href消息通知/a/li/ul/divdiv classclear/div/divdiv classclear/div/div/header!--end header -- {{end}} list.html 创建product/list.html商品页面文件 {{ define frontend/public/middle_nav.html }}!-- 中间导航start banner_x --div classbanner_x centera href/ target_blankdiv classlogo fl/div/adiv classnav flul classclearfix idnav_listli classlink-categorya href#全部商品分类/adiv classbanner_y centerdiv classnavul{{range $key,$value : .goodsCateList}}li!--判断点击分类是否跳转到一个新的链接,如果不是,则跳转到对应的分类商品页面--{{if eq $value.Link }}a hrefcategory{{$value.Id}} target_blank{{$value.Title}}/a{{else}}a href{{$value.Link}} target_blank{{$value.Title}}/a{{end}}div classpopol classcate_list clear{{range $k,$v : $value.GoodsCateItems}}lidiv classxuangou_left{{if eq $v.Link }}a hrefcategory{{$v.Id}} target_blankclassclearfixdiv classimg flimgsrc{{$v.CateImg | FormatImg}}alt{{$v.Title}}/divspan classfl{{$v.Title}}/span/a{{else}}a href{{$v.Link}} target_blank classclearfixdiv classimg flimgsrc{{$v.CateImg | FormatImg}}alt{{$v.Title}}/divspan classfl{{$v.Title}}/span/a{{end}}/div/li{{end}}/ol/div/li{{end}}/ul/div/div/li{{range $key,$value : .middleNavList}}lia href# target_blank{{$value.Title}}/aol classchildren-list clearfix{{range $k,$v : $value.GoodsItems}}lia href#img src{{$v.GoodsImg | FormatImg}} alt{{$v.Title}}/p{{$v.Price}}元/p/a/li{{end}}/ol/li{{end}}/ul/divdiv classsearch frform action methodpostdiv classtext flinput typetext classshuru placeholder6nbsp;MIX现货/divdiv classsubmit flinput typesubmit classsousuo value搜索//divdiv classclear/div/formdiv classclear/div/div/div!-- end banner_x -- {{end}} index.html 商品首页增加 中部导航 代码, 因为page_header.html中的中部导航代码没有了,已经封装成middle_nav.html代码了,而首页的商品分类和商品页面的商品分类还有点区别,故不会导入public/middle_nav.html中的代码,所以会直接增加 中部导航 代码 {{ define frontend/index/index.html }}{{template frontend/public/page_header.html .}}!-- start banner_x 中部导航 --div classbanner_x centera href./index.html target_blankdiv classlogo fl/div/aa hrefdiv classad_top fl/div/adiv classnav flul classclearfix idnav_list{{range $key, $value : .middleNavList }}lia href{{$value.Link}} target_blank{{$value.Title}}/aol classchildren-list clearfix{{range $k, $v : $value.GoodsItems }}lia href#img src{{$v.GoodsImg | FormatImg }} /p{{$v.Price}}/p/a/li{{end}}/ol/li{{end}}/ul/divdiv classsearch frform action methodpostdiv classtext flinput typetext classshuru placeholder小米6nbsp;小米MIX现货/divdiv classsubmit flinput typesubmit classsousuo value搜索//divdiv classclear/div/formdiv classclear/div/div/div!-- end banner_x --!-- 商品分类 start banner_y --div classbanner_y centerdiv classnavul{{range $key, $value : .goodsCateList }}li{{if eq $value.Link }}a hrefcategory{{$value.Id}} target_blank{{$value.Title}}/a{{else}}a href{{$value.Link}} target_blank{{$value.Title}}/a{{end}}div classpopol classcate_list clear{{range $k, $v : $value.GoodsCateItems}}lidiv classxuangou_left{{if eq $v.Link }}a hrefcategory{{$v.Id}} target_blankclassclearfixdiv classimg flimgsrc{{$v.CateImg | FormatImg}}alt{{$v.Title}}/divspan classfl{{$v.Title}}/span/a{{else}}a href{{$v.Link}} target_blank classclearfixdiv classimg flimgsrc{{$v.CateImg | FormatImg}}alt{{$v.Title}}/divspan classfl{{$v.Title}}/span/a{{end}}/div/li{{end}}/ol/div/li{{end}}/ul/div!--轮播图--div classswiper-containerdiv classswiper-wrapper{{range $key, $value : .focusList}}div classswiper-slidea href{{$value.Link}} target_blankimg src{{$value.FocusImg | FormatImg}} alt{{$value.Title}} //a/div{{end}}/div!-- Add Arrows --div classswiper-button-next/divdiv classswiper-button-prev/div/div/div !-- 商品分类end --div classsub_banner centerdiv classsidebar fldiv classfla hrefimg src/static/frontend/image/hjh_01.gif/a/divdiv classfla hrefimg src/static/frontend/image/hjh_02.gif/a/divdiv classfla hrefimg src/static/frontend/image/hjh_03.gif/a/divdiv classfla hrefimg src/static/frontend/image/hjh_04.gif/a/divdiv classfla hrefimg src/static/frontend/image/hjh_05.gif/a/divdiv classfla hrefimg src/static/frontend/image/hjh_06.gif/a/divdiv classclear/div/divdiv classdatu fla hrefimg src/static/frontend/image/hongmi4x.png alt/a/divdiv classdatu fla hrefimg src/static/frontend/image/xiaomi5.jpg alt/a/divdiv classdatu fra hrefimg src/static/frontend/image/pinghengche.jpg alt/a/divdiv classclear/div/div!-- end banner --!-- 手机 --div classcategory_item wdiv classtitle center手机/divdiv classmain centerdiv classcategory_item_leftimg srcstatic/itying/image/shouji.jpg alt手机/divdiv classcategory_item_right{{range $key,$value : .phoneList}}div classhot fldiv classxinpinspan stylebackground:#fff/span/divdiv classtua href#img src{{$value.GoodsImg | FormatImg}}/a/divdiv classmiaoshua href#{{$value.Title}}/a/divdiv classjiage{{$value.Price}}元/divdiv classpingjia372人评价/divdiv classpiaoa hrefspan{{SubStr $value.SubTitle 0 4}}/span/a/div/div{{end}}/div/div/div{{template frontend/public/page_footer.html .}}/body /html {{end}} (2).增加商品分类页面路由 defaultRouters.GET(/category:id, frontend.ProductController{}.Category) (3).基础控制器 在基础控制器BaseController.go中创建公共方法: 加载公共模板方法Render() package frontend//基础控制器import (github.com/gin-gonic/gingorm.io/gormgoshop/modelsnet/httpstrings )type BaseController struct{}/* 加载公共模板方法 tpl string 模板 data map 请求的数据*/ func (con BaseController) Render(c *gin.Context, tpl string, data map[string]interface{}) {//实例化redisCache结构体redisCache : models.RedisCache{}//获取顶部导航列表topNavList : []models.Nav{}//判断redis中是否存在数据if hasTopNavList : redisCache.Get(topNavList, topNavList); !hasTopNavList { //不存在数据,则从数据中获取数据,并把数据保存到redismodels.DB.Where(status 1 AND position 1).Find(topNavList)redisCache.Set(topNavList, topNavList, 3600)}//获取分类数据goodsCateList : []models.GoodsCate{}if hasGoodsCateList : redisCache.Get(goodsCateList, goodsCateList); !hasGoodsCateList {//获取分类列表以及下级分类,并进行排序models.DB.Where(pid ? AND status ?, 0, 1).Order(sort DESC).Preload(GoodsCateItems, func(db *gorm.DB) *gorm.DB {return db.Where(goods_cate.status 1).Order(goods_cate.sort DESC)} ).Find(goodsCateList)redisCache.Set(goodsCateList, goodsCateList, 3600)}//获取中间导航middleNavList : []models.Nav{}if hasMiddleNavList : redisCache.Get(middleNavList, middleNavList); !hasMiddleNavList {models.DB.Where(status ? AND position ? , 1, 2).Find(middleNavList)//循环,获取中间导航对应的商品数据for i: 0; i len(middleNavList);i{//获取管理商品//替换字符串中的中文逗号strings.ReplaceAll()relation : strings.ReplaceAll(middleNavList[i].Relation, , ,)//把字符串转换成切片relationIds : strings.Split(relation, ,)//获取对应的商品信息goodsList : []models.Goods{}models.DB.Where(status ?, 1).Where(id in ?, relationIds).Select(id, title, goods_img, price).Find(goodsList)middleNavList[i].GoodsItems goodsList}redisCache.Set(middleNavList, middleNavList, 3600)}renderData : gin.H{topNavList: topNavList,goodsCateList: goodsCateList,middleNavList: middleNavList,}for key, v : range data {renderData[key] v}c.HTML(http.StatusOK, tpl, renderData) } (4).商品控制器 创建ProductController.go控制器,该控制器与商品相关 package frontend//商品相关import (github.com/gin-gonic/gingoshop/modelsmath )type ProductController struct {//extend 基础控制器BaseController }// 根据商品分类获取分类下面的所有商品数据 func (con ProductController) Category(c *gin.Context) {//获取分类idcateId, _ : models.Int(c.Param(id))//当前页page, _ : models.Int(c.Query(page))if page 0 {page 1}//每一页显示的数量pageSize : 2//获取当前分类curCate : models.GoodsCate{}models.DB.Where(id ? , cateId).Find(curCate)//判断当前分类是否顶级分类,如果是,则获取对应的二级分类,如果不是,则获取对应的兄弟分类subCate : []models.GoodsCate{}var tempSlice []intif curCate.Pid 0 { // 当前分类是顶级分类,获取对应的二级分类models.DB.Where(pid ?, cateId).Find(subCate)//把二级分类id放到切片中for i : 0; i len(subCate); i {tempSlice append(tempSlice, subCate[i].Id)}} else { // 当前分类是二级分类,获取对应的兄弟分类models.DB.Where(pid ?, curCate.Pid).Find(subCate)}//把请求的分类id放入切片tempSlice append(tempSlice, cateId)//通过上面的分类id,获取商品相关数据goodsList : []models.Goods{}where : cate_id in ?models.DB.Where(where, tempSlice).Where(status ?, 1).Offset((page - 1) * pageSize).Limit(pageSize).Find(goodsList)//获取总数量var count int64models.DB.Where(where, tempSlice).Table(goods).Count(count)//定义请求的模板tpl : frontend/product/list.htmlcon.Render(c, tpl, gin.H{goodsList: goodsList, // 商品列表subCate: subCate, // 选择分类下面的子分类currentCate: curCate, // 当前分类page: page, //当前页码数totalPages: math.Ceil(float64(count) / float64(pageSize)), // 总页面数}) }[上一节][golang gin框架] 24.Gin 商城项目-redis讲解以及操作
http://www.w-s-a.com/news/723692/

相关文章:

  • 新公司注册网站传奇手游大型网站
  • 无极网站网站涉案多少人被抓网站的按钮怎么做
  • ds216j做网站做购物网站那个好
  • 做淘宝门头的网站阿里巴巴官网app
  • 安踏网站建设策划方案如何通过域名访问网站
  • 建设网站破解版seo查询 站长之家
  • 太原模板建站平台旅游企业网站建设工作的通知
  • 网站国外建设超级简历模板官网
  • 上海网站建设市场医药网站怎么做
  • 宁夏成城建设集团网站网店美工课本
  • 哪些网站的简历做的比较好政务服务 网站 建设方案
  • 如何建设个人网站凡科怎么样vps安装wordpress后怎样登录
  • 学seo朝阳区seo
  • 网站开发团队成员皮具网站建设
  • 国外外贸需求网站响应式布局网页
  • 手机端便民服务平台网站建设昆明网络哪家好
  • 产品网站建设找哪家舟山信息港
  • 唐山网站建设汉狮怎么样seol英文啥意思
  • 深圳小程序网站开发公司网页制作模板视频教程
  • 电子商务网站开发开题报告wordpress更改后台地址
  • 网站静态前端是什么工作
  • 餐饮门户网站 方案怎么做创业好项目
  • 做百度手机网站推广普通话的宣传标语
  • 记事本可以做网站吗网站服务器是主机吗
  • 手机网站被拦截怎么办怎么解决东营建设信息网网
  • 外贸网站模板免费微信网站开发技术
  • 视频盗版网站怎么做福州网站seo
  • 成都金铭 网站建设做网站包含的技术
  • 长沙的网站建设公司哪家好做网站应选那个主题
  • 公司网站百度搜不到如何自己做一个网站