FastAdmin 列表搜索中,默认设置好条件即可实现搜索。
如,
{field: 'cate_id', title: __('Cate_id'), operate: false},
{field: 'cate_id', title: __('Cate_id'), operate: false},
{field: 'cate_id', title: __('Cate_id'), operate: false},
默认会对 cate_id ,进行等于搜索。但现在的需要对,cate_id 子级进行搜索;也就是说,需要对搜索的值进行二次处理。
建立 /application/common/library/Filter.php 文件:
<?php
namespace app\common\library;
/**
* 搜索过滤
* <p>用于 FastAdmin 默认搜索条件处理</p>
*/
class Filter
{
/**
* 清除搜索
* <pre>用于置空 filter op 值</pre>
*/
public static function clearFilter()
{
$request = request();
$filter = json_encode([]);
$op = json_encode([]);
$request->get(['filter' => $filter, 'op' => $op]);
}
/**
* 重置搜索参数
* <p>用于 MyOutput 插件,数据导出</p>
*/
public static function resetFilter()
{
$request = request();
$filter = $request->get('filter');
$search = $request->get('search', '');
$op = $request->get("op", '', 'trim');
$filter = (array)json_decode($filter, true);
$op = (array)json_decode($op, true);
if (!$filter) {
$list = $request->post();
if (isset($list['search'])) {
$search = $list['search'];
}
unset($list['search']);
foreach ($list as $field => $val) {
if (strpos($field, '-operate') !== false || strlen($val) == 0 || !isset($list[$field . '-operate'])) {
continue;
}
$field = str_replace('-operate', '', $field);
$filter[$field] = $val;
$op[$field] = trim($list[$field . '-operate']);
}
}
$filter = $filter ? $filter : [];
$op = $op ? $op : [];
$is_export = isset($filter['is_export']) ? $filter['is_export'] : '';
unset($filter['is_export'], $op['is_export']);
$filter = json_encode($filter);
$op = json_encode($op);
$request->get(['filter' => $filter, 'op' => $op, 'search' => $search, 'is_export' => $is_export]);
}
/**
* 重置搜索值
* @param string $name 名称
* @param mixed $val 值
* @param string|null $condition 条件(默认=)null时移除
*/
public static function resetFilterVal($name, $val, $condition = '=')
{
$request = request();
$filter = $request->get('filter');
$op = $request->get("op", '', 'trim');
$filter = (array)json_decode($filter, true);
$op = (array)json_decode($op, true);
$filter[$name] = $val;
$op[$name] = $condition;
if ($condition === null) {
unset($filter[$name]);
unset($op[$name]);
}
$filter = json_encode($filter);
$op = json_encode($op);
$request->get(['filter' => $filter, 'op' => $op]);
}
/**
* 获取搜索条件值
* <p>优先从搜索中拿,拿不到,从 param 中获取</p>
* @param string $name 键名
* @return mixed
*/
public static function getFilterVal($name)
{
$request = request();
$filter = $request->get('filter');
$filter = (array)json_decode($filter, true);
$get = $request->param($name);
return !isset($filter[$name]) ? ($get ?: '') : $filter[$name];
}
/**
* 获取搜索条件
* <p>优先从搜索中拿,拿不到,从 param 中获取</p>
* @param string $name 键名
* @return mixed
*/
public static function getFilterOp($name)
{
$request = request();
$op = $request->get('op');
$op = (array)json_decode($op, true);
$get = $request->param($name . '-operate');
return !isset($op[$name]) ? ($get ?: '') : $op[$name];
}
}
<?php
namespace app\common\library;
/**
* 搜索过滤
* <p>用于 FastAdmin 默认搜索条件处理</p>
*/
class Filter
{
/**
* 清除搜索
* <pre>用于置空 filter op 值</pre>
*/
public static function clearFilter()
{
$request = request();
$filter = json_encode([]);
$op = json_encode([]);
$request->get(['filter' => $filter, 'op' => $op]);
}
/**
* 重置搜索参数
* <p>用于 MyOutput 插件,数据导出</p>
*/
public static function resetFilter()
{
$request = request();
$filter = $request->get('filter');
$search = $request->get('search', '');
$op = $request->get("op", '', 'trim');
$filter = (array)json_decode($filter, true);
$op = (array)json_decode($op, true);
if (!$filter) {
$list = $request->post();
if (isset($list['search'])) {
$search = $list['search'];
}
unset($list['search']);
foreach ($list as $field => $val) {
if (strpos($field, '-operate') !== false || strlen($val) == 0 || !isset($list[$field . '-operate'])) {
continue;
}
$field = str_replace('-operate', '', $field);
$filter[$field] = $val;
$op[$field] = trim($list[$field . '-operate']);
}
}
$filter = $filter ? $filter : [];
$op = $op ? $op : [];
$is_export = isset($filter['is_export']) ? $filter['is_export'] : '';
unset($filter['is_export'], $op['is_export']);
$filter = json_encode($filter);
$op = json_encode($op);
$request->get(['filter' => $filter, 'op' => $op, 'search' => $search, 'is_export' => $is_export]);
}
/**
* 重置搜索值
* @param string $name 名称
* @param mixed $val 值
* @param string|null $condition 条件(默认=)null时移除
*/
public static function resetFilterVal($name, $val, $condition = '=')
{
$request = request();
$filter = $request->get('filter');
$op = $request->get("op", '', 'trim');
$filter = (array)json_decode($filter, true);
$op = (array)json_decode($op, true);
$filter[$name] = $val;
$op[$name] = $condition;
if ($condition === null) {
unset($filter[$name]);
unset($op[$name]);
}
$filter = json_encode($filter);
$op = json_encode($op);
$request->get(['filter' => $filter, 'op' => $op]);
}
/**
* 获取搜索条件值
* <p>优先从搜索中拿,拿不到,从 param 中获取</p>
* @param string $name 键名
* @return mixed
*/
public static function getFilterVal($name)
{
$request = request();
$filter = $request->get('filter');
$filter = (array)json_decode($filter, true);
$get = $request->param($name);
return !isset($filter[$name]) ? ($get ?: '') : $filter[$name];
}
/**
* 获取搜索条件
* <p>优先从搜索中拿,拿不到,从 param 中获取</p>
* @param string $name 键名
* @return mixed
*/
public static function getFilterOp($name)
{
$request = request();
$op = $request->get('op');
$op = (array)json_decode($op, true);
$get = $request->param($name . '-operate');
return !isset($op[$name]) ? ($get ?: '') : $op[$name];
}
}
<?php namespace app\common\library; /** * 搜索过滤 * <p>用于 FastAdmin 默认搜索条件处理</p> */ class Filter { /** * 清除搜索 * <pre>用于置空 filter op 值</pre> */ public static function clearFilter() { $request = request(); $filter = json_encode([]); $op = json_encode([]); $request->get(['filter' => $filter, 'op' => $op]); } /** * 重置搜索参数 * <p>用于 MyOutput 插件,数据导出</p> */ public static function resetFilter() { $request = request(); $filter = $request->get('filter'); $search = $request->get('search', ''); $op = $request->get("op", '', 'trim'); $filter = (array)json_decode($filter, true); $op = (array)json_decode($op, true); if (!$filter) { $list = $request->post(); if (isset($list['search'])) { $search = $list['search']; } unset($list['search']); foreach ($list as $field => $val) { if (strpos($field, '-operate') !== false || strlen($val) == 0 || !isset($list[$field . '-operate'])) { continue; } $field = str_replace('-operate', '', $field); $filter[$field] = $val; $op[$field] = trim($list[$field . '-operate']); } } $filter = $filter ? $filter : []; $op = $op ? $op : []; $is_export = isset($filter['is_export']) ? $filter['is_export'] : ''; unset($filter['is_export'], $op['is_export']); $filter = json_encode($filter); $op = json_encode($op); $request->get(['filter' => $filter, 'op' => $op, 'search' => $search, 'is_export' => $is_export]); } /** * 重置搜索值 * @param string $name 名称 * @param mixed $val 值 * @param string|null $condition 条件(默认=)null时移除 */ public static function resetFilterVal($name, $val, $condition = '=') { $request = request(); $filter = $request->get('filter'); $op = $request->get("op", '', 'trim'); $filter = (array)json_decode($filter, true); $op = (array)json_decode($op, true); $filter[$name] = $val; $op[$name] = $condition; if ($condition === null) { unset($filter[$name]); unset($op[$name]); } $filter = json_encode($filter); $op = json_encode($op); $request->get(['filter' => $filter, 'op' => $op]); } /** * 获取搜索条件值 * <p>优先从搜索中拿,拿不到,从 param 中获取</p> * @param string $name 键名 * @return mixed */ public static function getFilterVal($name) { $request = request(); $filter = $request->get('filter'); $filter = (array)json_decode($filter, true); $get = $request->param($name); return !isset($filter[$name]) ? ($get ?: '') : $filter[$name]; } /** * 获取搜索条件 * <p>优先从搜索中拿,拿不到,从 param 中获取</p> * @param string $name 键名 * @return mixed */ public static function getFilterOp($name) { $request = request(); $op = $request->get('op'); $op = (array)json_decode($op, true); $get = $request->param($name . '-operate'); return !isset($op[$name]) ? ($get ?: '') : $op[$name]; } }
使用示例:
$cateId = Filter::getFilterVal('cate_id');
if ($cateId) {
$cateIdsArr = (new \app\admin\model\exam\Cate())->where('id|parent_id', $cateId)->column('id') ?: [0];
Filter::resetFilterVal('cate_id', array_values($cateIdsArr), 'in');
}
$cateId = Filter::getFilterVal('cate_id');
if ($cateId) {
$cateIdsArr = (new \app\admin\model\exam\Cate())->where('id|parent_id', $cateId)->column('id') ?: [0];
Filter::resetFilterVal('cate_id', array_values($cateIdsArr), 'in');
}
$cateId = Filter::getFilterVal('cate_id'); if ($cateId) { $cateIdsArr = (new \app\admin\model\exam\Cate())->where('id|parent_id', $cateId)->column('id') ?: [0]; Filter::resetFilterVal('cate_id', array_values($cateIdsArr), 'in'); }
可调用方法:
// 获取搜索值,结果,如 4
Filter::getFilterVal('cate_id');
// 获取查询条件,结果,如 =
Filter::getFilterOp('cate_id');
// 重置查询值,如果第3个参数为 null,则移除这个搜索条件
Filter::resetFilterVal('cate_id', '5', '=');
// 清除所有搜索条件和值
Filter::clearFilter();
// 获取搜索值,结果,如 4
Filter::getFilterVal('cate_id');
// 获取查询条件,结果,如 =
Filter::getFilterOp('cate_id');
// 重置查询值,如果第3个参数为 null,则移除这个搜索条件
Filter::resetFilterVal('cate_id', '5', '=');
// 清除所有搜索条件和值
Filter::clearFilter();
// 获取搜索值,结果,如 4 Filter::getFilterVal('cate_id'); // 获取查询条件,结果,如 = Filter::getFilterOp('cate_id'); // 重置查询值,如果第3个参数为 null,则移除这个搜索条件 Filter::resetFilterVal('cate_id', '5', '='); // 清除所有搜索条件和值 Filter::clearFilter();