问题
我们在开发中会经常遇到,在访问index方法的时候需要传递一个参数,来显示我们规定的拥有统一标志的数据
思路
通过URL传递一个参数给index!
- 由于访问的index方法常由ajax发起 所以参数不会生效!
- 在ajax发起的时候就追加一个搜索条件 例如 $group_id=1
正确姿势
在控制器中 使用assignconfig()方法给js透传参数
public function index($ids=NULL) //需要从URL接收参数 { //当前是否为关联查询 $this->relationSearch = false; //设置过滤方法 $this->request->filter(['strip_tags']); if ($this->request->isAjax()) { list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $total = $this->model ->where($where) ->order($sort, $order) ->count(); $list = $this->model ->where($where) ->order($sort, $order) ->limit($offset, $limit) ->select(); foreach ($list as $row) { $row->visible(['taxState']); } $list = collection($list)->toArray(); $result = array("total" => $total, "rows" => $list); return json($result); } $this->assignconfig("group_id",$ids); //在这里透传给js return $this->view->fetch(); }
对应js中接收数据并拼接到搜索的条件中去
// 初始化表格参数配置 Table.api.init({ extend: { index_url: 'test/index', add_url: 'test/add', edit_url: 'test/edit', del_url: 'test/del', multi_url: 'test/multi', table: 'test', }, queryParams: function (params) { //自定义搜索条件 var filter = params.filter ? JSON.parse(params.filter) : {}; //判断当前是否还有其他高级搜索栏的条件 var op = params.op ? JSON.parse(params.op) : {}; //并将搜索过滤器 转为对象方便我们追加条件 filter.group_id= Config.group_id; //将透传的参数 Config.group_id,追加到搜索条件中 op.group_id= "="; //group_id的操作方法的为 找到相等的 params.filter = JSON.stringify(filter); //将搜索过滤器和操作方法 都转为JSON字符串 params.op = JSON.stringify(op); > //如果希望忽略搜索栏搜索条件,可使用 //params.filter = JSON.stringify({url: 'login'}); //params.op = JSON.stringify({url: 'like'}); return params; }, });
更给力的办法
不修改控制器只需要修改js中发起ajax时候的参数即可
queryParams: function (params) { //自定义搜索条件 var filter = params.filter ? JSON.parse(params.filter) : {}; //判断当前是否还有其他高级搜索栏的条件 var op = params.op ? JSON.parse(params.op) : {}; //并将搜索过滤器 转为对象方便我们追加条件 filter.group_id= Fast.api.query("group_id"); //将需要的参数group_id 加入到搜索条件中去 要求url传递的参数必须为group_id=XX;可以用 Fast.api.query("group_id")获取到! op.group_id= "="; //group_id的操作方法的为 找到相等的 params.filter = JSON.stringify(filter); //将搜索过滤器和操作方法 都转为JSON字符串 params.op = JSON.stringify(op); > //如果希望忽略搜索栏搜索条件,可使用 //params.filter = JSON.stringify({url: 'login'}); //params.op = JSON.stringify({url: 'like'}); return params; },
思考
- 如果有很多参数要传递时候,应该使用数组。
- 如果不带参数访问的情况应该有反馈。
PS.
- 本人美工,大神勿喷!
- 方法为社区搜索整理来的,代码多来自Karson大神的demo。
- 有误或不详尽的地方,欢迎回帖指正、补充。
- 若本帖对你有所帮助,请点赞!请收藏!
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。