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

gf框架之分页模块(五) - 自定义分页

文章来源:http://gf.johng.cn/597435

由于分页对象预定义的样式比较有限,有的时候我们想自定义分页的样式(标签输出),由于分页对象的的所有方法都是公开的,这便为开发者自定义分页样式提供了非常高的灵活度。开发者可以通过以下方式实现自定义分页内容:

  1. (推荐)对输出内容进行正则匹配替换实现自定义;
  2. 根据分页对象公开的方法自行组织分页内容实现自定义;
  3. 也可以自定义一个分页对象(继承于原有分页对象),使用方法重载的方式来实现自定义;

示例1,使用第一种方式实现分页自定义:

package main

import (
    "gitee.com/johng/gf/g"
    "gitee.com/johng/gf/g/os/gview"
    "gitee.com/johng/gf/g/util/gstr"
    "gitee.com/johng/gf/g/net/ghttp"
    "gitee.com/johng/gf/g/util/gpage"
)

// 分页标签使用li标签包裹
func wrapContent(page *gpage.Page) string {
    content := page.GetContent(4)
    content  = gstr.ReplaceByMap(content, map[string]string {
        "<span"  : "<li><span",
        "/span>" : "/span></li>",
        "<a"     : "<li><a",
        "/a>"    : "/a></li>",
    })
    return "<ul>" + content + "</ul>"
}

func main() {
    s := ghttp.GetServer()
    s.BindHandler("/page/custom2/*page", func(r *ghttp.Request){
        page      := gpage.New(100, 10, r.Get("page"), r.URL.String(), r.Router.Uri)
        content   := wrapContent(page)
        buffer, _ := gview.ParseContent(`
        <html>
            <head>
                <style>
                    a,span {padding:8px; font-size:16px;}
                    div{margin:5px 5px 20px 5px}
                </style>
            </head>
            <body>
                <div>{{.page}}</div>
            </body>
        </html>
        `, g.Map{
            "page" : gview.HTML(content),
        })
        r.Response.Write(buffer)
    })
    s.SetPort(10000)
    s.Run()
}

执行后,页面输出结果为:
91ab58599ed9f155043305724480bfb4_378x358.png

示例2,使用第二种方式实现分页自定义:

package main

import (
    "gitee.com/johng/gf/g/os/gview"
    "gitee.com/johng/gf/g/net/ghttp"
    "gitee.com/johng/gf/g/util/gpage"
)

// 自定义分页名称
func pageContent(page *gpage.Page) string {
    page.NextPageTag  = "NextPage"
    page.PrevPageTag  = "PrevPage"
    page.FirstPageTag = "HomePage"
    page.LastPageTag  = "LastPage"
    pageStr := page.FirstPage()
    pageStr += page.PrevPage()
    pageStr += page.PageBar("current-page")
    pageStr += page.NextPage()
    pageStr += page.LastPage()
    return pageStr
}

func main() {
    s := ghttp.GetServer()
    s.BindHandler("/page/custom/*page", func(r *ghttp.Request) {
        page      := gpage.New(100, 10, r.Get("page"), r.URL.String(), r.Router.Uri)
        buffer, _ := gview.ParseContent(`
        <html>
            <head>
                <style>
                    a,span {padding:8px; font-size:16px;}
                    div{margin:5px 5px 20px 5px}
                </style>
            </head>
            <body>
                <div>{{.page}}</div>
            </body>
        </html>
        `, g.Map{
            "page" : gview.HTML(pageContent(page)),
        })
        r.Response.Write(buffer)
    })
    s.SetPort(8199)
    s.Run()
}

执行后,页面输出结果为:
036961cfbe86a2c17d7f783b33829f98_581x112.png

相关文章:

  • SQL Server 2005 日常运维检查操作手册
  • FPGA设计中遇到的奇葩问题之“芯片也要看出身”(一)
  • UI自动化测试篇 :webdriver+ant+jenkins自动化测试实践
  • 再谈DOMContentLoaded与渲染阻塞—分析html页面事件与资源加载
  • mysql alter 曾删改查
  • jsonp
  • find_first_zore_bit-一个位图的实现
  • 素材锦囊——50个高质量的 PSD 素材免费下载《上篇》
  • Spark2.1.1spark写入Hbase的三种方法性能对比
  • javascript框架概览备忘
  • mybatis 逆向工程配置文件
  • O2O?啥是“呕吐呕”?
  • 快速搞定常用的ES6新特性
  • Excel 将换行符替换为空
  • android PhoneGap源码详解
  • 自己简单写的 事件订阅机制
  • 10个最佳ES6特性 ES7与ES8的特性
  •  D - 粉碎叛乱F - 其他起义
  • E-HPC支持多队列管理和自动伸缩
  • KMP算法及优化
  • mongodb--安装和初步使用教程
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Quartz初级教程
  • Redux 中间件分析
  • vuex 学习笔记 01
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 高程读书笔记 第六章 面向对象程序设计
  • 简单易用的leetcode开发测试工具(npm)
  • 精彩代码 vue.js
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 算法之不定期更新(一)(2018-04-12)
  • 原生js练习题---第五课
  • 7行Python代码的人脸识别
  • MPAndroidChart 教程:Y轴 YAxis
  • 第二十章:异步和文件I/O.(二十三)
  • 回归生活:清理微信公众号
  • 容器镜像
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​一些不规范的GTID使用场景
  • #ifdef 的技巧用法
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (规划)24届春招和25届暑假实习路线准备规划
  • .cfg\.dat\.mak(持续补充)
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Core中的去虚
  • .NET Remoting学习笔记(三)信道
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 表达式计算:Expression Evaluator
  • .NET 发展历程
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET 使用配置文件
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面