### 分页 Page
分页是在进行列表 List 查询过程中,基本都会使用到,为了更加快速的进行产品开发,我们对分页操作进行了封装,并且继承了 ThinkPHP 原生的 Page.class.php 类库,封装了分页调用函数。
**位置:**Application\Common\Common\function.php
**参数:**
> * @param int $count 要分页的总记录数
> * @param int $pagesize 每页查询条数
**调用:**
> $page = getpage($count, 10); // 调用分页函数
> limit($page->firstRow.','.$page->listRows) // 传值分页搜索
> $this->assign('page', $page->showFront()); // 分页赋值模版
**实例:**
1、Controller 控制器的方法中:
~~~
$count = M('system_log')->count(); // 统计数量
$page = getpage($count, 10); // 调用分页函数,Param总数,每一页显示10条
$log_list = M('system_log')
->limit($page->firstRow.','.$page->listRows) // 传值分页搜索
->select();
$this->assign('log_list', $log_list);
$this->assign('page', $page->showFront()); // 分页赋值模版
$this->display();
~~~
2、View 模版赋值
~~~
<volist name="log_list" id="vo">
<tr>
<td>{$vo.id}</td>
<td>{$vo.nickname}</td>
</tr>
</volist>
{$page} <!-- 调用分页 -->
~~~
在需要调用的分页位置,一般在列表 List 下面
* * * * *
**带搜索的分页实例:**
在进行列表分页的时候,经常会用到多个搜索条件的列表,而且要进行分页,下面实例讲到具体的使用和调用
1、搜索分页第一步是进行条件的搜索,搜索 Form 的提交方式我们一般选择 GET,POST 也可以,而 GET 我们可以在 URL 更完成的看到搜索的条件的传值,更有利于分页的调试,那么约定好搜索就使用 GET 方式传值,其他的写法都没什么区别,**分页方法会自动取值并赋值在分页的 URL 上面进行分页**。
搜索的URL:
> index?user_id=17 // 传值 user_id
分页后的URL
> index/user_id/17/p/2.html // 分页带出 user_id
2、多选条件的搜索分页
在进行 Select 多选和 Input checkbox 多选框等的搜索的时候,后台接收的数据会是一个数组,那该怎么在分页进行传值呢?
> array (size=3)
> 0 => string 'banana'
> 1 => string 'grape'
> 2 => string 'mango'
为了解决多选数据是数组的问题,在封装的函数里面将数组自动判断转换成用“-” 符号连接的字符串,在赋值在分页的URL上面
> index/name/banana-grape-mango/p/2.html
而在后台取数据的时候,**提交 Form 表单的时候获取的 $name 是一个数组,在分页的时候获取的 $name 是一个字符串**,需要将字符串进行转换为数组
~~~
$name = I('param.name');
if(!is_array($name)) {
$name = explode("-", $name); // 拆分字符串为数组
}
~~~
**完整代码:**
~~~
// 调用 Think Page 的分页
/*
* @param int $count 要分页的总记录数
* @param int $pagesize 每页查询条数
* @return \Think\Page
*/
function getpage($count, $pagesize = 10){
$p = new Think\Page($count,$pagesize);
$p->lastSuffix = false;
$p->setConfig('prev','上一页');
$p->setConfig('next','下一页');
$p->setConfig('last','尾页');
$p->setConfig('first','首页');
$p->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%');
$arr_input = I('param.'); // 获取 input 搜索表单数据
foreach($arr_input as $key => $val) {
if (is_array($val)) { // 如果是数组拆分成连接字符串
$str = '';
foreach ($val as $k => $v) {
$str = $str . '-' . $v;
}
$val = substr($str,1,strlen($str)); // 去掉第一个字符 -
}
$p->parameter[$key] = $val;
}
return $p;
}
~~~
**重写的 page.class.php 类的 show 方法:**
~~~
/**
* [showFront 前端分页样式]
* @return [string] [组装好的链接]
*/
public function showFront() {
$this->config['header'] = '<li><span class="rows">%NOW_PAGE% / %TOTAL_ROW% 条记录</span></li>';
$this->config['prev'] = "上一页";
$this->config['next'] = "下一页";
$this->rollPage = 4;
if(0 == $this->totalRows) return '';
/* 生成URL */
$this->parameter[$this->p] = '[PAGE]';
$this->url = U(ACTION_NAME, $this->parameter);
/* 计算分页信息 */
$this->totalPages = ceil($this->totalRows / $this->listRows); //总页数
if(!empty($this->totalPages) && $this->nowPage > $this->totalPages) {
$this->nowPage = $this->totalPages;
}
/* 计算分页零时变量 */
$now_cool_page = $this->rollPage/2;
$now_cool_page_ceil = ceil($now_cool_page);
$this->lastSuffix && $this->config['last'] = $this->totalPages;
//上一页
$up_row = $this->nowPage - 1;
$up_page = $up_row > 0 ? '<li><a href="' . $this->url($up_row) . '">' . $this->config['prev'] . '</a></li>' : '';
//下一页
$down_row = $this->nowPage + 1;
$down_page = ($down_row <= $this->totalPages) ? '<li>
<a href="' . $this->url($down_row) . '">' . $this->config['next'] . '</a>
</li>' : '';
//第一页
$the_first = '';
if($this->totalPages > $this->rollPage && ($this->nowPage - $now_cool_page) >= 1){
$the_first = '<li><a href="' . $this->url(1) . '">' . $this->config['first'] . '</a></li>';
}
//最后一页
$the_end = '';
if($this->totalPages > $this->rollPage && ($this->nowPage + $now_cool_page) < $this->totalPages){
$the_end = '<li><a href="' . $this->url($this->totalPages) . '">' . $this->config['last'] . '</a></li>';
}
//数字连接
$link_page = "";
for($i = 1; $i <= $this->rollPage; $i++){
if(($this->nowPage - $now_cool_page) <= 0 ){
$page = $i;
}elseif(($this->nowPage + $now_cool_page - 1) >= $this->totalPages){
$page = $this->totalPages - $this->rollPage + $i;
}else{
$page = $this->nowPage - $now_cool_page_ceil + $i;
}
if($page > 0 && $page != $this->nowPage){
if($page <= $this->totalPages){
$link_page .= '<li><a href="' . $this->url($page) . '">' . $page . '</a></li>';
}else{
break;
}
}else{
if($page > 0 && $this->totalPages != 1){
$link_page .= '<li><span class="current">' . $page . '</span></li>';
}
}
}
//替换分页内容
$page_str = str_replace(
array('%UP_PAGE%', '%HEADER%', '%NOW_PAGE%', '%DOWN_PAGE%',
'%FIRST%', '%LINK_PAGE%', '%END%', '%TOTAL_ROW%', '%TOTAL_PAGE%'),
array(
$up_page,
$this->config['header'],
$this->nowPage,
$down_page, $the_first,
$link_page,
$the_end,
$this->totalRows,
$this->totalPages
),
$this->config['theme']);
// return "{$page_str}"; 底下是重写的分页样式 2016-12-26 jig update
$result = '<div class="col-xs-4">
<div class="page-num">共' . $this->totalPages . '页' . $this->totalRows . '条数据</div>
</div>
<div class="col-xs-8">
<div class="erppagination2">
<ul class="pagination pagination-sm" style="margin-top:0;">'.
$page_str
.'</ul>
</div>
</div>';
return $result;
}
~~~
- 模版
- 前言
- 项目架构
- 项目规范
- HTML
- CSS
- Javascript
- PHP
- MySQL
- 注意规范
- 开发版本管理
- 开发流程
- 系统配置
- 阿里云服务器配置
- 计划任务配置说明
- 开发示例
- Page分页
- Search_param搜索结果赋值
- Add新增
- Edit编辑
- Ajax表单验证
- Ajax二级联动
- Excel 导出数据首位不去0的方法
- POS总部控制
- 下载CSV格式的模板
- 订单唯一码表和订单SKU表实收金额生成
- 快捷日期选择
- JS函数
- ajax_send
- ajax_result
- createQrCodes
- createBarCodes
- printTpl
- JS插件
- BootstrapValidator表单验证插件
- Address省市区插件
- Bootstrap-datepicker日期插件
- Bootstrap-select多选框插件
- Toastr消息提示插件
- PalyAudit扫描声音提示插件
- WebUploader多图片上传插件
- Ueditor富文本编辑器插件
- Function
- alert
- object_to_array
- array_to_object
- get_address
- set_param_url
- get_shops_name
- get_user_name
- get_warehouse
- get_cheapest_sku
- print_attr(新)
- print_img(新)
- get_spu_no(新)
- get_type_name(新)
- get_brand_en(新)
- get_cat_name(新)
- get_attr_name(新)
- spu_cat_info(新)
- get_time_event_price
- get_vendors
- check_total_reduce
- check_total_discount
- get_inventory
- get_delivery
- get_sale_inventory
- get_customer_name
- phone_protection
- get_order_no
- get_event_name
- get_order_status
- get_item_status
- get_ditch_name
- get_card_no
- get_shop_sales
- get_pay_name
- get_season
- amt_format
- get_cat_parent
- print_attr_id
- round_bcadd
- round_bcsub
- round_bcmul
- round_bcdiv
- get_account_name
- Controller
- Common_BaseController
- check_membership_card
- get_menu_list
- importErrorMassage
- Wpos_IndexController
- get_customer_vip_card
- get_shops_id
- calculate_active_integral
- check_numbers_active
- check_goods_active
- Woms_IndexController
- Model
- View
- category
- cycle_date.html
- shop_select门店多选搜索框
- 品牌A-Z排序多选brand_mc.html
- 供应商代码A-Z排序vendor_no_mc.html
- Lib
- BuyerLib
- WarehouseLib
- EventLib
- getTimeEventPrice
- getVipType
- getEvent
- orderTotalEvent
- orderTimeEvent
- getTotalReduce
- getTotalDiscount
- SaleLib
- CustomerLib
- addCustomerService
- GiftcardLib
- WechatLib
- wxRefund
- OrdersLib
- orderLog
- calculatePayinAmount
- calculateSubtotal
- correctPayinAmount
- saveOrderAddress
- getOrderAddress
- setDeliveryNo
- SyncLib
- updateOuterStock
- UserLib
- createCommission
- FlowLib
- orderList
- addOrder
- addLog
- orderInfo
- checkSku
- orderSave
- orderStop
- orderExecute
- skuEdit
- orderPrinta
- scanGoods
- boxClose
- orderOut
- take
- bview
- check
- deliveryStatus
- checkGoods
- GoodsLib
- createGoodsNo
- createNewGoodsNo
- getSystemStyleNo
- getDim
- MallLib
- smsLog
- GoodsBaseLib
- getBrandInfo
- getBrandsInfo
- getAttrIdArray
- getPrintAttr
- getMustAttr
- getCatIdInfo
- valTypeId
- valsTypeId
- getCatNoInfo
- getCatInfo
- getAttrArr
- getAttrInfo
- getValInfo
- getAttrId
- getValId
- getAttrSeaon
- getValueId
- PointsLog
- pointsIn
- pointsUp
- EcGoodsLib
- getSkuInventory
- Tools
- CsvTools
- csvImport
- csvExport
- ExcelTools
- importExcel
- exportExcel
- exportHeadExcel
- MailTools
- SmsTools
- sendMessage
- UploadTools
- ExportTools
- exportData
- TaobaoTools
- getOnsaleItems
- getSkusItems
- PicturesTools
- uploadPicture
- Plugins
- WxBase
- Taobao
- 问题反馈