jake speed.php 分页按常规应该稍作修改?
发布于:2022-01-17 09:50:54
#1 冈刀飞絮
public function pager($page, $pageSize = 10, $scope = 10, $total){
$this->page = null;
if($total > $pageSize){
$total_page = ceil($total / $pageSize);
$page = min(intval(max($page, 1)), $total);
$this->page = array(
'total_count' => $total,
'page_size' => $pageSize,
'total_page' => $total_page,
'first_page' => 1,
'prev_page' => ( ( 1 == $page ) ? 1 : ($page - 1) ),
'next_page' => ( ( $page == $total_page ) ? $total_page : ($page + 1)),
'last_page' => $total_page,
'current_page'=> $page,
'all_pages' => array(),
'offset' => ($page - 1) * $pageSize,
'limit' => $pageSize,
);
$scope = (int)$scope;
if($total_page <= $scope ){
$this->page['all_pages'] = range(1, $total_page);
}elseif( $page <= $scope/2) {
$this->page['all_pages'] = range(1, $scope);
}else{
$this->page['all_pages'] = range($page - $scope/2 , min( $page + $scope/2 -1, $total_page));
}
}
return $this->page;
}
半径前半大后半小。
再附加一个使用分页的列子:
Action:
$page = isset($_GET["page"])? $_GET['page']:1 ;
$my = new My();
$oo = $my->findAll("","id desc","*", array($page, 20));
$this->page = $my->page;
$this->mydd = $oo;
$this->display("test.html");
模板:
2015-10-18 15:15:02
#2 jake
mark一下先。{:soso_e181:}
2015-10-18 20:16:15
#3 冈刀飞絮
$controller_name = $__controller.'Controller';
$httpMethod =strtolower($_SERVER['REQUEST_METHOD']) ;
$action_name = $httpMethod.ucfirst($__action);
if(!class_exists($controller_name, true)) err("Err: Controller '$controller_name' is not exists!");
$controller_obj = new $controller_name();
if(!method_exists($controller_obj, $action_name)){
$action_name = 'action'.$__action;
if(!method_exists($controller_obj, $action_name)) err("Err: Method '$action_name' of '$controller_name' is not exists!");
};
jake 这段做这样改动 目的:
1、支持 resultful 相关特性
2、最终要的是权限控制的时候方便了,平时我们控制权限的时候比如 修改 会有个 edit , editSave 都需要控制,
而在业务上面这种事很lower的 ,想想客户打开edit页面他肯定是应该有editSave全新的吧。否则那只是个看无意义
而上面这样一改 都是 edit 只需要控制一个 edit的全新 , edit 对于对应了 getEdit edit 对于客户端post提交的 postEdit
另外 jake github 我 request pull 是否有人维护,如果有人维护,以后我有想法改动的网github去提交,然后请你审核,如果好的合并到主干??
2015-10-21 14:34:20
#4 jake
github我在维护,看到了你的提交。
在code的commit里面我有做了些评论,你提交的代码里面有加上调试的东西,这些不方便合并的。
这帖子里面说的页码,我还没来得及测试,最近比较忙。
这次pull request关键是restful的模式,当然,如果按你说的关于权限或者CRUD操作,实际上用restful是浪费了。一个Edit的get和post,实际上写到一个action里面,会更好看很多。
restful更多是跟风(人有我有),当然有一定的意义,目前用的最多是移动APP端。因为移动端访问HTTP如果有更直观的URL会更方便——这是restful支持者说的——如果没有优点那就没必要存在了。
不过,以上代码的改动,要看看是否“值得”,这里比较耗能的是多了一次method_exists,如果这个restful一直没人用,但这个method_exists也是一直会执行的。
一般这种类型的,仅是少量用户使用的不常用功能,很多框架会先做个外面的开关,这样在配置上可以打开,就不会耗能太多。
不过我个人的意见是,restful实际上是通过URLrewrite会更简单,而且只是对$_SERVER['REQUEST_METHOD']进行一个小的判断。所以即便没有修改这段代码,一般开发者也能通过$_SERVER['REQUEST_METHOD']的判断来完成restful系统的开发。
2015-10-21 15:23:58
#5 jake
对于协作开发,我的初步想法是建个Q群或微信群啥的,可以即时聊一些想法。
然后再通过github的合并之类的进行代码协作。
2015-10-21 15:26:27
#6 冈刀飞絮
1、restful 只是个幌子, 重点是在方便权限控制
edit editSave 在权限表里面一般要添加两条记录才能控制,其实就是一个修改 有 修改页面的权限肯定就得有保存修改的权限。
而用 getEdit 和 postEdit方式 直接控制的路由路径只有一个 /edit (不知道我是否表达清楚,你是否看明白我的意思)
2、加判断开启这款代码这个我非常赞成
2015-10-21 17:48:55
#7 jake
哈哈,Acl的做法也不一定是那样的。新版的做法权限控制放init里面,自己写就行。
另外,对于数据库记录来说,一条记录和两条,区别不大。
2015-10-21 18:05:35
#8 冈刀飞絮
(当然我说的前提都是类似我说的普通权限管理做法) 对于数据库来说只是多了一条记录,但是对于业务操作权限管理的人员来说就非常迷茫,很纠结。这个东西几年前的项目,项目操作管理人员非常不舒服这一点。 本来勾选一个修改权限,还来一个修改保持。 不够修改保持修改页面能打开,但是保存按钮由于权限控制着不显示不能保持,所以这个很容易在 客户体验上带来弊端。
综上从实际业务 用户体验出发的话这样带来很大的好处。
2015-10-21 20:25:46
#9 冈刀飞絮
baseController 重写init(){} 里面做法,也只是说这段代码的逻辑写在这里头。类似一个其他框架的filter,但是如果控制某个系统的权限还得是数据库保存相关的权限,然后设置角色什么的管理来处理,实际思路还是一样,给业务上体现也是一样吧。
2015-10-21 20:32:09
#10 jake
其实你说的也是对的。
我的意思并非Acl不好,而是说sp那个acl,原本是给比较简单的权限逻辑使用的。如果按单个控制器/动作进行控制的方式,其实挺累的。
实际上真正跑起来的权限系统,都会比这个更复杂。
真正做起来,都会在抽象层面再进行一次合并权限,比如说你说的表单+提交的action,会在设置权限的位置合并起来成为一个选项给操作人员使用。
不过大部分时候,我们会把整个CURD某个东西的控制器,当作一个权限来看,比如说“写文章”权限,这里隐含了是文章列表、写入、修改、删除等几个action了。
综上,我才会说其实对权限系统来说,多少条记录问题不大,像上面说的控制粒度到控制器,那么实际上数据库只有一条记录,甚至没有记录,因为这个控制是放init里面的。
2015-10-22 08:35:06