laravel4自定义分页

简介:

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代码

 

相关文章
CSDN博客如何添加微信公众号二维码
CSDN博客如何添加微信公众号二维码
530 0
|
9月前
|
搜索推荐 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 7.3 应用实践之 精准营销场景
本文介绍了基于用户画像的精准营销技术,重点探讨了如何通过标签组合快速圈选目标人群。实验分为三部分: 1. **传统方法**:使用字符串存储标签并进行模糊查询,但性能较差,每次请求都需要扫描全表。 2. **实验1**:引入`pg_trgm`插件和GIN索引,显著提升了单个模糊查询条件的性能。 3. **实验2**:改用数组类型存储标签,并结合GIN索引加速包含查询,性能进一步提升。 4. **实验3**:利用`smlar`插件实现近似度过滤,支持按标签重合数量或比例筛选。
191 3
|
Cloud Native Devops 持续交付
云原生架构的演进与实践
本文深入探讨了云原生架构的核心概念、技术组件及其在现代软件开发中的应用。通过分析容器化、微服务、持续集成/持续部署(CI/CD)等关键技术,揭示了这些技术如何共同促进应用程序的灵活性、可扩展性和高可用性。文章还讨论了云原生架构实施过程中面临的挑战和最佳实践,旨在为开发者和企业提供一套实用的指导方针,以便更有效地利用云计算资源,加速数字化转型的步伐。
298 5
|
运维 图形学 Python
从零开始的PICO教程(2)--实时预览应用场景
这篇文章是关于如何使用PICO Unity Live Preview Plugin在PICO设备上进行实时预览应用场景的教程,包括准备工作、操作步骤和故障排查方法。
|
TensorFlow 算法框架/工具 C++
构建NLP 开发问题之如何将模型导出为 ONNX、TensorRT 或 Tensorflow 格式以便部署
构建NLP 开发问题之如何将模型导出为 ONNX、TensorRT 或 Tensorflow 格式以便部署
|
自然语言处理 程序员 Windows
[UE虚幻引擎] DTSpeechVoice 文字转语音播放 插件说明
这个插件用于在虚幻引擎(UE)中通过蓝图将文本转化为语音播放,利用Windows内置的语音引擎,支持Win10和Win11。确保电脑已安装语音系统,可能需要额外下载语言包以支持多语言播放。蓝图操作包括添加Speech Voice Component到Actor,使用Speak节点播放文本,Set Volume调整音量,Set Rate改变播放速度,Pause和Resume控制播放状态,Stop则停止播放且无法恢复。此外,Get Tokens和Set Token用于管理语音类型。更多详情可访问[80后程序员](https://dt.cq.cn/archives/1008?from=aliyun)
471 5
|
机器人 Python
【分享】阿里版ChatGPT—通义千问(初体验)
【分享】阿里版ChatGPT—通义千问(初体验)
1243 0
|
移动开发 前端开发
ruoyi-nbcio-plus基于vue3的flowable流程元素选择区面板的升级修改
ruoyi-nbcio-plus基于vue3的flowable流程元素选择区面板的升级修改
271 0
|
存储 缓存 前端开发
【面试题】你需要知道的webpack高频面试题
【面试题】你需要知道的webpack高频面试题
295 0
element使用el-upload组件实现自定义方法上传图片或者文件(配有详细注释)
element使用el-upload组件实现自定义方法上传图片或者文件(配有详细注释)
685 1
element使用el-upload组件实现自定义方法上传图片或者文件(配有详细注释)