Files
yakpanel-core/class/page.py

211 lines
7.7 KiB
Python
Raw Normal View History

2026-04-07 02:04:22 +05:30
#coding: utf-8
# +-------------------------------------------------------------------
# | YakPanel
# +-------------------------------------------------------------------
# | Copyright (c) 2015-2016 YakPanel(www.yakpanel.com) All rights reserved.
# +-------------------------------------------------------------------
# | Author: hwliang <hwl@yakpanel.com>
# +-------------------------------------------------------------------
import math,string,public,re
class Page():
#--------------------------
# 分页类 - JS回调版
#--------------------------
__PREV = public.lang("Prev")
__NEXT = public.lang("Next")
__START = public.lang("Start")
__END = public.lang("Last")
__COUNT_START = "Total"
__COUNT_END = ''
__FO = public.lang("From")
__LINE = ''
__LIST_NUM = 4
SHIFT = None #偏移量
ROW = None #每页行数
__C_PAGE = None #当前页
__COUNT_PAGE = None #总页数
__COUNT_ROW = None #总行数
__URI = None #URI
__RTURN_JS = False #是否返回JS回调
__START_NUM = None #起始行
__END_NUM = None #结束行
def __init__(self):
pass
# tmp = public.lang("Depends on the following software, please install [{1}] first")
# if tmp:
# self.__PREV = tmp['Prev']
# self.__NEXT = tmp['Next']
# self.__START = tmp['Start']
# self.__END = tmp['Last']
# self.__COUNT_START = tmp['Total']
# self.__COUNT_END = tmp['']
# self.__FO = tmp['From']
# self.__LINE = tmp['']
def GetPage(self,pageInfo,limit = '1,2,3,4,5,6,7,8'):
# 取分页信息
# @param pageInfo 传入分页参数字典
# @param limit 返回系列
self.__RTURN_JS = pageInfo['return_js']
self.__COUNT_ROW = pageInfo['count']
self.ROW = pageInfo['row']
self.__C_PAGE = self.__GetCpage(pageInfo['p'])
self.__START_NUM = self.__StartRow()
self.__END_NUM = self.__EndRow()
self.__COUNT_PAGE = self.__GetCountPage()
self.__URI = self.__SetUri(pageInfo['uri'])
self.SHIFT = self.__START_NUM - 1
keys = limit.split(',')
pages = {}
#起始页
pages['1'] = self.__GetStart()
#上一页
pages['2'] = self.__GetPrev()
#分页
pages['3'] = self.__GetPages()
#下一页
pages['4'] = self.__GetNext()
#尾页
pages['5'] = self.__GetEnd()
#当前显示页与总页数
pages['6'] = "<span class='Pnumber'>" + str(self.__C_PAGE) + "/" + str(self.__COUNT_PAGE) + "</span>"
#本页显示开始与结束行
pages['7'] = "<span class='Pline'>" + self.__FO + str(self.__START_NUM) + "-" + str(self.__END_NUM) + self.__LINE + "</span>"
#行数
pages['8'] = "<span class='Pcount'>" + self.__COUNT_START +' '+ str(self.__COUNT_ROW) + self.__COUNT_END + "</span>"
#构造返回数据
retuls = '<div>';
for value in keys:
retuls += pages[value]
retuls +='</div>';
#返回分页数据
return retuls;
def __GetEnd(self):
#构造尾页
endStr = ""
if self.__C_PAGE >= self.__COUNT_PAGE:
endStr = '';
else:
if self.__RTURN_JS == "":
endStr = "<a class='Pend' href='" + self.__URI + "p=" + str(self.__COUNT_PAGE) + "'>" + self.__END + "</a>"
else:
endStr = "<a class='Pend' onclick='" + self.__RTURN_JS + "(" + str(self.__COUNT_PAGE) + ")'>" + self.__END + "</a>"
return endStr
def __GetNext(self):
#构造下一页
nextStr = ""
if self.__C_PAGE >= self.__COUNT_PAGE:
nextStr = '';
else:
if self.__RTURN_JS == "":
nextStr = "<a class='Pnext' href='" + self.__URI + "p=" + str(self.__C_PAGE + 1) + "'>" + self.__NEXT + "</a>"
else:
nextStr = "<a class='Pnext' onclick='" + self.__RTURN_JS + "(" + str(self.__C_PAGE + 1) + ")'>" + self.__NEXT + "</a>"
return nextStr
def __GetPages(self):
#构造分页
pages = ''
num = 0
#当前页之前
if (self.__COUNT_PAGE - self.__C_PAGE) < self.__LIST_NUM:
num = self.__LIST_NUM + (self.__LIST_NUM - (self.__COUNT_PAGE - self.__C_PAGE));
else:
num = self.__LIST_NUM
n = 0
for i in range(num):
n = num - i
page = self.__C_PAGE - n;
if page > 0:
if self.__RTURN_JS == "":
pages += "<a class='Pnum' href='" + self.__URI + "p=" + str(page) + "'>" + str(page) + "</a>"
else:
pages += "<a class='Pnum' onclick='" + self.__RTURN_JS + "(" + str(page) + ")'>" + str(page) + "</a>"
#当前页
if self.__C_PAGE > 0:
pages += "<span class='Pcurrent'>" + str(self.__C_PAGE) + "</span>"
#当前页之后
if self.__C_PAGE <= self.__LIST_NUM:
num = self.__LIST_NUM + (self.__LIST_NUM - self.__C_PAGE) + 1
else:
num = self.__LIST_NUM;
for i in range(num):
if i == 0:
continue
page = self.__C_PAGE + i;
if page > self.__COUNT_PAGE:
break;
if self.__RTURN_JS == "":
pages += "<a class='Pnum' href='" + self.__URI + "p=" + str(page) + "'>" + str(page) + "</a>"
else:
pages += "<a class='Pnum' onclick='" + self.__RTURN_JS + "(" + str(page) + ")'>" + str(page) + "</a>"
return pages;
def __GetPrev(self):
#构造上一页
startStr = ''
if self.__C_PAGE == 1:
startStr = '';
else:
if self.__RTURN_JS == "":
startStr = "<a class='Ppren' href='" + self.__URI + "p=" + str(self.__C_PAGE - 1) + "'>" + self.__PREV + "</a>"
else:
startStr = "<a class='Ppren' onclick='" + self.__RTURN_JS + "(" + str(self.__C_PAGE - 1) + ")'>" + self.__PREV + "</a>"
return startStr
def __GetStart(self):
#构造起始分页
startStr = ''
if self.__C_PAGE == 1:
startStr = '';
else:
if self.__RTURN_JS == "":
startStr = "<a class='Pstart' href='" + self.__URI + "p=1'>" + self.__START + "</a>"
else:
startStr = "<a class='Pstart' onclick='" + self.__RTURN_JS + "(1)'>" + self.__START + "</a>"
return startStr;
def __GetCpage(self,p):
#取当前页
if p:
return p
return 1
def __StartRow(self):
#从多少行开始
return (self.__C_PAGE - 1) * self.ROW + 1
def __EndRow(self):
#从多少行结束
if self.ROW > self.__COUNT_ROW:
return self.__COUNT_ROW
return self.__C_PAGE * self.ROW
def __GetCountPage(self):
#取总页数
return int(math.ceil(self.__COUNT_ROW / float(self.ROW)))
def __SetUri(self,request_uri):
#构造URI
try:
request_uri = re.sub(r"&p=\d+",'&',request_uri)
request_uri = re.sub(r"\?p=\d+",'?',request_uri)
if request_uri.find('&') == -1:
if request_uri[-1] != '?': request_uri += '?'
else:
if request_uri[-1] != '&': request_uri += '&'
return request_uri
except: return ''