laravel4框架自带有分页处理类,并且与ORM模型结合,我们可以非常方便的使用这个分页,它提供了方便与给了一些扩展麻烦。
框架自带有三套分页显示模板,具体的可以修改\app\config\view.php配置文件中的'pagination' => 'pagination::slider-3'。
在这个配置中'pagination::slider-3'前面的pagination是指定要调用的分页处理类名,后台是给这个分页指定模板文件名,这几个模板都放在框架内部\vendor\laravel\framework\src\Illuminate\Pagination\views\目录下,一般这块模板显示了基本的HTML代码,还有就是显示的上一页与下一页都是英文,如果当前的分页结构相符合那则可以直接使用,如果不符合就得去修改,但修改内部的总是不怎么理想的,laravel框架的这个分页配置已经为我们提供了扩展的途径,但我们也不会把自己创建的分页模板放在框架的内部目录中。下面就来说明下怎样创建一个自定义的分页处理类与对应的模板。
首先我们要创建一个分页处理类(即文件)这个文件可以放的地方很多,只要能在自动加载类目录中就可以,一般可以创建在models下。
这个类最好继承于框架使用的分页类,这类修改的地址会更少,我们只需要重写基类中的输出部分就可以
class Dcpage extends Illuminate\Pagination\Presenter{
/**
* 获取分页可用连接HTML
*
* @param string $url
* @param int $page
* @param string $rel
* @return string
*/
public function getPageLinkWrapper($url, $page, $rel = null)
{
$rel = is_null($rel) ? '' : ' rel="'.$rel.'"';
return '<a href="'.$url.'"'.$rel.'>'.$page.'</a>';
}
/**
* 获取失效页HTML
*
* @param string $text
* @return string
*/
public function getDisabledTextWrapper($text)
{
return '<a class="disabled">'.$text.'</a>';
}
/**
* 获取当前页HTML
*
* @param string $text
* @return string
*/
public function getActivePageWrapper($text)
{
return '<a class="active">'.$text.'</a>';
}
/**
* 获取分页HTML字符串
* $minPageNum 最小省略分页个数
* @return string
*/
public function pageString($minPageNum=13)
{
if ($this->lastPage < $minPageNum)
{
$content = $this->getPageRange(1, $this->lastPage);
}
else
{
$content = $this->getPageSlider();
}
return $this->getHome().$this->getPrevious('上一页').'<span>'.$content.'</span>'.$this->getNext('下一页').$this->getEnd();
}
/**
* 获取首页HTML
*
* @param string $text
* @return string
*/
public function getHome($text = '首页')
{
if ($this->currentPage <= 1)
{
return $this->getDisabledTextWrapper($text);
}
else
{
$url = $this->paginator->getUrl(1);
return $this->getPageLinkWrapper($url, $text, 'prev');
}
}
/**
* 获取尾页HTML
*
* @param string $text
* @return string
*/
public function getEnd($text = '尾页')
{
if ($this->currentPage >= $this->lastPage)
{
return $this->getDisabledTextWrapper($text);
}
else
{
$url = $this->paginator->getUrl($this->lastPage);
return $this->getPageLinkWrapper($url, $text, 'next');
}
}
}
创建了分页类,我们还要添加一个分页模板:模板名为page.blade.php存放在\app\views\目录下
<?php if ($paginator->getLastPage() > 1): ?>
<div class="table-pagination">
<?php echo (new Dcpage($paginator))->pageString(); ?>
</div>
<?php endif; ?>
从分类模板我们可以看出laravel框架使用分页是从模板中调用分页类的,所以我们还要在\app\config\view.php配置文件中修改的'pagination' => 'pagination::slider-3' 为'pagination' => 'page'
通过以上的修改我们就可以直接使用
Models::paginate()->links();
//追加分布参数
Models::paginate()->appends(Input::get())->links();
获取分类的内容
注意:在分页模板中只有两个变量可以使用这个是框架已经固定死了
$environment 这个是Illuminate\Pagination\Factory对象,这个对象包含了请求对象,分页对象,模板名,分页请求键名等数据
$paginator 这个是models分页后返回的Illuminate\Pagination\Presenter对象这个对象可以直接生成分页HTML代码