苹果CMSV10获取当前用户收藏列表
在苹果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) 即可判断当前用户是否已经收藏该影片,从而实现“已收藏”和“收藏”状态切换。
