Authored by hf

code review by fei.hong: do add criteo analysis codes

... ... @@ -682,10 +682,12 @@ class Helpers
*
* @param array $cartGoods 购物车商品列表
* @param bool $isAdvanceCart 是否是预售购物车(和上市期有关)
* @param boolean $isValid 是否是可用商品(非失效商品),默认是
* @param bool $isValid 是否是可用商品(非失效商品),默认是
* @param bool $isOffShelves 是否卖光了, 默认否
* @param array $analysis 第三方数据分析用的
* @return array 处理之后的购物车商品数据
*/
public static function formatCartGoods($cartGoods, $isAdvanceCart, $isValid = true, $isOffShelves = false)
public static function formatCartGoods($cartGoods, $isAdvanceCart, $isValid = true, $isOffShelves = false, &$analysis = array())
{
$result = array();
... ... @@ -744,6 +746,29 @@ class Helpers
elseif ($value['real_price'] == 0) {
$oneGoods['productPrice'] = self::transPrice($value['sales_price']);
$oneGoods['xForOne'] = true;
// 分析用: 商品ID列表
$analysis['ids'][] = $value['product_id'];
// 分析用: 品友
$analysis['ipinyou'] .= $value['product_id'] . ',' . $value['buy_number'] . ';';
// 分析用: CRITEO
$analysis['criteo'][] = array(
'id' => $value['product_skn'],
'quantity' => intval($value['buy_number']),
'price' => $value['last_vip_price'],
);
}
else {
// 分析用: 商品ID列表
$analysis['ids'][] = $value['product_id'];
// 分析用: 品友
$analysis['ipinyou'] .= $value['product_id'] . ',' . $value['buy_number'] . ';';
// 分析用: CRITEO
$analysis['criteo'][] = array(
'id' => $value['product_skn'],
'quantity' => intval($value['buy_number']),
'price' => $value['last_vip_price'],
);
}
// 商品类型:预售或普通
... ...
... ... @@ -341,4 +341,40 @@
<div class="loading"><span></span>请稍后...</div>
</div>
<!-- 商品详细信息窗口 -->
<script type="text/javascript">
(function (d) {
window.bd_cpro_rtid="P1fsPWc";
var s = d.createElement("script");s.type = "text/javascript";s.async = true;s.src = location.protocol + "//cpro.baidu.com/cpro/ui/rt.js";
var s0 = d.getElementsByTagName("script")[0];s0.parentNode.insertBefore(s, s0);
})(document);
</script>
<script type="text/javascript" src="http://static.criteo.net/js/ld/ld.js" async="true"></script>
<script type="text/javascript">
window.criteo_q = window.criteo_q || [];
window.criteo_q.push(
{event:"setAccount", account: 16184},
{event:"setCustomerId", id: "{{uid}}"},
{event:"setSiteType", type: "d"},
{event:"viewBasket", item: {{{cartEnsure.criteo}}} }
);
</script>
<!-- 聚效 -->
<script type="text/javascript">
var _mvq = window._mvq || [];
window._mvq = _mvq;
_mvq.push(['$setAccount', 'm-23428-1']);
_mvq.push(['$setGeneral', 'cartview', '', /*用户名*/ '', '{{uid}}']);
_mvq.push(['$logConversion']);
_mvq.push(['$addItem', '', /*商品id*/ '{{cartEnsure.ids}}', '', '']);
_mvq.push(['$logData']);
</script>
<script>
!function(w,d,e){
var _money='{{cartEnsure.ipinyouAmount}}';
var _productList='{{cartEnsure.ipinyou}}';
var b=location.href,c=d.referrer,f,s,g=d.cookie,h=g.match(/(^|;)\s*ipycookie=([^;]*)/),i=g.match(/(^|;)\s*ipysession=([^;]*)/);if (w.parent!=w){f=b;b=c;c=f;};u='//stats.ipinyou.com/cvt?a='+e('MC.Ok.7NFMIlCH_F_LE2riRlF2r_')+'&c='+e(h?h[2]:'')+'&s='+e(i?i[2].match(/jump\%3D(\d+)/)[1]:'')+'&u='+e(b)+'&r='+e(c)+'&rd='+(new Date()).getTime()+'&Money='+e(_money)+'&ProductList='+e(_productList)+'&e=';
function _(){if(!d.body){setTimeout(_(),100);}else{s= d.createElement('script');s.src = u;d.body.insertBefore(s,d.body.firstChild);}}_();
}(window,document,encodeURIComponent);
</script>
{{> layout/footer}}
\ No newline at end of file
... ...
... ... @@ -36,6 +36,9 @@ class CartModel
public static function myCartData($uid, $shoppingKey, $cartDelList)
{
$result = array();
// 存放分析用的数据
$analysisData = array('ipinyou' => '');
do {
$result['isEmpty'] = false;
... ... @@ -47,7 +50,7 @@ class CartModel
// 调用接口,获取购物车数据
$cartData = CartData::cartData($uid, $shoppingKey);
// 接口异常时,购物车置为空
if (empty($cartData['data'])) {
$result['isEmpty'] = true;
... ... @@ -55,7 +58,7 @@ class CartModel
$result['viewOrderUrl'] = Helpers::url('/home/orders', array('t' => time()));
break;
}
$ordinaryCartData = $cartData['data']['ordinary_cart_data'];
$advanceCartData = $cartData['data']['advance_cart_data'];
... ... @@ -71,7 +74,7 @@ class CartModel
$ordinaryOffShelves = empty($ordinaryCartData['off_shelves_goods_list']);
// 预售商品是否有失效的
$advanceOffShelves = empty($advanceCartData['off_shelves_goods_list']);
/* 移除的商品列表 */
if (!empty($cartDelList)) {
$result['deleteShop'] = json_decode($cartDelList, true);
... ... @@ -121,44 +124,36 @@ class CartModel
// 普通的
if (!empty($ordinaryCartData['goods_list'])) {
$result['commonSell']['cartProductNum'] = strval($ordinaryCount);
$result['commonSell']['productItem'] = Helpers::formatCartGoods($ordinaryCartData['goods_list'], false, true);
$result['commonSell']['productItem'] = Helpers::formatCartGoods($ordinaryCartData['goods_list'], false, true, false, $analysisData);
}
// 预售的
if (!empty($advanceCartData['goods_list'])) {
$result['preSell']['cartProductNum'] = strval($advanceCount);
$result['preSell']['productItem'] = Helpers::formatCartGoods($advanceCartData['goods_list'], true, true);
$result['preSell']['productItem'] = Helpers::formatCartGoods($advanceCartData['goods_list'], true, true, false, $analysisData);
}
/* 已售磬失效 */
// 普通的
if (!$ordinarySoldOut) {
//$result['commonSell']['cartProductNum'] += count($ordinaryCartData['sold_out_goods_list']);
$result['commonSell']['productItem'] = isset($result['commonSell']['productItem'])
? self::appendProductItem($result['commonSell']['productItem'], Helpers::formatCartGoods($ordinaryCartData['sold_out_goods_list'], false, true), count($result['commonSell']['productItem']))
: Helpers::formatCartGoods($ordinaryCartData['sold_out_goods_list'], false, true);
$result['commonSell']['productItem'] = isset($result['commonSell']['productItem']) ? self::appendProductItem($result['commonSell']['productItem'], Helpers::formatCartGoods($ordinaryCartData['sold_out_goods_list'], false, true), count($result['commonSell']['productItem'])) : Helpers::formatCartGoods($ordinaryCartData['sold_out_goods_list'], false, true, false, $analysisData);
}
// 预售的
if (!$advanceSoldOut) {
//$result['preSell']['cartProductNum'] += count($advanceCartData['sold_out_goods_list']);
$result['preSell']['productItem'] = isset($result['preSell']['productItem'])
? self::appendProductItem($result['preSell']['productItem'], Helpers::formatCartGoods($advanceCartData['sold_out_goods_list'], true, true), count($result['preSell']['productItem']))
: Helpers::formatCartGoods($advanceCartData['sold_out_goods_list'], true, true);
$result['preSell']['productItem'] = isset($result['preSell']['productItem']) ? self::appendProductItem($result['preSell']['productItem'], Helpers::formatCartGoods($advanceCartData['sold_out_goods_list'], true, true), count($result['preSell']['productItem'])) : Helpers::formatCartGoods($advanceCartData['sold_out_goods_list'], true, true, false, $analysisData);
}
/* 已失效的 */
// 普通的
if (!$ordinaryOffShelves) {
//$result['commonSell']['cartProductNum'] += count($ordinaryCartData['off_shelves_goods_list']);
$result['commonSell']['productItem'] = isset($result['commonSell']['productItem'])
? self::appendProductItem($result['commonSell']['productItem'], Helpers::formatCartGoods($ordinaryCartData['off_shelves_goods_list'], false, true, true), count($result['commonSell']['productItem']))
: Helpers::formatCartGoods($ordinaryCartData['off_shelves_goods_list'], false, true, true);
$result['commonSell']['productItem'] = isset($result['commonSell']['productItem']) ? self::appendProductItem($result['commonSell']['productItem'], Helpers::formatCartGoods($ordinaryCartData['off_shelves_goods_list'], false, true, true), count($result['commonSell']['productItem'])) : Helpers::formatCartGoods($ordinaryCartData['off_shelves_goods_list'], false, true, true, $analysisData);
}
// 预售的
if (!$advanceOffShelves) {
//$result['preSell']['cartProductNum'] += count($advanceCartData['off_shelves_goods_list']);
$result['preSell']['productItem'] = isset($result['preSell']['productItem'])
? self::appendProductItem($result['preSell']['productItem'], Helpers::formatCartGoods($advanceCartData['off_shelves_goods_list'], true, true, true), count($result['preSell']['productItem']))
: Helpers::formatCartGoods($advanceCartData['off_shelves_goods_list'], true, true, true);
$result['preSell']['productItem'] = isset($result['preSell']['productItem']) ? self::appendProductItem($result['preSell']['productItem'], Helpers::formatCartGoods($advanceCartData['off_shelves_goods_list'], true, true, true), count($result['preSell']['productItem'])) : Helpers::formatCartGoods($advanceCartData['off_shelves_goods_list'], true, true, true, $analysisData);
}
/* 赠品 */
... ... @@ -168,22 +163,17 @@ class CartModel
}
// 普通的
if (!empty($ordinaryCartData['gift_list'])) {
$result['subjoinItem'] = isset($result['subjoinItem']) ? self::appendProductItem($result['subjoinItem'], Helpers::formatGiftPriceGoods($ordinaryCartData['gift_list'], true), count($result['subjoinItem']))
: Helpers::formatGiftPriceGoods($ordinaryCartData['gift_list'], true);
$result['subjoinItem'] = isset($result['subjoinItem']) ? self::appendProductItem($result['subjoinItem'], Helpers::formatGiftPriceGoods($ordinaryCartData['gift_list'], true), count($result['subjoinItem'])) : Helpers::formatGiftPriceGoods($ordinaryCartData['gift_list'], true);
}
/* 加价购 */
// 预售的
if (!empty($advanceCartData['price_gift'])) {
$result['subjoinItem'] = isset($result['subjoinItem'])
? self::appendProductItem($result['subjoinItem'], Helpers::formatGiftPriceGoods($advanceCartData['price_gift'], false), count($result['subjoinItem']))
: Helpers::formatGiftPriceGoods($advanceCartData['price_gift'], false);
$result['subjoinItem'] = isset($result['subjoinItem']) ? self::appendProductItem($result['subjoinItem'], Helpers::formatGiftPriceGoods($advanceCartData['price_gift'], false), count($result['subjoinItem'])) : Helpers::formatGiftPriceGoods($advanceCartData['price_gift'], false);
}
// 普通的
if (!empty($ordinaryCartData['price_gift'])) {
$result['subjoinItem'] = isset($result['subjoinItem'])
? self::appendProductItem($result['subjoinItem'], Helpers::formatGiftPriceGoods($ordinaryCartData['price_gift'], false), count($result['subjoinItem']))
: Helpers::formatGiftPriceGoods($ordinaryCartData['price_gift'], false);
$result['subjoinItem'] = isset($result['subjoinItem']) ? self::appendProductItem($result['subjoinItem'], Helpers::formatGiftPriceGoods($ordinaryCartData['price_gift'], false), count($result['subjoinItem'])) : Helpers::formatGiftPriceGoods($ordinaryCartData['price_gift'], false);
}
/* 促销短语 */
... ... @@ -197,13 +187,19 @@ class CartModel
//$result['salesPromotion'] = array_merge($result['salesPromotion'], self::buildPromotionData($advanceCartData['promotion_info']));
$result['salesPromotion'] = self::buildPromotionData($advanceCartData['promotion_info']);
}
// 清空变量
$advanceCartData = array();
$ordinaryCartData = array();
$cartData = array();
} while (false);
// 增加第三方分析用的数据
$result['ids'] = empty($analysisData['ids']) ? '' : implode(',', $analysisData['ids']);
$result['ipinyou'] = empty($analysisData['ipinyou']) ? '' : $analysisData['ipinyou'];
$result['ipinyouAmount'] = isset($result['productAllA']) ? $result['productAllA'] : '0.00';
$result['criteo'] = empty($analysisData['criteo']) ? '' : json_encode($analysisData['criteo']);
return $result;
}
... ... @@ -423,7 +419,7 @@ class CartModel
break;
}
$result['data']['hasPrev'] = false;
$result['data']['hasNext'] = true;
if (intval($page) > 1) {
... ... @@ -476,20 +472,20 @@ class CartModel
if (empty($sknList)) {
break;
}
// 组装 skn => goodsId 对应关系
$sknArr = array();
foreach ($sknList as $value) {
$value = explode('-', $value);
if (isset($value[1])) {
$sknArr[ $value[0] ] = $value[1];
$sknArr[$value[0]] = $value[1];
}
}
if (array() === $sknArr) {
break;
}
// 通过SKN列表搜索调用商品信息
$browse = CartData::browseRecordFromSearch(implode(' ', array_keys($sknArr)));
if (empty($browse['data']['product_list'])) {
... ... @@ -532,11 +528,11 @@ class CartModel
$build['href'] = Helpers::url('/product/pro_' . $value['product_id'] . '_' . $goodsId . '/' . $value['cn_alphabet'] . '.html', null, 'item');
$result['data']['item'][] = $build;
break;
}
}
// 当数据量不足6个时,判定为没有下一页
if (!isset($result['data']['item'][5])) {
$result['data']['hasNext'] = false;
... ... @@ -574,7 +570,7 @@ class CartModel
if ($value['payment_type'] == 1 && $value['is_support'] === 'Y') {
$result['onlinePay']['checked'] = $isDefault ? true : false;
$result['onlinePay']['paymentId'] = $value['payment_id'];
}
}
// 货到付款
elseif ($value['payment_type'] == 2 && $value['is_support'] === 'Y') {
$result['deliveryPay']['checked'] = $isDefault ? true : false;
... ... @@ -586,7 +582,7 @@ class CartModel
$result['defaultPayWay'] = $value['payment_type_name'];
}
}
}
}
// 未设置时,设置默认
if (!isset($result['defaultPayWay'])) {
... ... @@ -597,7 +593,7 @@ class CartModel
$result['defaultPayWay'] = '在线支付';
$result['supportDeliveryPay'] = true;
}
if (!empty($pay['data']['delivery_time'])) {
$build = array();
foreach ($pay['data']['delivery_time'] as $value) {
... ... @@ -610,8 +606,8 @@ class CartModel
}
$result['delivery'][] = $build;
}
}
}
// 默认
if (!isset($result['defaultDelivery'])) {
$result['defaultDelivery'] = '只工作日送货(双休日、节假日不送)';
... ... @@ -619,7 +615,7 @@ class CartModel
$result['delivery'][0]['checked'] = true;
}
}
// 支付支持的平台
$result['supportLine'] = array(
array('src' => 'http://static.yohobuy.com/images/pay/icon/zhifubao.png'),
... ... @@ -738,7 +734,7 @@ class CartModel
$result['isPreSell'] = $isAdvanceCart ? true : false;
// 顺丰查看详情
$result['sfUrl'] = Helpers::url('/help/index/logisticsarea', null, 'default');
// 是否是新客访问, 控制显示新手引导
$isNewUser = Helpers::isNewUser();
// 新用户(未下单)且未设置收货地址的,提示引导
... ... @@ -746,7 +742,6 @@ class CartModel
$isNewUser = false;
}
$result['isNewUser'] = $isNewUser ? true : false;
} while (false);
return $result;
... ... @@ -904,7 +899,7 @@ class CartModel
$phone = explode('-', strtr($value['phone'], array('null' => '')));
$mobile = strtr($value['mobile'], array('null' => ''));
$mobile = substr($mobile, 0, 3) . '****' . substr($mobile, 7);
$build = array();
$build['id'] = $value['address_id'];
$build['user'] = $value['consignee'];
... ... @@ -1007,7 +1002,7 @@ class CartModel
} else if (!empty($phoneNum) && !is_numeric($phoneNum)) {
$result['code'] = 406;
$result['message'] = '输入的固定电话格式不正确';
} else if ((!empty($phoneNum) && empty($phoneCode)) || (!empty($phoneCode) && empty($phoneNum)) ) {
} else if ((!empty($phoneNum) && empty($phoneCode)) || (!empty($phoneCode) && empty($phoneNum))) {
$result['code'] = 407;
$result['message'] = '输入的固定电话格式不正确';
} else {
... ... @@ -1105,7 +1100,6 @@ class CartModel
$result[] = $build;
}
$couponList = array();
} while (false);
return $result;
... ... @@ -1140,7 +1134,7 @@ class CartModel
return $result;
}
/**
* 获取购物车总数
*
... ... @@ -1152,7 +1146,7 @@ class CartModel
{
return CartData::cartCount($uid, $shoppingKey);
}
/**
* 追加商品
*
... ... @@ -1165,9 +1159,9 @@ class CartModel
{
foreach ($data as $value) {
$source[$index] = $value;
++ $index;
++$index;
}
return $source;
}
... ... @@ -1178,10 +1172,10 @@ class CartModel
* @param int $default 默认值
* @return float
*/
private static function genProductAmount($promotionList, $default)
private static function genProductAmount($promotionList, $default)
{
$result = $default;
$vipAmount = null;
foreach ($promotionList as $value) {
if ($value['promotion'] === 'VIP优惠') {
... ... @@ -1193,10 +1187,10 @@ class CartModel
$result = floatval($default) - floatval($vipAmount);
}
$result = Helpers::transPrice($result);
return $result;
}
/**
* 构建促销短语数据
*
... ...
... ... @@ -35,6 +35,7 @@ class IndexController extends WebAction
$this->_view->display('cart', array(
'cartEnsurePage' => true,
'cartEnsure' => CartModel::myCartData($uid, $shoppingKey, $cartDelList),
'uid' => $uid ? $uid : '',
));
}
... ...