#341.sp_getslide函数BUG


在application\common\common\function.php中,有函数sp_getslide,用来获取幻灯片。源代码为:


/**
 * 根据幻灯片标识获取所有幻灯片
 * @param string $slide 幻灯片标识
 * @return array;
 */
function sp_getslide($slide, $limit = 5, $order = "listorder ASC") {
    $slide_obj = M("SlideCat");
    $join = '__SLIDE__ as b on a.cid =b.slide_cid';
    if ($order == '') {
        $order = "b.listorder ASC";
    }
    if ($limit == 0) {
        $limit = 5;
    }
    return $slide_obj->alias("a")->join($join)->where("a.cat_idname='$slide' and b.slide_status=1")->order($order)->limit('0,' . $limit)->select();
}

思路是分类表join幻灯表,以获取该分类下的幻灯片。但是在没有分类的情况下,后台上传的幻灯片都是默认分类,无法从分类表中获取cid,因此上传的幻灯片也就拿不到了。

所以我做了以下修改,即:

$slide默认值为0,这样可以不加参数调用该函数,表示获取默认分类下的幻灯片。如果有参数表示获取该类别下的幻灯片。


/**
 * 根据幻灯片标识获取所有幻灯片
 * @param string $slide 幻灯片标识
 * @return array;
 */
function sp_getslide($slide = 0, $limit = 5, $order = "listorder ASC") {
    $join = '__SLIDE__ as b on a.cid =b.slide_cid';
    if ($order == '') {
        $order = "b.listorder ASC";
    }
    if ($limit == 0) {
        $limit = 5;
    }

//对$slide做判断

    if ($slide === 0) { //如果没有参数或参数为0,直接获取默认分类下的幻灯片
        $slide_obj = M('Slide');
        return $slide_obj->where(array('slide_cid' => 0))->order()->limit(0, $limit)->select();
    } else {
        //否则正常获取
        return $slide_obj->alias("a")->join($join)->where("a.cat_idname='$slide' and b.slide_status=1")->order($order)->limit(0, $limit)->select();
    }
}


评论



灰大狼:
另外,我又改了一下这个代码,不知道是否能适用。 /** * 根据幻灯片标识获取所有幻灯片 * @param string $slide 幻灯片标识 为空或0时,表示取出默认分类 * @param int $limit 取出条数,默认为5 * @param string $order 排序规则,默认为listorder ASC * @return array 获取到的幻灯片数据 */ function sp_getslide($slide = null, $limit = 5, $order = "listorder ASC") { //设置最多取出条数 if ($limit == 0) { $limit = 5; } if (empty($slide)) { $slide_obj = M('Slide')->where(array('slide_cid' => 0, 'slide_status' => 1))->order($order)->limit(0, $limit)->select(); } else { $join = '__SLIDE__ as b on a.cid =b.slide_cid'; if ($order == '') { $order = "b.listorder ASC"; } $slide_obj = M("SlideCat")->alias("a")->join($join)->where("a.cat_idname='$slide' and b.slide_status=1")->order($order)->limit('0,' . $limit)->select(); } return $slide_obj; }
11月25日 23:25
老猫:
这是你理解的问题,仔细文档,要给幻灯片指定分类的,再用此方法调用幻灯片分类的幻灯片标识 http://www.thinkcmf.com/docs/cmfx/functions/sp_getslide.html
11月27日 11:58
灰大狼:
回复 老猫 那么,默认分类怎么用呢?
11月27日 20:11
老猫:
回复 灰大狼 默认分类就是不能在前台用的,要前台用就要指定分类
11月28日 19:09
反馈bug

分享

广告赞助