把ecshop中的产品评论作为动态推送到uchome中

2016-07-07 15:02 来源:www.chinab4c.com 作者:ecshop专家



我们把ecshop和uchome通过ucenter整合之后,如果ecshop中有人购买了产品,则这个动作会作为动态发送到uchome当中去。但目前的版本中,不能把会员对产品的评论也feed过去。即然购买都可以,按理说评论肯定是可以的。我查看了购买时feed的调用,发现在flow.php文件中有这样一句:
user_uc_call('add_feed', array($order['order_id'], BUY_GOODS)); //推送feed到uc
应该就是它起到了把动作feed过去的作用。
那么,同样的能否在提交评论成功的时候,把评论的信息也做一个feed推送呢?
user_uc_call函数是调用uc中的函数,第一个参数是函数名,第二个参数是被调用函数的参数。
查询了一下,发现add_feed这个函数在文件includes/lib_uc.php当中,函数如下:
  1. /**
  2. * 通过判断is_feed 向UCenter提交Feed
  3. *
  4. * @access public
  5. * @paraminteger $value_id$order_id or $comment_id
  6. * @paraminterger $feed_type BUY_GOODS or COMMENT_GOODS
  7. *
  8. * @return void
  9. */
  10. function add_feed($id, $feed_type)
  11. {
  12. $feed = array();
  13. if ($feed_type == BUY_GOODS)
  14. {
  15. if (empty($id))
  16. {
  17. return;
  18. }
  19. $id = intval($id);
  20. $order_res = $GLOBALS['db']->getAll("SELECT g.goods_id, g.goods_name, g.goods_sn, g.goods_desc, g.goods_thumb, o.goods_price FROM " . $GLOBALS['ecs']->table('order_goods') . " AS o, " . $GLOBALS['ecs']->table('goods') . " AS g WHERE o.order_id='{$id}' AND o.goods_id=g.goods_id");
  21. foreach($order_res as $goods_data)
  22. {
  23. if(!empty($goods_data['goods_thumb']))
  24. {
  25. $url = $GLOBALS['ecs']->url() . $goods_data['goods_thumb'];
  26. }
  27. else
  28. {
  29. $url = $GLOBALS['ecs']->url() . $GLOBALS['_CFG']['no_picture'];
  30. }
  31. $link = $GLOBALS['ecs']->url() . "goods.php?id=" . $goods_data["goods_id"];

  32. $feed['icon'] = "goods";
  33. $feed['title_template'] = '<b>{username} ' . $GLOBALS['_LANG']['feed_user_buy'] . ' {goods_name}</b>';
  34. $feed['title_data'] = array('username'=> $_SESSION['user_name'], 'goods_name'=> $goods_data['goods_name']);
  35. $feed['body_template'] = '{goods_name}' . $GLOBALS['_LANG']['feed_goods_price'] . ':{goods_price}' . $GLOBALS['_LANG']['feed_goods_desc'] . ':{goods_desc}';
  36. $feed['body_data'] = array('goods_name'=>$goods_data['goods_name'], 'goods_price'=>$goods_data['goods_price'], 'goods_desc'=>sub_str($goods_data['goods_desc'], 150, true));
  37. $feed['images'][] = array('url'=> $url,
  38. 'link'=> $link);
  39. uc_call("uc_feed_add", array($feed['icon'], $_SESSION['user_id'], $_SESSION['user_name'], $feed['title_template'], $feed['title_data'], $feed ['body_template'], $feed['body_data'], '', '', $feed['images']));
  40. }
  41. }
  42. return;
  43. }
复制代码

很显然,这里只判断了feed类型为产品购买一种,虽然在函数说明中有COMMENT_GOODS参数(产品评论),但下面并没有写,有可能在后面的版本中是有这个功能的。但我急着用,于是在上面函数中加入elseif条件,如下
  1. else if ($feed_type == COMMENT_GOODS)/*类型为评论产品*/
  2. {
  3. if (empty($id))
  4. {
  5. return;
  6. }
  7. $id = intval($id);
  8. $comment_res = $GLOBALS['db']->getAll("SELECT c.comment_id, c.content, c.user_id, c.user_name, c.id_value, g.goods_thumb, g.goods_name FROM " . $GLOBALS['ecs']->table('commnet') . " AS c, " . $GLOBALS['ecs']->table('goods') . " AS g WHERE c.comment_id='{$id}' AND c.id_value=g.goods_id");
  9. foreach($comment_res as $comment_data)
  10. {
  11. if(!empty($comment_data['goods_thumb']))
  12. {
  13. $url = $GLOBALS['ecs']->url() . $goods_data['goods_thumb'];
  14. }
  15. else
  16. {
  17. $url = $GLOBALS['ecs']->url() . $GLOBALS['_CFG']['no_picture'];
  18. }
  19. $link = $GLOBALS['ecs']->url() . "goods.php?id=" . $goods_data["id_value"];

  20. $feed['icon'] = "goods";
  21. $feed['title_template'] = '<b>{username} ' . $GLOBALS['_LANG']['feed_user_comment'] . ' {goods_name}</b>';
  22. $feed['title_data'] = array('username'=> $_SESSION['user_name'], 'goods_name'=> $goods_data['goods_name']);
  23. $feed['body_template'] = '{goods_name}' . $GLOBALS['_LANG']['feed_user_comment_desc'] . ':{content}';
  24. $feed['body_data'] = array('goods_name'=>$goods_data['goods_name'], 'content'=>sub_str($goods_data['content'], 150, true));
  25. $feed['images'][] = array('url'=> $url,
  26. 'link'=> $link);
  27. uc_call("uc_feed_add", array($feed['icon'], $_SESSION['user_id'], $_SESSION['user_name'], $feed['title_template'], $feed['title_data'], $feed ['body_template'], $feed['body_data'], '', '', $feed['images']));
  28. }
  29. }
复制代码

把这段加到上面一段的return前面,其中的SQL语句在ecshop中的SQL查询中测试通过,完全可以得到想要的结果。
完了之后,打开根目录下的comment.php(评论控制文件),发现在添加“评论内容”function add_comment($cmt)这个函数的最后有被注释掉的一句:
  1. /*if ($status > 0)
  2. {
  3. add_feed($GLOBALS['db']->insert_id(), COMMENT_GOODS);
  4. }*/
复制代码

应该就是feed推送了,我把它的注释去掉后试了一下,添加评论后没有错误,但也没有推送成功。
我又改成:
  1. user_uc_call('add_feed', array($cmt['id'], COMMENT_GOODS)); //推送feed到uc
复制代码

试了一下,还是出不来,按道理来说,应该是可以了啊,有没有高人看一下这个过程中出了什么问题?应该就差一步就可以成功了。
对了,还要改个文件:E:\Apache2\htdocs\may365\languages\zh_cn\common.php当中查找/* feed推送 */,插入一行:
  1. $_LANG['feed_user_comment_desc'] = "评论内容";
复制代码

回答:
收藏了,挺好好的

强力的顶。。
另想请教楼主如何把ECSHOP商品评论里的会员链接到HOME上的会员页去?

我想 你的问题应该出在这里
  1. $comment_res = $GLOBALS['db']->getAll("SELECT c.comment_id, c.content, c.user_id, c.user_name, c.id_value, g.goods_thumb, g.goods_name FROM " . $GLOBALS['ecs']->table('commnet') . " AS c, " . $GLOBALS['ecs']->table('goods') . " AS g WHERE c.comment_id='{$id}' AND c.id_value=g.goods_id");
复制代码
你的 comment_id 的值是否正确的获取到了啊
你可以尝试输出一下 这个sql

在ecshop后台SQL中输出这个SQL是可以的啊

c.comment_id='{$id}'
这里的ID 是通过什么$GLOBALS['db']->insert_id() 来获取的
但是 这个 $GLOBALS['db']->insert_id() 好像不是你评论的 ID 把!

楼上讲的很有可能,我再检查一下。

请问LZ推送成功了没有啊?

Tokyo style这歌我当年超爱听啊~这首remix版第一次听到~555555好感动!看来这次&amp;quot;坦克&amp;quot;的贴子质量很高哇`~HOHO~继续欣赏!