msmao 2014-08-29 09:26:48 11776次浏览 2条评论 3 0 0

控制器的代码

public function actionList($type = 'new', $page = 1)
{
        if($page < 1)
            $page = 1;

        $articles = Articles::model()->lists($type, $page);
        $pageCount = Articles::model()->pageCount();

        if($page > $pageCount)
            $page = $pageCount;

        $this->render('list',array(
            'articles'=>$articles,
            'currentPage'=>$page,
            'pageCount'=>$pageCount,
        ));
}

数据模型的代码

/**
  * list
  */
    public function lists($type, $page)
    {
        $limit = $this->_pageNum;
        $offset = $limit * ($page - 1);

        $criteria = new CDbCriteria;
        $criteria->select = '*';
        $criteria->condition = 'type != "page"';
        $criteria->limit = $limit;
        $criteria->offset = $offset;
        //$criteria->condition='postID=:postID';
        //$criteria->params=array(':postID'=>$id);
        if($type === 'hot'){
            //热门
            $criteria->order = 'viewNum DESC';
        }else{
            //最新
            $criteria->order = 'created DESC';
        }

        return $this->findAll($criteria);
    }

    /**
     * 总页数
     * pageCount
     * @return String
     */
    public function pageCount()
    {
        $condition = 'type != :type';
        $params = array(':type'=>'page');
        $articleCount = $this->count($condition, $params);
        //向上取整
        return ceil($articleCount / $this->_pageNum);
    }

$this->_pageNum 这个是每个显示的数据条数

视图的代码

   <ul class="pagination">
        <?php
        $firstPage = '<li class="hidden-xs">'.CHtml::link('1', array('', 'page'=>1)).'</li>';
        $lastPage = '<li>'.CHtml::link($pageCount, array('', 'page'=>$pageCount)).'</li>';
        $prevPage = '<li>'.CHtml::link('上一页', array('', 'page'=>$currentPage-1)).'</li>';
        $nextPage = '<li>'.CHtml::link('下一页', array('', 'page'=>$currentPage+1)).'</li>';
        $morePage = '<li class="disabled hidden-xs"><span>...</span></li>';

        if($currentPage > 1)
            echo $prevPage;

        if($currentPage > 3)
            echo $firstPage.$morePage;

        for($i = $currentPage-2; $i <= $currentPage+2; $i++) {

            $liStr = '<li class="hidden-xs">'.CHtml::link($i, array('', 'page'=>$i)).'</li>';
            if($i<1 || $i>$pageCount)
                $liStr = '';

            if($currentPage == $i)
                $liStr = '<li class="active">'.CHtml::link($i.' <span class="sr-only">(current)</span>',
                        array('', 'page'=>$i)).'</li>';

            echo $liStr;
        }

        if($currentPage < $pageCount-2)
            echo $morePage;

        if($currentPage < $pageCount)
            echo $nextPage;
        ?>
    </ul>

效果图

原本想添上效果图的,但是这个编辑器目前只支持网络上的链接

我是模仿http://segmentfault.com/的分页导航做的,差不多一致了

本人目前的水平也就做成这样了,可能大家有更好的方法,一起讨论讨论

目前暂时不做成组件扩展形式,以后会做的

最后只想说,这个编辑器太不好用了。。。 可能代码也是乱的,自己放在编辑器里格式化下吧

  • 评论于 2014-08-29 09:28 举报

    果真,编辑器出问题了,好在大致能看。 上面的链接错了, http://segmentfault.com/

    2 条回复
    评论于 2014-09-01 11:22 回复

    别依赖编辑器,就用正常的markdown语法去写。

    评论于 2015-07-17 13:09 回复

    您好,请教您,我希望可以定制分页的具体显示,我的需求是 显示首尾,上下,当前页五个按钮就够了,不要显示太多按钮,请问在哪里可以看到相关比较权威的资料呢?

  • 评论于 2015-01-13 17:16 举报

    为什么要重新发明轮子?
    自带的有什么不好使?

    1 条回复
    评论于 2015-09-23 09:35 回复

    自定义可以去实现所有的全部走接口 这样移动端 PC端都可以统一去调整管理

您需要登录后才可以评论。登录 | 立即注册