后台 function ff_param_lable($tag = '') 的问题 (附解决方法)

老谭 你好,
 
我今天发现我不能在 热门搜索 部分加入自己的条件,比如下面的例子。
 
原来程序:
<volist name=":ff_mysql_vod('limit:30;cache_name:default;cache_time:default;order:vod_stars desc,vod_hits_lasttime;sort:desc')" id="feifei"> 。。。
 
我想变成:
<volist name=":ff_mysql_vod('cid_not:4;limit:30;cache_name:default;cache_time:default;order:vod_stars desc,vod_hits_lasttime;sort:desc')" id="feifei"> 。。。
 
试了几次都不好使。
 
解决办法:
 
后来我看了程序,原来在 “ff_param_lable”这个方法中所有的赋值都已字符串形式被解析,但是在 "ff_mysql_vod" 方法中,有些变量的值是要以数组出现的,比如我上面的 “cid_not”。下面是"ff_mysql_vod" 方法中对应部分的程序:
 
if ($tag['cid_not']) {
        $where['vod_cid'] = array('not in',$tag['cid_not']);
}
 
以我对ThinkPHP的初步理解,这个 “$tag['cid_not']”是要用数组,而不是字符。按我上面的例子,这部分 “'cid_not:4”是要解析成, $tag['cid_not'] = [4]; 而不是 $tag['cid_not'] = 4;
 
所以我的解决办法就是改动一下 ff_param_lable 方法。

原方法程序:
function ff_param_lable($tag = ''){
    if(is_array($tag)){
        return $tag;
    }
    $param = array();
    $array = explode(';', str_replace('num:','limit:', $tag));
    foreach ($array as $v){
        list($key,$val) = explode(':',trim($v));
        $param[trim($key)] = trim($val);
    }
    return $param;
}
 
改变为:
 
function ff_param_lable($tag = ''){
    //3.3增加传入数组则直接解析
    if(is_array($tag)){
        return $tag;
    }
    $param = array();
    $array = explode(';', str_replace('num:','limit:', $tag));
    foreach ($array as $v){
        list($key,$val) = explode(':',trim($v));
        $key = trim($key);
        $val = trim($val);
        if(in_array($key, ['cid_not','ids','ids_not','cid','stars','letter','area','language','tag_name','tag_cid'])){
            if(strstr($val,",")){
                $val = explode(",",$val);
            }else{
                $val = [$val];
            }
        }
        $param[$key] = $val;
    }
    return $param;
}
 
这样我上面的模板改动就工作了,我也可以在模板里面写,
<volist name=":ff_mysql_vod('cid_not:4,5,6;limit:30;cache_name:default;cache_time:default;order:vod_stars desc,vod_hits_lasttime;sort:desc')" id="feifei"> 。。。

这样也应该工作.
 
老谭你要是觉得可以,这部分可以添加到下个版本里面。
已邀请:

老谭 - 飞飞影视导航系统创始人。

赞同来自:

QQ截图20170619104028.jpg

解析出来的查询条件是这样的 没问题呀 我也不记得是不是我3.4有修改这里了 好像3.3哪个地方是有点小问题
 
相关的查询语句是(没毛病)

d.vod_cid = List.list_id WHERE ( Vod.vod_status = 1 ) AND ( Vod.vod_cid NOT IN ('1','2') ) ORDER BY Vod.vod_stars desc,Vod.vod_hits_lasttime desc LIMIT 0,5
 

anyegongjue

赞同来自:

呵呵。这个知道就好。反正我下载的版本是必须修改,要不看不到你给出的SQL。

就留在这里给和我一样有这方面问题的人看吧,说不定能有些提示作用。

老谭 - 飞飞影视导航系统创始人。

赞同来自:

哈哈 打印出了相关的查询语句 没毛病的 主要就是那个是字符串类型还是整型

anyegongjue

赞同来自:

难得见这么勤奋的创始人,哈哈。这么快回复。以后有问题,多交流啦。

该问题目前已经被锁定, 无法添加新回复