一个优雅的生成页面筛选链接的 Laravel 包!!

大家有没有写资源(如商品等)列表页面的时候呢?

大家是怎么生成资源列表的筛选器链接的?

在项目中我发现无论是通过path还是param带入筛选/排序条件,好像都需要手动的为每个筛选条件的a标签写上uri。

如果筛选条件很少还好,但是一旦筛选条件变多,或则筛选需求会有变动,那么也是很郁闷的事情。

于是我想一劳永逸的解决上述问题,于是就有了自己写个筛选条件管理器的想法,FilterManger,它可以非常优雅灵活的生成筛选器url。

筛选条件 (参数) 管理器 for Laravel 5

筛选参数管理器包主要用于页面资料列表,可以让我们优雅灵活的生成筛选链接。
这个页面就使用了该包:kiteme.cn/list

项目Github地址:https://github.com/toplan/FilterManager
欢迎issue 和 star :)

安装

{
   "require": {
    // ...
    "toplan/filter-manager": "dev-master",
   }
}

打开姿势

请先通过第一步(准备工作)完成服务提供器的注册。

1. 准备工作

请在 config/app.php 文件中找到名为 providers 的key ,然后为FilterManager的服务提供器。

'providers' => array(
    // ... 
    'Toplan\FilterManager\FilterManagerServiceProvider',
)

然后请在 config/app.php 文件中找到名为 aliases 的key , 然后为FilterManger添加别名。

'aliases' => array(
    // ...
    'FilterManager' => 'Toplan\FilterManager\Facades\FilterManager',
)

2. Then, just enjoy it!

<!-- example -->
<li class="item @if(FilterManager::isActive('gender','male')) active @endif">
  <a href="{{FilterManager::url('gender','male')}}"> 男 </a>
</li>
<li class="item @if(FilterManager::isActive('gender','female')) active @endif">
  <a href="{{FilterManager::url('gender','female')}}"> 女 </a>
</li>

更多的详细用法参见: demo_temp_for_laravel.blade.php

常用方法

基本上所有常用用法都在该文件中: demo_temp_for_laravel.blade.php

1. 获得FilterManager对象

create($filters,$baseUrl,$blackList);
  • $filters: 参数数组,例:['gender'=>'male','city'=>'beijing']
  • $baseUrl: 可以根据自己情况进行设置, 如果设置了完整的服务器名和路径,则返回的是url
  • $blackList: 筛选条件/参数黑名单, 例:['pageindex'].

2. 设置筛选条件黑名单

可以在每次生成uri/url的时候过滤掉你不想要的筛选条件/参数(比如分页参数等)

FilterManager::setBlackList(['page','pageindex']);

3. 是否有指定筛选条件

如果有指定条件,会返回该过滤添加的值,否则返回false

FilterManager::has('gender');

4. 指定的筛选条件是否包含指点值

isActive($filter_name, $filter_value, $trueReturn, $falseReturn)

FilterManager::isActive('gender','male');#将会返回true 或 false;
FilterManager::isActive('gender','male','active','not active');#将会返回 'active' 或 'not active';

5. 生成 uri/url

url($filter_name,$filter_value,$multi,$LinkageRemoveFilters,$blackList)

参数介绍:

  • $filter_name: 筛选条件/参数
  • $filter_value: 筛选条件/参数的值, 默认值为:\Toplan\FilterManager\FilterManager::ALL , 表示为所有
  • $multi: 是否支持多个参数值? true 为支持, 默认为false
  • $LinkageRemoveFilters: 需要联动删除的筛选条件/参数
  • $blackList: 临时黑名单,可以临时覆盖默认的黑名单。
FilterManager::url('gender',\Toplan\FilterManager\FilterManager::ALL);//将会删除gender参数

FilterManager::url('gender','male',false);//gender只能有一个值

FilterManager::url('cities','成都',true);#
FilterManager::url('cities','绵阳',true);#支持cities有多个值

//一个省有多个城市,如果要取消选中‘省’这个条件,那么我们还可以通过第四个参数设置联动取消‘市’以及更多你想取消的筛选条件。
FilterManager::url('province','四川',false,['cities']);//联动删除cities条件
本帖已被设为精华帖!
附言 1  ·  8年前

支持如下模式

单选 (一个参数一个值)

多选 (一个参数多个值)

反选 (已选中的链接会是取消选中)

可设置联动删除 (如省市区的筛选,在删除选中区的时候,可以通过参数联动删除省市的筛选条件)

这个页面就是用的这个包:kiteme.cn/list

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 8
hareluya

谢谢分享!已Star。

8年前 评论
Summer

@toplan With pleasure! :smile:

8年前 评论

请教,省市过滤有例子吗??

7年前 评论

@toplan 大神,省市有例子吗?弄了一天没弄好

7年前 评论

@分头诗人

FilterManager::url('cities', '成都', true);#
FilterManager::url('cities', '绵阳', true);#支持cities有多个值

//假设我们要对城镇区域进行筛选,首先我们知道一个省有多个城市,城市又有多个区、镇...
//如果我们要选择‘全部’,或者选择任一一个其他省,
//那么我们还需要通过第四个参数设置联动取消‘市’,‘区’,‘镇’等等你想取消的筛选条件。
//
//选择全部
FilterManager::url('province', FM_SELECT_ALL, false, ['cities', 'counties', ...]);//联动删除cities等条件
//选择一个省
FilterManager::url('province', '四川', false, ['cities', 'counties', ...]);//联动删除cities等条件
7年前 评论

现在包是不是不能使用了。引入之后就报错。
Call to undefined method Illuminate\Foundation\Application::share()

6年前 评论

@Ali貌似5.4之后就有错误了

6年前 评论

kiteme.cn/list 亲这是一个色情网站啊

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!