关于分页类的疑惑,为何要区分是否分页,

#1 霸气千秋

我在使用speedphp时使用smarty模板,但是数据少与每页条数时,speedphp不再返回数据,导致页面无数据,没办法只好去修改那个判断了,下边是我修改的结果,不知道大家有什么好的方法没有,修改是从spModel.php的440行开始的
                /* 此处做了修改  修改前的内容在本页最后注释着 */
                /* 作者在这里进行了判断,是否分页,但是在smarty中使用时,无分页时则无数据返回,导致页面显示不正常 */
               
                        $total_page = ceil( $total_count / $pageSize );
                        $page = min(intval(max($page, 1)), 0==$total_count?1:$total_count); // 对页码进行规范运算//由于我把判断分页删除了,故总记录数可能为零,所以记录为空时,$page会变成零
                        $this->pageData = array(
                                "total_count" => $total_count,                                 // 总记录数
                                "page_size"   => $pageSize,                                    // 分页大小
                                "total_page"  => $total_page,                                  // 总页数
                                "first_page"  => 1,                                            // 第一页
                                "prev_page"   => ( ( 1 == $page ) ? 1 : ($page - 1) ),         // 上一页
                                "next_page"   => ( ( $page == (0==$total_page?1:$total_page) ) ? (0==$total_page?1:$total_page) : ($page + 1)),     // 下一页//同上 由于 删除了是否进行判断,故 会出现问题//这里可以考虑将$total_page的值改为一,或者使用中间变量
                                "last_page"   => $total_page,                                  // 最后一页
                                "current_page"=> $page,                                        // 当前页
                                "all_pages"   => array()                                           // 全部页码
                        );
                        for($i=1; $i <= $total_page; $i++)$this->pageData['all_pages'][] = $i;
                        var_dump($limit = ($page - 1) * $pageSize . "," . $pageSize);               
                        if('findSql'==$func_name)$conditions = $this->model_obj->_db->setlimit($conditions, $limit);
                       
                /*结束修改        */               


该贴已经同步到 霸气千秋的微博

2011-07-25 16:50:23

#2 霸气千秋

代码怎么发成那个样子了,我再试试看

2011-07-25 16:52:45

#3 jake

“数据少与每页条数时,speedphp不再返回数据”,

那么,就是如果返回数据,那么就要分页,不返回数据,那么就不分页,很难区分吗?
在smarty里面,if一下$pager是否非空然后再foreach,这是很正常的逻辑。列表什么的都需要这一步。

{if $pager}
分页
{else}
不分页
{/if}
当然,在真实开发中,一般就是{if $pager}{/if}来判断是否显示分页的DIV。

2011-07-25 21:33:10

#4 霸气千秋

:lol关键是,在{ 第1页/共1页 共10条 每页显示10 第一页 上一页 下一页 最有一页 }这里 我用的是 $[ret][fenye] 来返回数据直接使用,如果没有返回值的话,就需要重写html,不然数据全是空的,建议给上返回值, 不然要是html中的这部分代码很复杂的话,。。。写着会很痛苦。。。。

2011-07-26 09:20:23

#5 jake

有个简单的方法
控制器内:
$pager = xxx->spPager()->getPager();
if( ! $pager){
$pager = 你想要返回的东西。
}// 然后再发给模板
$this->pager = $pager;
当然,以上方法在模板里面也可以做,其实就是简单的IF判断而已。


模板:

{if $pager}
这里是有分页的情况:
{ 第1页/共2页 共20条 每页显示10 第一页 上一页 下一页 最有一页 }

{else}



这里是没有分页的情况:
{ 第1页/共1页 共count(记录)条 每页显示10  }

{/if}

2011-07-26 12:48:16

#6 wwwzjy

似乎在没有分页的时候<{$pager.total_count}>,<{$pager.total_page}><{$pager.page_size}>这几个的返回值都是空的。

2011-07-26 20:46:04

#7 jake

似乎在没有分页的时候,这几个的返回值都是空的。
wwwzjy 发表于 2011-7-26 20:46
所以就可以判断分页是否需要显示了。楼主只是将这个判断放到spModel里面,那是完全没必要的。M层是提供数据,而V层(smarty)才是根据数据判断显示内容的所在。

2011-07-26 20:58:41

#8 霸气千秋

:dizzy:
这个方法我知道,但是我所不解的是为什么要 区分是否分页,并返回数据
为何不 即使不分页,也要返回相关的基础信息,


    [fenye] => Array
        (
            [total_count] => 8
            [page_size] => 15
            [total_page] => 1
            [first_page] => 1
            [prev_page] => 1
            [next_page] => 1
            [last_page] => 1
            [current_page] => 1
            [all_pages] => Array
                (
                    [0] => 1
                )

        )

比如我在模板中使用了 起其中的一部分数据,如果按照jake的思路
就要在controller 中区分分数数据是否为空,
然后在smarty中根据 controller中 返回的数据 来判断显示的是 有数据的还是没有数据的
这样是不是过于复杂了,
不如直接下model中返回,省去了 在 controller 和 smarty 的 判断
郁闷

2011-07-27 10:24:14

#9 虞飞

我在使用speedphp时使用smarty模板,但是数据少与每页条数时,speedphp不再返回数据,导致页面无数据,
这个是什么意思?比如说你设定一页显示10条数据,你是说,当数据一共只有6条的时候,你的页面上就什么数据也没有,一条也没显示吗?那是你自己的代码有问题,关分页类什么事情啊。我试过的,完全正常。仔细检查下你自己的代码吧,不要去修改分页类的。

2011-07-27 11:33:56

#10 虞飞

你现在改来改去,把你自己都绕晕了,我也看着眼晕。

2011-07-27 11:34:47

#11 jake

这个方法我知道,但是我所不解的是为什么要 区分是否分页,并返回数据
为何不 即使不分页,也要返 ...
霸气千秋 发表于 2011-7-27 10:24
“就要在controller 中区分分数数据是否为空,
然后在smarty中根据 controller中 返回的数据 来判断显示的是 有数据的还是没有数据的
这样是不是过于复杂了,”
   
这两句话是不是误解了我的意思?

我是说可以在控制器做一下IF判断,也可以在smarty里面做,随便一边做都可以,怎么就说成两边都要做了呢?

先看清楚我的回复。



这只是一个小的IF判断,大家在开发的时候用就知道了,我也不说太多了,我的几个回帖都是在重复说明这个小IF的使用。

2011-07-27 12:09:15

#12 霸气千秋

这个是什么意思?比如说你设定一页显示10条数据,你是说,当数据一共只有6条的时候,你的页面上就什么数 ...
虞飞 发表于 2011-7-27 11:33
大哥,你用过分页没,我是说
    [fenye] => Array
        (
            [total_count] => 8
            [page_size] => 15
            [total_page] => 1
            [first_page] => 1
            [prev_page] => 1
            [next_page] => 1
            [last_page] => 1
            [current_page] => 1
            [all_pages] => Array
                (
                    [0] => 1
                )

        )


这部分,不是说内容,,,

2011-07-27 20:55:37

#13 wubi

回复 12 霸气千秋


   jake已经说的很明白了。那只是smarty的简单的一个IF判断

2011-07-27 22:17:30

#14 霸气千秋

这个是什么意思?比如说你设定一页显示10条数据,你是说,当数据一共只有6条的时候,你的页面上就什么数 ...
虞飞 发表于 2011-7-27 11:33
没看懂我的意思么
我说的是这一部分为空,不是数据为空,
    [fenye] => Array
        (
            [total_count] => 8
            [page_size] => 15
            [total_page] => 1
            [first_page] => 1
            [prev_page] => 1
            [next_page] => 1
            [last_page] => 1
            [current_page] => 1
            [all_pages] => Array
                (
                    [0] => 1
                )

        )
:Q郁闷,

2011-07-28 00:24:01

#15 霸气千秋

回复 11 jake
:Q,我知道怎么做,只是不解为什么要区分,是否返回分页数据,这个才是我困惑的,而不是怎么做,,,

2011-07-28 22:34:45