业务经理

微信扫描以上二维码

028-61286886

技术咨询

分享内容《如何在linkage中实现自定义字段的搜索》实现功

迅睿框架 更新 2019-12-12 09:49:52 ericwolf

分享内容:《如何在linkage中实现自定义字段的搜索》

实现功能:多个条件匹配,目前只能匹配等于

代码 如下:

case 'linkage': // 联动菜单


   $linkage = \Phpcmf\Service::L('cache')->get('linkage-' . $system['site'] . '-' . $param['code']);
   if (!$linkage) {
       return $this->_return($system['return'], "联动菜单{$param['code']}不存在,请在后台更新缓存");
   }

   // 通过别名找id
   $ids = @array_flip(\Phpcmf\Service::C()->get_cache('linkage-' . $system['site'] . '-' . $param['code'] . '-id'));

   if (isset($param['pid'])) {
       if (is_numeric($param['pid'])) {
           $pid = intval($param['pid']);
       } elseif (!$param['pid']) {
           $pid = 0;
       } else {
           $pid = isset($ids[$param['pid']]) ? $ids[$param['pid']] : 0;
           !$pid && is_numeric($param['pid']) && \Phpcmf\Service::C()->get_cache('linkage-' . $system['site'] . '-' . $param['code'] . '-id', $param['pid']) && $pid = intval($param['pid']);
       }
   }


   $i = 0;
   $return = array();
   foreach ($linkage as $t) {
       if ($system['num'] && $i >= $system['num']) {
           break;
       } elseif (isset($param['pid']) && $t['pid'] != $pid) {
           continue;
       } elseif (isset($param['id']) && !in_array($t['id'], explode(',', $param['id']))) {
           continue;
       }
       $return[] = $t;
       $i++;
   }


   if (!$return && isset($param['pid'])) {

       $rpid = isset($param['fid']) ? (int)$ids[$param['fid']] : (int)$linkage[$param['pid']]['pid'];
       foreach ($linkage as $t) {
           if ($t['pid'] == $rpid) {
               if ($system['num'] && $i >= $system['num']) {
                   break;
               }
               if (isset($param['id']) && !in_array($t['id'], explode(',', $param['id']))) {
                   continue;
               }
               $return[] = $t;
               $i++;
           }
       }
       if (!$return) {
           return $this->_return($system['return'], '没有匹配到内容');
       }
   }

   /**
    * 其他自定义参数实现开始
    */
   //获取当前linkage的所有字段
   $db_field_sources = $return[0];
   $linkage_db_field = [];
   foreach ($db_field_sources as $field => $val) {
       array_push($linkage_db_field, $field);
   }
   $customer_params = array();
   if (count($param) > 0) {
       foreach ($param as $key => $val) {
           if ($key == 'code' || $key == 'pid' || $key == 'id') {
               continue;
           }
           if (!in_array($key, $linkage_db_field)) {
               continue;
           }
           $customer_params[$key] = $val;
       }
   }
   if (!empty($customer_params) && count($customer_params) > 0) {
       foreach ($return as $key => $item) {
           foreach ($customer_params as $filter_field => $filter_value) {
               if($item[$filter_field]!=$filter_value){
                   unset($return[$key]);
               }
           }
       }
   }
   /**
    * 其他自定义参数实现结束
    */
   return $this->_return($system['return'], isset($param['call']) && $param['call'] ? @array_reverse($return) : $return, '');
   break;



方案

  • 迅睿框架创始人 #1 · 2019-09-20 15:58:31
    我在想想能不能做一个自定义模板标签,这样就可以不用破坏源程序,自己设计解析标签
  • ericwolf #2 · 2019-09-20 16:01:59
    那看看可不可以可以重新继承View,开发者可以自己重写核心模板解析功能的标签
  • 苏小闵 #3 · 2019-09-20 16:48:55
    https://www.xunruicms.com/doc/772.html微信收到通知了,首席牛啊
  • 125762285 #4 · 2019-12-09 12:59:55
    收藏下
  • 唉呦喂 #5 · 2019-12-12 09:49:52
    收藏一下

迅睿系统漏洞

站群分站系统
站群分站系统(2026-10-15)
子站域名新增llms.txt访问
GEO系统
GEO系统(2026-10-14)
修复下载zip空白地址问题 修复流量复刻和任务队列错误
GeoSeo收录宝
GeoSeo收录宝(2026-10-14)
新增 站长工具箱 前端首页自动调用meta 数据
滑块验证码 Gocaptcha
滑块验证码 Gocaptcha(2026-10-13)
基于开源项目 go-captcha 的行为验证码插件,滑动拼图、区域...
GeoSeo工具箱
GeoSeo工具箱(2026-10-13)
优化巡检任务
GeoSeo排名助手
GeoSeo排名助手(2026-10-11)
加入大模型自定义
SEO聚合关键字
SEO聚合关键字(2026-10-11)
优化关键字列表页最多支持1万篇文章,过多会导致服务器扛不住;
CMS内容同步复制
CMS内容同步复制(2026-10-10)
增加时间是否更新的开关