萤火小程序商城后台
需求:框架列表默认每页显示15条,添加一个输入框,输入每页显示数量
改造前
改造后
\thinkphp\library\think\paginator\driver\Bootstrap.php 修改render函数,添加一个生成每页显示条数输入框函数
/**
* 渲染分页html
* @return mixed
*/
public function render()
{
if ($this->hasPages()) {
if ($this->simple) {
return sprintf(
'<ul class="pager">%s %s %s</ul>',
$this->getPreviousButton(),
$this->getNextButton(),
$this->setPageSize()
);
} else {
return sprintf(
'<ul class="pagination">%s %s %s %s</ul>',
$this->getPreviousButton(),
$this->getLinks(),
$this->getNextButton(),
$this->setPageSize()
);
}
}
}
/**
* 生成每页显示条数输入框
* date 2021-04-24 14:41:08
* author zm
* @return string
*/
protected function setPageSize(){
$page = 1;
$url = $this->url( $page);
//输入框显示
if(strpos($url,'page_size') !== false){
//获取url参数
$queryParts = explode('&', $url);
$params = array();
foreach ($queryParts as $param) {
$item = explode('=', $param);
$params[$item[0]] = $item[1];
}
$page_size = $params['page_size'];
//url去除 &page_size=xxx
$len = strlen($page_size) + 11;
$url = substr($url, 0, '-'.$len);
}else{
$page_size = 15;
}
$str = '<li class="am-input-group am-input-group-sm tpl-form-border-form"><input class="am-form-field am-radius am-input-sm" style="width: 45px;" type="text" name="page_size" id="page_size" title="每页显示数据条数" value='. $page_size .' ></li>';
$str .= '<li><a href="" id="page_size_btn" data-url="' . htmlentities($url) . '"> 确定 </a></li>';
$str .= '<script> $("#page_size_btn").click(function () {
var url = $(this).data()["url"];
var page_size = $("#page_size").val();
var new_url = url + "&page_size=" + page_size;
$(this).attr("href",new_url) ; })</script>';
return $str;
}
\thinkphp\library\think\db\Query.php
public function paginate($listRows = null, $simple = false, $config = [])
{
if (is_int($simple)) {
$total = $simple;
$simple = false;
}
if (is_array($listRows)) {
$config = array_merge(Config::get('paginate'), $listRows);
$listRows = $config['list_rows'];
} else {
$config = array_merge(Config::get('paginate'), $config);
$listRows = $listRows ?: $config['list_rows'];
}
//前端输入的每页显示数量
$page_size = request()->param('page_size');
if(!empty($page_size) && preg_match("/^[1-9][0-9]*$/" ,$page_size) ){
//有输入并且为正整数
$listRows = $page_size;
}
//coding...
}
前端页面
<div class="am-u-lg-12 am-cf">
<div class="am-fr"><?= $list->render() ?> </div>
<div class="am-fr pagination-total am-margin-right">
<div class="am-vertical-align-middle">总记录:<?= $list->total() ?></div>
</div>
</div>