苹果CMS指南

在苹果CMS V10模板开发过程中,有时候需要判断当前用户是否已经收藏某个影片。例如在影片详情页增加“已收藏”“收藏影片”等状态显示,就可以先获取当前登录用户的收藏记录,然后使用 in_array() 判断当前视频ID是否存在于收藏列表中。

获取当前用户收藏记录

苹果CMS V10的用户收藏记录可以通过 model('Ulog')->listData() 获取。下面的代码会根据当前用户ID查询收藏记录,并按照不同模块分别保存到数组中:

$h2_ufav_where = array();
$h2_ufav_where['user_id'] = $GLOBALS['user']['user_id'];
$h2_ufav_where['ulog_type'] = 2;

$h2_ufav_data = model('Ulog')->listData(
    $h2_ufav_where,
    'ulog_id desc',
    1,
    9999
);

$h2_ufav_vlist = array();
$h2_ufav_alist = array();
$h2_ufav_tlist = array();

foreach ($h2_ufav_data['list'] as $k => $v) {
    if ($v['ulog_mid'] == 1) {
        $h2_ufav_vlist[] = $v['ulog_rid'];
    } elseif ($v['ulog_mid'] == 2) {
        $h2_ufav_alist[] = $v['ulog_rid'];
    } elseif ($v['ulog_mid'] == 3) {
        $h2_ufav_tlist[] = $v['ulog_rid'];
    }
}

$h2_ufav_vlist = array_unique($h2_ufav_vlist); // 视频
$h2_ufav_alist = array_unique($h2_ufav_alist); // 文章
$h2_ufav_tlist = array_unique($h2_ufav_tlist); // 专题

代码参数说明

  • $GLOBALS['user']['user_id']:获取当前登录用户的用户ID。

  • ulog_type = 2:筛选用户收藏相关记录。

  • ulog_mid = 1:视频模块。

  • ulog_mid = 2:文章模块。

  • ulog_mid = 3:专题模块。

  • ulog_rid:对应记录的ID,可用于判断指定视频、文章或专题是否已经收藏。

  • array_unique():去除数组中的重复ID。

判断当前视频是否已经收藏

如果只需要判断当前影片是否已经被用户收藏,可以使用视频收藏数组 $h2_ufav_vlist,然后通过 in_array() 判断当前视频ID是否存在。

if (in_array($obj['vod_id'], $h2_ufav_vlist)) {
    // 已收藏
} else {
    // 未收藏
}

例如当前影片ID为 123,只需要判断:

if (in_array(123, $h2_ufav_vlist)) {
    echo '已收藏';
} else {
    echo '未收藏';
}

在苹果CMS模板中显示收藏状态

如果是在影片详情页中使用,可以根据当前影片的 vod_id 判断收藏状态。例如:

<?php
if (in_array($obj['vod_id'], $h2_ufav_vlist)) {
    echo '已收藏';
} else {
    echo '收藏影片';
}
?>

这样就可以根据用户当前的收藏记录,动态显示“已收藏”或者“收藏影片”等不同状态。

视频、文章和专题分别判断

由于代码已经将不同模块的收藏ID分别保存,因此可以针对不同类型的数据进行判断。

// 判断视频是否收藏
if (in_array($obj['vod_id'], $h2_ufav_vlist)) {
    // 已收藏
}

// 判断文章是否收藏
if (in_array($obj['art_id'], $h2_ufav_alist)) {
    // 已收藏
}

// 判断专题是否收藏
if (in_array($obj['topic_id'], $h2_ufav_tlist)) {
    // 已收藏
}

使用时需要注意

  • 原代码实际生成的是 $h2_ufav_vlist、$h2_ufav_alist、$h2_ufav_tlist,并不存在 $h2_ufav_list 这个变量。

  • 判断视频收藏状态时,应使用 $h2_ufav_vlist。

  • in_array() 判断的是ID是否存在于数组中。

  • 建议在使用数组之前先初始化,避免没有收藏记录时出现未定义变量提示。

  • 代码需要在能够正常调用苹果CMS模型和当前用户信息的环境中执行。

  • 一次读取9999条记录适合收藏数量不大的场景,如果用户收藏记录非常多,可以进一步考虑分页或针对当前影片ID进行查询,以减少数据库和内存开销。

总结

苹果CMS V10可以通过 model('Ulog')->listData() 获取当前用户的收藏记录,再根据 ulog_mid 将视频、文章和专题的ID分别保存到数组中。对于影片详情页,只需要使用 in_array($obj['vod_id'], $h2_ufav_vlist) 即可判断当前用户是否已经收藏该影片,从而实现“已收藏”和“收藏”状态切换。