diff --git a/g/util/gpage/gpage.go b/g/util/gpage/gpage.go
index fad7f6579..a0d449b31 100644
--- a/g/util/gpage/gpage.go
+++ b/g/util/gpage/gpage.go
@@ -9,20 +9,25 @@ package gpage
import (
"gitee.com/johng/gf/g/net/ghttp"
+ "math"
+ "fmt"
+ "net/url"
+ "gitee.com/johng/gf/g/util/gconv"
+ "strings"
)
type Page struct {
- request *ghttp.Request
- pageName string // page标签,用来控制url页。比如说xxx.php?PBPage=2中的PBPage
- nextPage string // 下一页标签
- prePage string // 上一页标签
- firstPage string // 首页标签
- lastPage string // 尾页标签
- pre_bar string // 上一分页条
- next_bar string // 下一分页条
+ pageName string // 分页参数名称
+ nextPageTag string // 下一页标签
+ prevPageTag string // 上一页标签
+ firstPageTag string // 首页标签
+ lastPageTag string // 尾页标签
+
+ prevBar string // 上一分页条
+ nextBar string // 下一分页条
formatLeft string
formatRight string
- isAjax bool // 是否支持AJAX分页模式
+ isAjax bool // 是否支持AJAX分页模式
totalSize int
pagebarNum int // 控制记录条的个数。
totalPage int // 总页数
@@ -31,98 +36,45 @@ type Page struct {
url string // url地址头
offset int
}
-/**
-* constructor构造函数
-*
-* @param array array['total'], array['perpage'], array['currentPage'], array['url'], array['ajax']...
-*/
-func New(total, perpage int) {
- total = intval(array['total']);
- perpage = (array_key_exists('perpage',array)) ? intval(array['perpage']) : 10;
- currentPage = (array_key_exists('currentPage',array)) ? intval(array['currentPage']) : '';
- url = (array_key_exists('url',array)) ? array['url'] : '';
+
+func New(totalSize, perPage, currentPage int, url string) *Page {
+ page := &Page {
+ pageName : "page",
+ totalSize : totalSize,
+ totalPage : int(math.Ceil(float64(totalSize/perPage))),
+ currentPage : currentPage,
+ offset : (currentPage - 1)*perPage,
+ url : url,
+ }
+ if strings.Index(url, "?") != -1 {
+ page.url = url + "&"
} else {
- total = array;
- perpage = 10;
- currentPage ='';
- url = '';
-}
-if ((!is_int(total)) || (total < 0)) {
-this->_error(__FUNCTION__, 'invalid total');
-}
-if ((!is_int(perpage)) || (perpage <= 0)) {
-this->_error(__FUNCTION__, 'invalid perpage');
-}
-if (!empty(array['pageName'])) {
-// 设置pagename
-this->set('pageName', array['pageName']);
-}
-this->_setCurrentPage(currentPage); // 设置当前页
-this->_setUrl(url); // 设置链接地址
-this->totalSize = total;
-this->totalPage = ceil(total/perpage);
-this->offset = (this->currentPage-1)*perpage;
-if (!empty(array['ajax'])) {
-this->openAjax(array['ajax']);//打开AJAX模式
+ page.url = url + "?"
+ }
+ page.url += page.pageName + "="
+ return page
}
+// 启用AJAX分页
+func (page *Page)EnableAjax(actionName string) {
+ page.isAjax = true
+ page.ajaxActionName = actionName
}
-/**
-* 设定类中指定变量名的值,如果改变量不属于这个类,将throw一个exception
-*
-* @param string var
-* @param string value
-*/
-public function set(var, value)
-{
-if (inArray(var, get_object_vars(this))) {
-this->var = value;
-} else {
-this->_error(__FUNCTION__, var." does not belong to PB_Page!");
+// 获取显示"下一页"的内容.
+func (page *Page) nextPage(curStyle , style string) string {
+ if page.currentPage < page.totalPage {
+ return page._getLink(page._getUrl(page.currentPage + 1), page.nextPageTag, "下一页", style)
+ }
+ return fmt.Sprintf(`%s`, curStyle, page.nextPageTag)
}
-}
-
-/**
- * 使用AJAX模式。
- *
- * @param string action 默认ajax触发的动作名称。
- *
- * @return void
- */
-public function openAjax(action)
-{
-this->isAjax = true;
-this->ajaxActionName = action;
-}
-
-/**
-* 获取显示"下一页"的代码.
-*
-* @param string style
-* @return string
-*/
-public function nextPage(curStyle = '', style = '')
-{
-if (this->currentPage < this->totalPage) {
-return this->_getLink(this->_getUrl(this->currentPage+1), this->nextPage, '下一页', style);
-}
-return ''.this->nextPage.'';
-}
-
-/**
-* 获取显示“上一页”的代码
-*
-* @param string style
-* @return string
-*/
-public function prePage(curStyle='', style='')
-{
-if (this->currentPage > 1) {
-return this->_getLink(this->_getUrl(this->currentPage - 1), this->prePage, '上一页', style);
-}
-return ''.this->prePage.'';
+/// 获取显示“上一页”的内容
+func (page *Page) prevPage(curStyle , style string) string {
+ if page.currentPage > 1 {
+ return page._getLink(page._getUrl(page.currentPage - 1), page.prevPageTag, "上一页", style)
+ }
+ return fmt.Sprintf(`%s`, curStyle, page.prevPageTag)
}
/**
@@ -130,87 +82,63 @@ return ''.this->prePage.'';
*
* @return string
*/
-public function firstPage(curStyle = '', style = '')
-{
-if (this->currentPage == 1) {
-return ''.this->firstPage.'';
-}
-return this->_getLink(this->_getUrl(1), this->firstPage, '第一页', style);
+func (page *Page)firstPage(curStyle, style string) string {
+ if page.currentPage == 1 {
+ return fmt.Sprintf(`%s`, curStyle, page.firstPageTag)
+ }
+ return page._getLink(page._getUrl(1), page.firstPageTag, "第一页", style)
}
-/**
-* 获取显示“尾页”的代码
-*
-* @return string
-*/
-public function lastPage(curStyle='', style='')
-{
-if (this->currentPage == this->totalPage) {
-return ''.this->lastPage.'';
-}
-return this->_getLink(this->_getUrl(this->totalPage), this->lastPage, '最后页', style);
+// 获取显示“尾页”的内容
+func (page *Page)lastPage(curStyle, style string) string {
+ if page.currentPage == page.totalPage {
+ return fmt.Sprintf(`%s`, curStyle, page.lastPageTag)
+ }
+ return page._getLink(page._getUrl(page.totalPage), page.lastPageTag, "最后页", style)
}
-/**
- * 获得分页条。
- *
- * @param 当前页码 curStyle
- * @param 连接CSS style
- * @return 分页条字符串
- */
-public function nowbar(curStyle = '', style = '')
-{
-plus = ceil(this->pagebarNum / 2);
-if (this->pagebarNum - plus + this->currentPage > this->totalPage) {
-plus = (this->pagebarNum - this->totalPage + this->currentPage);
-}
-begin = this->currentPage - plus + 1;
-begin = (begin>=1) ? begin : 1;
-return = '';
-for (i = begin; i < begin + this->pagebarNum; i++) {
-if (i <= this->totalPage) {
-if (i != this->currentPage) {
-return .= this->_getText(this->_getLink(this->_getUrl(i), i, style));
-} else {
-return .= this->_getText(''.i.'');
-}
-} else {
-break;
-}
-return .= "\n";
-}
-unset(begin);
-return return;
+// 获得分页条。
+func (page *Page) nowBar(curStyle, style string) string {
+ plus := int(math.Ceil(float64(page.pagebarNum / 2)))
+ if page.pagebarNum - plus + page.currentPage > page.totalPage {
+ plus = page.pagebarNum - page.totalPage + page.currentPage
+ }
+ begin := page.currentPage - plus + 1
+ if begin < 1 {
+ begin = 1
+ }
+ ret := ""
+ for i := begin; i < begin + page.pagebarNum; i++ {
+ if i <= page.totalPage {
+ if i != page.currentPage {
+ ret += page._getText(page._getLink(page._getUrl(i), gconv.String(i), style, ""))
+ } else {
+ ret += page._getText(fmt.Sprintf(`%d`, curStyle, i))
+ }
+ } else {
+ break
+ }
+ ret += "\n"
+ }
+ return ret
}
/**
* 获取显示跳转按钮的代码
*
* @return string
*/
-public function select()
-{
-url = this->_getUrl("' + this.value");
-return = "';
-return return;
-}
-
-/**
-* 获取mysql 语句中limit需要的值
-*
-* @return string
-*/
-public function offset()
-{
-return this->offset;
+func (page *Page) selectBar() string {
+ url := page._getUrl("' + this.value")
+ ret := fmt.Sprintf(`"
+ return ret
}
/**
@@ -219,147 +147,67 @@ return this->offset;
* @param int mode 显示风格分类。
* @return string
*/
-public function show(mode = 1)
-{
-switch (mode) {
-case '1':
-this->nextPage = '下一页';
-this->prePage = '上一页';
-return this->prePage()."{this->currentPage}".this->nextPage();
-break;
-
-case '2':
-this->nextPage = '下一页>>';
-this->prePage = '<<上一页';
-this->firstPage = '首页';
-this->lastPage = '尾页';
-return this->firstPage().this->prePage().'[第'.this->currentPage.'页]'.this->nextPage().this->lastPage().'第'.this->select().'页';
-break;
-
-case '3':
-this->nextPage = '下一页';
-this->prePage = '上一页';
-this->firstPage = '首页';
-this->lastPage = '尾页';
-pageStr = this->firstPage()." ".this->prePage();
-pageStr .= ' '.this->nowbar('current');
-pageStr .= ' '.this->nextPage()." ".this->lastPage();
-pageStr .= "当前页{this->currentPage}/{this->totalPage} 共{this->totalSize}条";
-return pageStr;
-break;
-
-case '4':
-this->nextPage = '下一页';
-this->prePage = '上一页';
-this->firstPage = '首页';
-this->lastPage = '尾页';
-pageStr = this->firstPage()." ".this->prePage();
-pageStr .= ' '.this->nowbar('current');
-pageStr .= ' '.this->nextPage()." ".this->lastPage();
-return pageStr;
-break;
+func (page *Page)show(mode int) string {
+ //switch (mode) {
+ //case '1':
+ //page.nextPage = '下一页'
+ //page.prevPage = '上一页'
+ //return page.prevPage()."{page.currentPage}".page.nextPage()
+ //break
+ //
+ //case '2':
+ //page.nextPage = '下一页>>'
+ //page.prevPage = '<<上一页'
+ //page.firstPage = '首页'
+ //page.lastPage = '尾页'
+ //return page.firstPage().page.prevPage().'[第'.page.currentPage.'页]'.page.nextPage().page.lastPage().'第'.page.select().'页'
+ //break
+ //
+ //case '3':
+ //page.nextPage = '下一页'
+ //page.prevPage = '上一页'
+ //page.firstPage = '首页'
+ //page.lastPage = '尾页'
+ //pageStr = page.firstPage()." ".page.prevPage()
+ //pageStr .= ' '.page.nowbar('current')
+ //pageStr .= ' '.page.nextPage()." ".page.lastPage()
+ //pageStr .= "当前页{page.currentPage}/{page.totalPage} 共{page.totalSize}条"
+ //return pageStr
+ //break
+ //
+ //case '4':
+ //page.nextPage = '下一页'
+ //page.prevPage = '上一页'
+ //page.firstPage = '首页'
+ //page.lastPage = '尾页'
+ //pageStr = page.firstPage()." ".page.prevPage()
+ //pageStr .= ' '.page.nowbar('current')
+ //pageStr .= ' '.page.nextPage()." ".page.lastPage()
+ //return pageStr
+ //break
+ //}
+ return ""
}
+// 为指定的页面返回地址值
+func (page *Page) _getUrl(pageNoStr string) string {
+ return page.url + pageNoStr
}
-/*----------------private function (私有方法)-----------------------------------------------------------*/
-/**
-* 设置url头地址
-* @param: string url
-* @return boolean
-*/
-private function _setUrl(url = "")
-{
-if (!empty(url)) {
-//手动设置
-this->url = url.((stristr(url,'?')) ? '&' : '?').this->pageName."=";
-} else {
-parse = parse_url(_SERVER['REQUEST_URI']);
-query = array();
-if (!empty(parse['query'])) {
-parse_str(parse['query'], query);
-if (!empty(query) && isset(query[this->pageName])) {
-unset(query[this->pageName]);
-}
-}
-array = explode('?', _SERVER['REQUEST_URI']);
-if (!empty(query)) {
-this->url = array[0].'?'.http_build_query(query)."&{this->pageName}=";
-} else {
-this->url = array[0]."?{this->pageName}=";
-}
-}
+// 获取分页显示文字,比如说默认情况下_getText('1')将返回[1]
+func (page *Page)_getText(str string) string {
+ return page.formatLeft + str + page.formatRight
}
-/**
-* 设置当前页面
-*/
-private function _setCurrentPage(currentPage)
-{
-if(empty(currentPage)) {
-// 系统获取
-if(isset(_GET[this->pageName])) {
-this->currentPage = intval(_GET[this->pageName]);
-}
-} else {
-//手动设置
-this->currentPage = intval(currentPage);
-}
+// 获取链接地址
+func (page *Page)_getLink(url, text, title, style string) string {
+ if len(style) > 0 {
+ style = fmt.Sprintf(`class="%s"`, style)
+ }
+ if (page.isAjax) {
+ return fmt.Sprintf(`%s`, style, page.ajaxActionName, url, text)
+ } else {
+ return fmt.Sprintf(`"%s"`, style, url, title, text)
+ }
}
-/**
-* 为指定的页面返回地址值
-*
-* @param int pageNo
-* @return string url
-*/
-private function _getUrl(pageNo=1)
-{
-return this->url.pageNo;
-}
-
-/**
-* 获取分页显示文字,比如说默认情况下_getText('1')将返回[1]
-*
-* @param String str
-* @return string url
-*/
-private function _getText(str)
-{
-return this->formatLeft.str.this->formatRight;
-}
-
-//获取链接地址
-private function _getLink(url, text, title='', style='')
-{
-style = (empty(style)) ? '' : 'class="'.style.'"';
-if (this->isAjax) {
-//如果是使用AJAX模式
-return "ajaxActionName}('url');\">text";
-} else {
-return "text";
-}
-}
-
-//出错处理方式
-/**
- * 展示错误病终止执行.
- *
- * @param string function 错误产生的函数名称.
- * @param string errormsg 错误信息.
- *
- * @return void
- */
-private function _error(function, errormsg)
-{
-die('Error in file '.__FILE__.' ,Function '.function.'() :'.errormsg);
-}
-}
-
-
-
-
-
-
-
-