public function run(array $params) { $pageSize = 500; $goodsBasicService = new Goods(); $totalGoodsCount = SearchHelper::count(SearchHelper::Module_Goods, array()); for ($pageNo = 0; $pageNo * $pageSize < $totalGoodsCount; $pageNo++) { // 查询商品 $goodsArray = SearchHelper::search(SearchHelper::Module_Goods, 'g.goods_id', array(), array(array('g.goods_id', 'asc')), $pageNo * $pageSize, $pageSize); foreach ($goodsArray as $goodsItem) { $goods_id = $goodsItem['goods_id']; printLog('begin process goods [' . $goods_id . ']'); $goodsObj = $goodsBasicService->loadGoodsById($goods_id); if ($goodsObj->isEmpty()) { printLog('goods [' . $goods_id . '] is empty'); } else { $goodsObj->goods_desc = str_replace('tuan.bangzhufu.com', 'www.bangzhufu.com', $goodsObj->goods_desc); $goodsObj->goods_desc = str_replace('cdn.bzfshop.net', 'img.bangzhufu.com', $goodsObj->goods_desc); $goodsObj->goods_desc = preg_replace('!/Goods/View/goods_id~([0-9]+).html!', '/Goods/View/goods_id-\\1.html', $goodsObj->goods_desc); $goodsObj->update_time = \Core\Helper\Utility\Time::gmTime(); $goodsObj->save(); } unset($goodsObj); printLog('end process goods [' . $goods_id . ']'); } } }
/** * 商品修改价格 * * @param array $paramArray * * @return array */ public function setPrice(array $paramArray) { $resultArray = array('code' => '-1', 'message' => '参数错误'); $goods_id = abs(intval(@$paramArray['goods_id'])); $goodsBasicService = new GoodsBasicService(); $goods = $goodsBasicService->loadGoodsById($goods_id); if ($goods->isEmpty()) { goto out; } // 更新商品字段 $goodsUpdateFieldArray = @$paramArray['goods']; foreach ($goodsUpdateFieldArray as $field => $value) { if (in_array($field, array('goods_id'))) { // 安全考虑,一些字段不允许修改 continue; } // 价格特殊处理 if ('shop_price' == $field) { $goods->shop_price = Money::toStorage($value); continue; } $goods->{$field} = $value; } $goods->save(); //清除缓存,确保商品显示正确 ClearHelper::clearGoodsCacheById($goods->goods_id); $resultArray = array('code' => '0', 'message' => '商品[' . $goods_id . ']属性修改成功'); out: return $resultArray; }
public function execute($cartInstance) { // 使用引用取得内部数据,方便操作 $cartContext =& $cartInstance->getCartContextRef(); if ($cartContext->isEmpty()) { // 没有数据,不需要计算 goto out_fail; } // 对每个商品加载数据 $goodsBasicService = new GoodsBasicService(); $orderBasicService = new OrderBasicService(); foreach ($cartContext->orderGoodsArray as &$orderGoodsItem) { //加载商品信息,缓存1秒,提高后面同样商品的查询效率 $goods = $goodsBasicService->loadGoodsById($orderGoodsItem->getValue('goods_id'), 1); $orderGoodsItem->goods = $goods->toArray(); // 如果已经有存在的 orderGoods 记录(对应数据库中 order_goods 记录),我们需要重新加载一次 // 因为客服有可能在后台对订单做了修改 if ($orderGoodsItem->orderGoods && @$orderGoodsItem->orderGoods['rec_id'] > 0) { $orderGoods = $orderBasicService->loadOrderGoodsById($orderGoodsItem->orderGoods['rec_id']); $orderGoodsItem->orderGoods = $orderGoods->toArray(); unset($orderGoods); } } unset($orderGoodsItem); return true; out_fail: return false; // 返回 false,后面的 pipeline 就不会被执行了 }
public function get($f3) { global $smarty; // 首先做参数合法性验证 $validator = new Validator($f3->get('GET')); $goods_id = $validator->required('商品id不能为空')->digits('商品id非法')->min(1, true, '商品id非法')->validate('goods_id'); if (!$this->validate($validator)) { goto out_fail; } // 生成 smarty 的缓存 id $smartyCacheId = 'Goods|' . $goods_id . '|View'; // 开启并设置 smarty 缓存时间 enableSmartyCache(true, MobileThemePlugin::getOptionValue('smarty_cache_time_goods_view')); // 缓存页面 if ($smarty->isCached('goods_view.tpl', $smartyCacheId)) { goto out_display; } // 查询商品信息 $goodsBasicService = new GoodsBasicService(); $goodsInfo = $goodsBasicService->loadGoodsById($goods_id); // 商品不存在,退出 if ($goodsInfo->isEmpty() || !Utils::isTagExist(PluginHelper::SYSTEM_MOBILE, $goodsInfo['system_tag_list'])) { $this->addFlashMessage('商品 [' . $goods_id . '] 不存在'); goto out_fail; } // 取商品推广信息设置 $goodsPromote = $goodsBasicService->loadGoodsPromoteByGoodsId($goods_id); // 取商品图片集 $goodsGalleryArray = GoodsGalleryCache::getGoodsGallery($goods_id); foreach ($goodsGalleryArray as &$galleryItem) { $galleryItem['img_url'] = RouteHelper::makeImageUrl($galleryItem['img_url']); $galleryItem['thumb_url'] = RouteHelper::makeImageUrl($galleryItem['thumb_url']); } unset($galleryItem); // 设置商品页面的 SEO 信息 $smarty->assign('seo_title', $goodsInfo['seo_title'] . ',' . $f3->get('sysConfig[site_name]')); $smarty->assign('seo_description', $goodsInfo['seo_description']); $smarty->assign('seo_keywords', $goodsInfo['seo_keyword']); // 给模板赋值 $smarty->assign('goodsInfo', $goodsInfo); $smarty->assign('goodsPromote', $goodsPromote); if (!Utils::isEmpty($goodsGalleryArray)) { $smarty->assign('goodsGalleryArray', $goodsGalleryArray); } // 设置商品规格 if (!empty($goodsInfo['goods_spec'])) { $goodsSpecService = new GoodsSpecService(); $goodsSpecService->initWithJson($goodsInfo['goods_spec']); $smarty->assign('goodsSpec', $goodsSpecService->getGoodsSpecDataArray()); } out_display: $smarty->display('goods_view.tpl', $smartyCacheId); return; out_fail: // 失败从这里返回 RouteHelper::reRoute($this, '/'); // 返回首页 }
public function post($f3) { // 权限检查 $this->requirePrivilege('manage_goods_edit_edit_post'); global $smarty; // 参数验证 $validator = new Validator($f3->get('GET')); $goods_id = $validator->required('商品ID不能为空')->digits()->min(1)->validate('goods_id'); if (!$this->validate($validator)) { goto out_fail; } unset($validator); $goodsBasicService = new GoodsBasicService(); $goods = $goodsBasicService->loadGoodsById($goods_id); if ($goods->isEmpty()) { $this->addFlashMessage('商品ID[' . $goods_id . ']非法'); goto out_fail; } // 商品类型属性做验证 $validator = new Validator($f3->get('POST')); //表单数据验证、过滤 $type_id = $validator->digits()->min(1)->validate('type_id'); if (!$this->validate($validator)) { goto out_fail; } $goodsTypeService = new GoodsTypeService(); // 商品类型发生了变化,清除所有旧的属性 if ($goods['type_id'] != $type_id) { $goodsTypeService->removeAllGoodsAttrItemValue($goods_id); $goods->type_id = $type_id; $goods->save(); } // 获得属性值列表 $goodsAttrValueArray = $f3->get('POST[goodsAttrValueArray]'); if (!empty($goodsAttrValueArray)) { foreach ($goodsAttrValueArray as $goodsAttrValueInfo) { $goodsAttrValueInfo = @json_decode($goodsAttrValueInfo, true); if (empty($goodsAttrValueInfo)) { continue; } // 更新属性值 $goodsAttrValue = $goodsTypeService->loadGoodsAttrById(intval($goodsAttrValueInfo['goods_attr_id'])); $goodsAttrValue->goods_id = $goods_id; $goodsAttrValue->attr_item_id = $goodsAttrValueInfo['meta_id']; $goodsAttrValue->attr_item_value = $goodsAttrValueInfo['attr_item_value']; $goodsAttrValue->save(); } } // 成功,显示商品详情 $this->addFlashMessage('商品类型属性保存成功'); //清除缓存,确保商品显示正确 ClearHelper::clearGoodsCacheById($goods_id); RouteHelper::reRoute($this, RouteHelper::makeUrl('/Goods/Edit/Type', array('goods_id' => $goods_id), true)); return; out_fail: RouteHelper::reRoute($this, '/Goods/Search'); }
public function run(array $params) { global $f3; $goodsBasicService = new GoodsBasicService(); $goods = $goodsBasicService->loadGoodsById('20'); $sql = 'update ' . DataMapper::tableName('goods') . ' set goods_after_service = ? '; $dbEngine = DataMapper::getDbEngine(); $dbEngine->exec($sql, array(1 => $goods['goods_after_service'])); }
public function get($f3) { // 权限检查 $this->requirePrivilege('manage_goods_edit_edit_get'); global $smarty; // 参数验证 $validator = new Validator($f3->get('GET')); $goods_id = $validator->required('商品ID不能为空')->digits()->min(1)->validate('goods_id'); // 商品信息 $goodsBasicService = new GoodsBasicService(); $goods = $goodsBasicService->loadGoodsById($goods_id); if ($goods->isEmpty()) { $this->addFlashMessage('商品ID[' . $goods . ']非法'); goto out_fail; } $pageNo = $validator->digits()->min(0)->validate('pageNo'); $pageSize = $validator->digits()->min(0)->validate('pageSize'); // 设置缺省值 $pageNo = isset($pageNo) && $pageNo > 0 ? $pageNo : 0; $pageSize = isset($pageSize) && $pageSize > 0 ? $pageSize : 20; if (!$this->validate($validator)) { goto out_fail; } //查询条件 $searchFormQuery = array(); $searchFormQuery['task_name'] = array('=', GoodsCronTask::$task_name); $searchFormQuery['search_param'] = array('=', $goods_id); // 建立查询条件 $searchParamArray = QueryBuilder::buildQueryCondArray($searchFormQuery); $cronTaskService = new CronTaskService(); $totalCount = $cronTaskService->countCronTaskArray($searchParamArray); if ($totalCount <= 0) { // 没任务,可以直接退出了 goto out_display; } $cronTaskArray = $cronTaskService->fetchCronTaskArray($searchParamArray, $pageNo * $pageSize, $pageSize); // 给模板赋值 $smarty->assign('totalCount', $totalCount); $smarty->assign('pageNo', $pageNo); $smarty->assign('pageSize', $pageSize); $smarty->assign('cronTaskArray', $cronTaskArray); out_display: $smarty->assign('goods', $goods->toArray()); $smarty->display('goods_edit_cron.tpl'); return; out_fail: RouteHelper::reRoute($this, '/Goods/Search'); }
public function post($f3) { // 权限检查 $this->requirePrivilege('manage_goods_edit_edit_post'); global $smarty; // 参数验证 $validator = new Validator($f3->get('GET')); $goods_id = $validator->required('商品ID不能为空')->digits()->min(1)->validate('goods_id'); if (!$this->validate($validator)) { goto out_fail_list_goods; } unset($validator); // 用户提交的商品信息做验证 $goodsPromoteInfo = $f3->get('POST.goods_promote'); if (empty($goodsPromoteInfo)) { goto out_fail_validate; } //安全性处理 unset($goodsPromoteInfo['promote_id']); $goodsPromoteInfo['goods_id'] = $goods_id; // 写入到数据库 $goodsBasicService = new GoodsBasicService(); $goodsPromote = $goodsBasicService->loadGoodsPromoteByGoodsId($goods_id); $goodsPromote->copyFrom($goodsPromoteInfo); $goodsPromote->save(); // 记录商品编辑日志 $goodsLogContent = '360分类:' . $goodsPromote['360tuan_category'] . ',' . $goodsPromote['360tuan_category_end'] . "\n" . "360排序:" . $goodsPromote['360tuan_sort_order']; $authAdminUser = AuthHelper::getAuthUser(); $goodsLogService = new GoodsLogService(); $goodsLogService->addGoodsLog($goods_id, $authAdminUser['user_id'], $authAdminUser['user_name'], static::$goodsLogDesc, $goodsLogContent); // 成功,显示商品详情 $this->addFlashMessage('商品推广渠道保存成功'); //清除缓存,确保商品显示正确 ClearHelper::clearGoodsCacheById($goods_id); RouteHelper::reRoute($this, RouteHelper::makeUrl('/Goods/Edit/Promote', array('goods_id' => $goods_id), true)); return; // 参数验证失败 out_fail_validate: $smarty->display('goods_edit_promote.tpl'); return; out_fail_list_goods: RouteHelper::reRoute($this, '/Goods/Search'); }
public function run(array $params) { global $f3; $outputFile = $f3->get('TEMP') . 'CheckGoodsInnerImageUrl.log'; $imageHostAllow = array('img.bangzhufu.com'); $pageSize = 500; $goodsBasicService = new Goods(); $totalGoodsCount = SearchHelper::count(SearchHelper::Module_Goods, array()); for ($pageNo = 0; $pageNo * $pageSize < $totalGoodsCount; $pageNo++) { // 查询商品 $goodsArray = SearchHelper::search(SearchHelper::Module_Goods, 'g.goods_id', array(), array(array('g.goods_id', 'asc')), $pageNo * $pageSize, $pageSize); foreach ($goodsArray as $goodsItem) { $goods_id = $goodsItem['goods_id']; printLog('begin process goods [' . $goods_id . ']'); $goodsObj = $goodsBasicService->loadGoodsById($goods_id); if ($goodsObj->isEmpty()) { printLog('goods [' . $goods_id . '] is empty'); } else { $patternMatch = array(); preg_match_all('/<img(.*?)src="(.*?)"(.*?)\\/?>/', $goodsObj->goods_desc, $patternMatch, PREG_SET_ORDER); $isFirst = true; // 处理每一个图片 foreach ($patternMatch as $matchItem) { $imageUrl = $matchItem[2]; $urlInfo = parse_url($imageUrl); if (!in_array(@$urlInfo['host'], $imageHostAllow)) { if ($isFirst) { $isFirst = false; $f3->write($outputFile, "\n\ngoods_id:" . $goodsObj->goods_id . "\n", true); } $f3->write($outputFile, "\t" . $matchItem[2] . "\n", true); printLog('illegal image url [' . $matchItem[2] . ']'); } } unset($patternMatch); } unset($goodsObj); printLog('end process goods [' . $goods_id . ']'); } } }
/** * 更新商品的库存 * * @param int $goods_id * @param string $specStr 商品规格 * @param int $goods_number 库存 */ public function updateGoodsGoodsNumber($goods_id, $specStr, $goods_number) { // 参数验证 $validator = new Validator(array('goods_id' => $goods_id, 'specStr' => $specStr, 'goods_number' => $goods_number)); $goods_id = $validator->required()->digits()->min(1)->validate('goods_id'); $specStr = $validator->validate('specStr'); $goods_number = $validator->required()->digits()->min(1)->validate('goods_number'); $this->validate($validator); $goodsBasicService = new GoodsBasicService(); $goods = $goodsBasicService->loadGoodsById($goods_id); if ($goods->isEmpty()) { // 不存在的商品,退出 return; } // 商品有规格选择,我们需要计算规格的库存 if (!empty($goods->goods_spec)) { $goodsSpecService = new GoodsSpecService(); $goodsSpecService->initWithJson($goods->goods_spec); $goodsSpecDataArray = $goodsSpecService->getGoodsSpecDataArray($specStr); if (empty($goodsSpecDataArray)) { goto no_spec_goods_calc; // 不正常的商品规格选择,按照普通购买计算库存 } // 计算剩余库存 $specGoodsNumber = @$goodsSpecDataArray['goods_number']; $specGoodsNumber -= $goods_number; $specGoodsNumber = $specGoodsNumber >= 0 ? $specGoodsNumber : 0; // 确保库存不能为负数 // 更新商品规格对应的库存 $goodsSpecService->setGoodsSpecGoodsNumber($specStr, $specGoodsNumber); $goods->goods_spec = $goodsSpecService->getJsonStr(); $goods->save(); return; } no_spec_goods_calc: // 普通商品,没有商品规格选择 $goods->goods_number -= $goods_number; // 确保库存不能是负数 $goods->goods_number = $goods->goods_number >= 0 ? $goods->goods_number : 0; $goods->save(); }
/** * 列出哪些商品关联了我 * * @param $f3 */ public function ajaxListLinkByGoods($f3) { // 权限检查 $this->requirePrivilege('manage_goods_edit_edit_get', true); // 首先做参数验证 $validator = new Validator($f3->get('GET')); $errorMessage = ''; $link_goods_id = $validator->required()->digits()->min(1)->validate('link_goods_id'); if (!$this->validate($validator)) { $errorMessage = implode('|', $this->flashMessageArray); goto out_fail; } $goodsBasicService = new GoodsBasicService(); $linkGoodsArray = $goodsBasicService->fetchLinkByGoodsArray($link_goods_id); out: Ajax::header(); echo Ajax::buildResult(null, null, $linkGoodsArray); return; out_fail: // 失败,返回出错信息 Ajax::header(); echo Ajax::buildResult(-1, $errorMessage, null); }
/** * 显示订单详情 */ public function Detail($f3) { // 权限检查 $this->requirePrivilege('manage_order_goods_detail'); global $smarty; // 参数验证 $validator = new Validator($f3->get('GET')); $rec_id = $validator->required()->digits()->min(1)->validate('rec_id'); if (!$this->validate($validator)) { goto out_display; } // 取 order_goods $orderBasicService = new OrderBasicService(); $orderGoods = $orderBasicService->loadOrderGoodsById($rec_id); if ($orderGoods->isEmpty() || $orderGoods['order_id'] <= 0) { $this->addFlashMessage('订单ID非法'); goto out_display; } // 转换状态显示 $orderGoods['order_goods_status_desc'] = OrderGoodsService::$orderGoodsStatusDesc[$orderGoods['order_goods_status']]; // 额外优惠允许的最大金额 $allowExtraDiscount = $orderGoods['goods_price'] + $orderGoods['shipping_fee'] - $orderGoods['discount']; $maxExtraDiscount = round($allowExtraDiscount * $f3->get('sysConfig[max_order_goods_extra_discount_rate]'), 2); $maxExtraDiscount = max($maxExtraDiscount, $f3->get('sysConfig[max_order_goods_extra_discount_value]')); $maxExtraDiscount = min($maxExtraDiscount, $allowExtraDiscount); // 退款允许退的最大金额 $maxRefund = $orderGoods['goods_price'] + $orderGoods['shipping_fee'] - $orderGoods['discount'] - $orderGoods['extra_discount']; // 取商品信息 $goodsBasicService = new GoodsBasicService(); $goods = $goodsBasicService->loadGoodsById($orderGoods['goods_id'], 300); // 缓存 300 秒 // 取 order_info $orderInfo = $orderBasicService->loadOrderInfoById($orderGoods['order_id']); if ($orderInfo->isEmpty()) { $this->addFlashMessage('订单ID非法'); goto out_display; } $orderInfo['order_status_desc'] = OrderBasicService::$orderStatusDesc[$orderInfo['order_status']]; $orderInfo['pay_status_desc'] = OrderBasicService::$payStatusDesc[$orderInfo['pay_status']]; // 取订单来源信息 $orderReferService = new OrderReferService(); $orderRefer = $orderReferService->loadOrderReferByOrderId($orderInfo['order_id'], 300); //缓存5分钟 // 取用户账户 $userBasicService = new UserBasicService(); $userInfo = $userBasicService->loadUserById($orderInfo['user_id']); // 取得订单的操作日志 $orderActionService = new OrderActionService(); $orderLogArray = $orderActionService->fetchOrderLogArray($orderGoods['order_id'], $orderGoods['rec_id']); // 状态字段转换成可以显示的字符串 foreach ($orderLogArray as &$orderLog) { $orderLog['order_status'] = OrderBasicService::$orderStatusDesc[$orderLog['order_status']]; $orderLog['pay_status'] = OrderBasicService::$payStatusDesc[$orderLog['pay_status']]; $orderLog['order_goods_status'] = OrderGoodsService::$orderGoodsStatusDesc[$orderLog['order_goods_status']]; $orderLog['action_note'] = nl2br($orderLog['action_note']); } unset($orderLog); // 查询供货商信息 $supplierUserService = new SupplierUserService(); $supplierInfo = $supplierUserService->loadSupplierById($orderGoods['suppliers_id']); // 给模板赋值 $smarty->assign('orderGoods', $orderGoods); $smarty->assign('goods', $goods); $smarty->assign('maxExtraDiscount', $maxExtraDiscount); $smarty->assign('maxRefund', $maxRefund); $smarty->assign('orderInfo', $orderInfo); $smarty->assign('orderRefer', $orderRefer); $smarty->assign('userInfo', $userInfo); $smarty->assign('supplierInfo', $supplierInfo); $smarty->assign('orderLogArray', $orderLogArray); out_display: $smarty->display('order_goods_detail.tpl'); }
public function post($f3) { // 权限检查 $this->requirePrivilege('manage_goods_edit_edit_post'); global $smarty; // 参数验证 $validator = new Validator($f3->get('GET')); $goods_id = $validator->required('商品ID不能为空')->digits()->min(1)->validate('goods_id'); if (!$this->validate($validator)) { goto out_fail_list_goods; } unset($validator); // 用户提交的商品信息做验证 $goodsTeam = $f3->get('POST.goods_team'); if (empty($goodsTeam)) { goto out_fail_validate; } $validator = new Validator($goodsTeam); $goodsTeamInfo = array(); $goodsTeamInfo['goods_id'] = $goods_id; //表单数据验证、过滤 $goodsTeamInfo['team_enable'] = $validator->digits()->validate('team_enable'); $goodsTeamInfo['team_title'] = $validator->required('团购标题不能为空')->validate('team_title'); $goodsTeamInfo['team_seo_keyword'] = $validator->validate('team_seo_keyword'); $goodsTeamInfo['team_seo_description'] = $validator->validate('team_seo_description'); $goodsTeamInfo['team_price'] = Money::toStorage($validator->validate('team_price')); $goodsTeamInfo['team_sort_order'] = $validator->filter('ValidatorIntValue')->validate('team_sort_order'); $goodsTeamInfo['team_per_number'] = $validator->filter('ValidatorIntValue')->validate('team_per_number'); $goodsTeamInfo['team_min_number'] = $validator->filter('ValidatorIntValue')->validate('team_min_number'); $goodsTeamInfo['team_max_number'] = $validator->filter('ValidatorIntValue')->validate('team_max_number'); $goodsTeamInfo['team_pre_number'] = $validator->filter('ValidatorIntValue')->validate('team_pre_number'); //单独解析时间 $team_begin_time_str = $validator->validate('team_begin_time_str'); $teamBeginTime = Time::gmStrToTime($team_begin_time_str); if ($teamBeginTime <= 0) { $this->addFlashMessage('团购开始时间无效'); goto out_fail_validate; } $goodsTeamInfo['team_begin_time'] = $teamBeginTime; $team_end_time_str = $validator->validate('team_end_time_str'); $teamEndTime = Time::gmStrToTime($team_end_time_str); if ($teamEndTime <= 0) { $this->addFlashMessage('团购结束时间无效'); goto out_fail_validate; } $goodsTeamInfo['team_end_time'] = $teamEndTime; //参数验证 if (!$this->validate($validator)) { goto out_fail_validate; } // 写入到数据库 unset($goodsTeam); $goodsBasicService = new GoodsBasicService(); $goodsTeam = $goodsBasicService->loadGoodsTeamByGoodsId($goods_id); $goodsTeam->copyFrom($goodsTeamInfo); $goodsTeam->save(); // 成功,显示商品详情 $this->addFlashMessage('商品团购信息保存成功'); //清除缓存,确保商品显示正确 ClearHelper::clearGoodsCacheById($goods_id); RouteHelper::reRoute($this, RouteHelper::makeUrl('/Goods/Edit/Team', array('goods_id' => $goods_id), true)); return; // 参数验证失败 out_fail_validate: $smarty->display('goods_edit_team.tpl'); return; out_fail_list_goods: RouteHelper::reRoute($this, '/Goods/Search'); }
public function post($f3) { // 权限检查 $this->requirePrivilege('manage_goods_edit_edit_post'); global $smarty; $isCreateGoods = false; // 是否是创建新商品 // 参数验证 $validator = new Validator($f3->get('GET')); $goods_id = $validator->digits()->filter('ValidatorIntValue')->validate('goods_id'); if (!$this->validate($validator)) { goto out_fail_list_goods; } unset($validator); // 用户提交的商品信息做验证 $goods = $f3->get('POST[goods]'); if (empty($goods)) { goto out_fail_validate; } $validator = new Validator($goods); $goodsInfo = array(); //表单数据验证、过滤 $goodsInfo['goods_name'] = $validator->required('商品名不能为空')->validate('goods_name'); $goodsInfo['goods_name_short'] = $validator->required('商品短标题不能为空')->validate('goods_name_short'); $goodsInfo['keywords'] = $validator->validate('keywords'); $goodsInfo['seo_title'] = $validator->validate('seo_title'); $goodsInfo['seo_keyword'] = $validator->validate('seo_keyword'); $goodsInfo['seo_description'] = $validator->validate('seo_description'); $goodsInfo['goods_sn'] = $validator->validate('goods_sn'); $goodsInfo['warehouse'] = $validator->validate('warehouse'); $goodsInfo['shelf'] = $validator->validate('shelf'); $goodsInfo['cat_id'] = $validator->required('商品分类不能为空')->filter('ValidatorIntValue')->validate('cat_id'); // 记录管理员 $authAdminUser = AuthHelper::getAuthUser(); $goodsInfo['admin_user_id'] = $validator->filter('ValidatorIntValue')->validate('admin_user_id'); // 如果没有选择管理员,就用当前管理员 if (empty($goodsInfo['admin_user_id'])) { $goodsInfo['admin_user_id'] = $authAdminUser['user_id']; $goodsInfo['admin_user_name'] = $authAdminUser['user_name']; } else { $adminUserService = new AdminUserService(); $adminUser = $adminUserService->loadAdminById($goodsInfo['admin_user_id']); if ($adminUser->isEmpty()) { $this->addFlashMessage('管理员[' . $goodsInfo['admin_user_id'] . ']不存在'); goto out_fail_validate; } $goodsInfo['admin_user_name'] = $adminUser['user_name']; unset($adminUser); unset($adminUserService); } $goodsInfo['brand_id'] = $validator->filter('ValidatorIntValue')->validate('brand_id'); $goodsInfo['suppliers_id'] = $validator->required('供货商不能为空')->filter('ValidatorIntValue')->validate('suppliers_id'); $goodsInfo['is_alone_sale'] = $validator->filter('ValidatorIntValue')->validate('is_alone_sale'); $goodsInfo['is_best'] = $validator->filter('ValidatorIntValue')->validate('is_best'); $goodsInfo['is_new'] = $validator->filter('ValidatorIntValue')->validate('is_new'); $goodsInfo['is_hot'] = $validator->filter('ValidatorIntValue')->validate('is_hot'); $goodsInfo['is_on_sale'] = $validator->filter('ValidatorIntValue')->validate('is_on_sale'); $goodsInfo['market_price'] = Money::toStorage($validator->validate('market_price')); $goodsInfo['shop_price'] = Money::toStorage($validator->validate('shop_price')); $goodsInfo['shipping_fee'] = Money::toStorage($validator->validate('shipping_fee')); $goodsInfo['shipping_free_number'] = $validator->validate('shipping_free_number'); $goodsInfo['goods_number'] = abs($validator->filter('ValidatorIntValue')->validate('goods_number')); $goodsInfo['virtual_buy_number'] = $validator->filter('ValidatorIntValue')->validate('virtual_buy_number'); $goodsInfo['suppliers_price'] = Money::toStorage($validator->validate('suppliers_price')); $goodsInfo['suppliers_shipping_fee'] = Money::toStorage($validator->validate('suppliers_shipping_fee')); $goodsInfo['sort_order'] = $validator->validate('sort_order'); $goodsInfo['warn_number'] = $validator->filter('ValidatorIntValue')->validate('warn_number'); $goodsInfo['goods_brief'] = @$goods['goods_brief']; //不需要过滤 html $goodsInfo['goods_notice'] = @$goods['goods_notice']; //不需要过滤 html $goodsInfo['goods_after_service'] = @$goods['goods_after_service']; //不需要过滤 html $goodsInfo['seller_note'] = $validator->validate('seller_note'); $goodsInfo['system_tag_list'] = Utils::makeTagString(@$goods['system_tag_list']); // 生成系统的 tag string $goodsInfo['update_time'] = Time::gmTime(); // 商品的更新时间 $goodsInfo['goods_desc'] = @$goods['goods_desc']; //不需要过滤 html if (!$this->validate($validator)) { goto out_fail_validate; } // 某些时候,我们不允许编辑直接粘贴别人网站的图片上来,所以我们需要过滤图片的域名 $goodsDescAllowImageDomainArray = $f3->get('sysConfig[goods_desc_allow_image_domain_array]'); if ($goodsDescAllowImageDomainArray && is_array($goodsDescAllowImageDomainArray) && !empty($goodsDescAllowImageDomainArray)) { $patternMatch = array(); preg_match_all('/<img(.*?)src="(.*?)"(.*?)\\/?>/', $goodsInfo['goods_desc'], $patternMatch, PREG_SET_ORDER); // 检查每一个图片 foreach ($patternMatch as $matchItem) { $imageUrl = $matchItem[2]; $urlInfo = parse_url($imageUrl); if (!in_array(@$urlInfo['host'], $goodsDescAllowImageDomainArray)) { $this->addFlashMessage('商品详情非法图片 ' . $imageUrl); goto out_fail_validate; } } } // 写入到数据库 unset($goods); $goodsBasicService = new GoodsBasicService(); $goods = $goodsBasicService->loadGoodsById($goods_id); // 判断是否是新建商品 $isCreateGoods = $goods->isEmpty(); if ($isCreateGoods) { // 权限检查 $this->requirePrivilege('manage_goods_create'); $goodsInfo['add_time'] = Time::gmTime(); } $post_goods_sn = $validator->validate('goods_sn'); if ($isCreateGoods && !Utils::isBlank($post_goods_sn)) { $goodsInfo['goods_sn'] = $post_goods_sn; } $goods->copyFrom($goodsInfo); $goods->save(); // 新商品需要自动生成 goods_sn if ($isCreateGoods && Utils::isBlank($post_goods_sn)) { $goods->goods_sn = $f3->get('sysConfig[goods_sn_prefix]') . $goods['goods_id']; $goods->save(); } // 取得供货商信息 $supplierName = ''; if (!empty($goods['suppliers_id'])) { $supplierUserService = new SupplierUserService(); $supplierInfo = $supplierUserService->loadSupplierById($goods['suppliers_id']); if (!$supplierInfo->isEmpty()) { $supplierName = $supplierInfo['suppliers_name']; } } // 记录商品编辑日志 $goodsLogContent = '商品编辑:[' . $goods['admin_user_id'] . ']' . $goods['admin_user_name'] . "\n" . '上架状态:' . ($goods['is_on_sale'] > 0 ? '已上架' : '未上架') . "\n" . '销售价:' . Money::toSmartyDisplay($goods['shop_price']) . ' 供货价:' . Money::toSmartyDisplay($goods['suppliers_price']) . "\n" . '快递费:' . Money::toSmartyDisplay($goods['shipping_fee']) . ' 供货快递费:' . Money::toSmartyDisplay($goods['suppliers_shipping_fee']) . "\n" . ($goods['shipping_free_number'] > 0 ? '' . $goods['shipping_free_number'] . "件免邮\n" : '') . '商品排序:' . $goods['sort_order'] . "\n" . '系统Tag:' . $goods['system_tag_list'] . "\n" . '供货商:[' . $goods['suppliers_id'] . ']' . $supplierName; $goodsLogService = new GoodsLogService(); $goodsLogService->addGoodsLog($goods['goods_id'], $authAdminUser['user_id'], $authAdminUser['user_name'], $isCreateGoods ? '新建商品' : static::$goodsLogDesc, $goodsLogContent); // 成功,显示商品详情 $this->addFlashMessage('商品信息保存成功'); //清除缓存,确保商品显示正确 ClearHelper::clearGoodsCacheById($goods->goods_id); RouteHelper::reRoute($this, RouteHelper::makeUrl('/Goods/Edit/Edit', array('goods_id' => $goods->goods_id), true)); return; // 参数验证失败 out_fail_validate: if (!$goods_id) { // 新建商品验证失败 RouteHelper::reRoute($this, '/Goods/Create'); return; } $smarty->assign('goods', $goodsInfo); $smarty->display('goods_edit_edit.tpl'); return; out_fail_list_goods: RouteHelper::reRoute($this, '/Goods/Search'); }
public function post($f3) { // 这里操作加入购物车 // 首先做参数合法性验证 $validator = new Validator($f3->get('POST')); $goods_id = $validator->required('商品id不能为空')->digits('商品id非法')->min(1, true, '商品id非法')->validate('goods_id'); $goodsChooseSpecListStr = $validator->validate('goods_choose_speclist'); $goodsChooseBuyCount = $validator->required('商品最少购买 1 件')->digits('商品最少购买 1 件')->min(1, true, '商品最少购买 1 件')->validate('goods_choose_buycount'); if (!$this->validate($validator)) { goto out_fail; } // 查询商品信息 $goodsBasicService = new GoodsBasicService(); $goodsInfo = $goodsBasicService->loadGoodsById($goods_id); // 商品不存在,不允许显示等 if ($goodsInfo->isEmpty() || !$goodsInfo->is_on_sale || !Utils::isTagExist(PluginHelper::SYSTEM_MOBILE, $goodsInfo['system_tag_list'])) { $this->addFlashMessage('商品不存在或者不能购买'); goto out_fail; } $cartBasicService = new CartBasicService(); // 购物车服务 $cartBasicService->loadFromStorage(); // 恢复购物车中已有的数据 $cartContext =& $cartBasicService->getCartContextRef(); // 取得 cartContext // 商品多组合选择 if (!empty($goodsChooseSpecListStr)) { // 检查商品 Spec 是否合法 $goodsSpecService = new GoodsSpecService(); $goodsSpecService->initWithJson($goodsInfo['goods_spec']); $goodsSpecDataArray = $goodsSpecService->getGoodsSpecDataArray($goodsChooseSpecListStr); if (!$goodsSpecDataArray) { $this->addFlashMessage('商品选择[' . $goodsChooseSpecListStr . ']非法'); goto out_fail; } // 检查商品库存 if ($goodsChooseBuyCount > @$goodsSpecDataArray['goods_number']) { $this->addFlashMessage($goodsChooseSpecListStr . '库存不足,只剩 ' . @$goodsSpecDataArray['goods_number'] . ' 件'); goto out_fail; } // 商品加入到购物车 $cartContext->addGoods($goods_id, $goodsChooseBuyCount, $goodsChooseSpecListStr, @$goodsSpecDataArray['goods_sn']); } else { // 检查库存 if ($goodsChooseBuyCount > $goodsInfo['goods_number']) { $this->addFlashMessage('库存不足,剩余 ' . $goodsInfo['goods_number'] . ' 件'); goto out_fail; } // 普通简单选择,加入购物车 $cartContext->addGoods($goods_id, $goodsChooseBuyCount); } $cartBasicService->syncStorage(); // 保存购物车的数据 out: Ajax::header(); echo Ajax::buildResult(null, null, null); return; out_fail: // 失败,返回出错信息 $errorMessage = implode('|', $this->flashMessageArray); Ajax::header(); echo Ajax::buildResult(-1, $errorMessage, null); }
/** * 生成商品查看的 toolbar,用户可以查看 团购、商城、移动 * * @param array $paramArray * @param $smarty * * @return string */ function smarty_helper_function_goods_view_toolbar(array $paramArray, $smarty) { $goods_id = isset($paramArray['goods_id']) ? intval($paramArray['goods_id']) : 0; $system_tag_list = isset($paramArray['system_tag_list']) ? $paramArray['system_tag_list'] : ''; // 参数不对,没有东西可以输出 if ($goods_id <= 0) { return 'goods_id [' . $goods_id . '] 非法'; } // 如果不提供 system_tag_list 参数,我们从数据库查询 if (!array_key_exists('system_tag_list', $paramArray)) { static $goodsBasicService = null; if (!$goodsBasicService) { $goodsBasicService = new GoodsBasicService(); } // 缓存 5 秒钟 $goods = $goodsBasicService->loadGoodsById($goods_id, 5); if (!$goods->isEmpty()) { $system_tag_list = $goods['system_tag_list']; } else { return 'goods_id [' . $goods_id . '] 非法'; } } // 解析成 System Array $systemArray = \Core\Helper\Utility\Utils::parseTagString($system_tag_list); $htmlContent = '<div class="btn-group">'; $system_url_base_array = json_decode(\Theme\Manage\ManageThemePlugin::getOptionValue('system_url_base_array'), true); if (!empty($system_url_base_array)) { foreach ($systemArray as $system) { if (!array_key_exists($system, $system_url_base_array)) { // 不存在的系统,跳过 continue; } $themeSystem = $system_url_base_array[$system]; $htmlContent .= '<a title="查看' . $themeSystem['name'] . '商品详情" target="_blank" href="' . RouteHelper::makeShopSystemUrl($system, '/Goods/View', array('goods_id' => $goods_id)) . '" class="btn btn-mini btn-info">' . $themeSystem['name'] . '</a>'; } } $htmlContent .= '</div>'; return htmlspecialchars($htmlContent); }
public function Statistics($f3) { global $smarty; $errorMessage = ''; $smartyCacheId = null; // 参数验证 $validator = new Validator($f3->get('GET')); $goods_id = $validator->required()->digits()->min(1)->validate('goods_id'); if (!$this->validate($validator)) { $errorMessage = '商品ID非法'; goto out_fail; } // 生成 smarty 的缓存 id $smartyCacheId = 'Goods|' . $goods_id . '|Search|Statistics'; enableSmartyCache(true, 300); // 缓存 5 分钟 if ($smarty->isCached('goods_search_ajax_statistics.tpl', $smartyCacheId)) { goto out_display; } // 权限检查 $authUser = AuthHelper::getAuthUser(); $goodsBasicService = new GoodsBasicService(); $goodsInfo = $goodsBasicService->loadGoodsById($goods_id, 300); // 缓存 300 秒 if ($goodsInfo['suppliers_id'] !== $authUser['suppliers_id']) { $errorMessage = '商品ID非法'; goto out_fail; } // 查询统计结果 $statisticsService = new Statistics(); $statistics = $statisticsService->goodsSaleStat($goods_id, 300); // 缓存 300 秒 $smarty->assign('goodsInfo', $goodsInfo); $smarty->assign('statistics', $statistics); out_fail: $smarty->assign('errorMessage', $errorMessage); if (!empty($errorMessage)) { // 有错误,不缓存 enableSmartyCache(false, 0); } out_display: $smarty->display('goods_search_ajax_statistics.tpl', $smartyCacheId); }
public function post($f3) { // 权限检查 $this->requirePrivilege('manage_goods_edit_edit_post'); $goodsLogContent = ''; // 参数验证 $validator = new Validator($f3->get('GET')); $goods_id = $validator->required()->digits()->min(1)->validate('goods_id'); if (!$this->validate($validator)) { goto out_fail_list_goods; } unset($validator); $goodsBasicService = new GoodsBasicService(); $goods = $goodsBasicService->loadGoodsById($goods_id, 1); if ($goods->isEmpty()) { $this->addFlashMessage('商品 id[' . $goods_id . '] 非法'); goto out_fail_list_goods; } // POST 参数验证 $validator = new Validator($f3->get('POST')); $goodsSpecNameArray = $validator->validate('goodsSpecNameArray'); $goodsSpecValue1Array = $validator->validate('goodsSpecValue1Array'); $goodsSpecValue2Array = $validator->validate('goodsSpecValue2Array'); $goodsSpecValue3Array = $validator->validate('goodsSpecValue3Array'); $goodsNumberArray = $validator->validate('goodsNumberArray'); $goodsSpecAddPriceArray = $validator->validate('goodsSpecAddPriceArray'); $goodsSnArray = $validator->validate('goodsSnArray'); $imgIdArray = $validator->validate('imgIdArray'); if (empty($goodsSpecValue1Array)) { goto save_spec; } // 检查,商品属性名不能为空 foreach ($goodsSpecNameArray as $goodsSpecName) { if (!empty($goodsSpecName)) { break; } $this->addFlashMessage('商品属性名不能为空'); goto out_fail_edit_spec; } // 商品选项中不能有特殊符号 $valueArray = array_merge($goodsSpecValue1Array, $goodsSpecValue2Array, $goodsSpecValue3Array); foreach ($valueArray as $valueItem) { if (empty($valueItem)) { continue; } // 商品规格不允许有特殊符号 if (preg_match('#[,\\\\t\\s\\n\\+\\?\\^~!%/$]+#', $valueItem)) { $this->addFlashMessage('商品选项不能有特殊符号: 逗号、空格、回车、\\、? 等 ...'); goto out_validate_fail; } } // 做数据格式转换,商品库存 foreach ($goodsNumberArray as &$number) { $number = abs(intval($number)); } unset($number); // 做数据格式转换,商品规格对应的加价 foreach ($goodsSpecAddPriceArray as &$add_price) { $add_price = Money::toStorage(abs(floatval($add_price))); } unset($add_price); if (!$this->validate($validator)) { goto out_reroute; } save_spec: $goodsSpecService = new GoodsSpecService(); $goodsSpecService->initWithData($goodsSpecNameArray, $goodsSpecValue1Array, $goodsSpecValue2Array, $goodsSpecValue3Array, $goodsNumberArray, $goodsSpecAddPriceArray, $goodsSnArray, $imgIdArray); // 保存数据 $goodsSpecService->saveGoodsSpec($goods_id); $this->addFlashMessage('更新商品规格成功'); out: // 正常退出 $goodsSpecNameArray = is_array($goodsSpecNameArray) ? $goodsSpecNameArray : array(); $goodsLogContent .= '属性名:' . implode(',', $goodsSpecNameArray) . "\n"; $valueCount = count($goodsSpecValue1Array); for ($valueIndex = 0; $valueIndex < $valueCount; $valueIndex++) { $goodsLogContent .= '选择:' . @$goodsSpecValue1Array[$valueIndex] . ',' . @$goodsSpecValue2Array[$valueIndex] . ',' . @$goodsSpecValue3Array[$valueIndex] . ',' . '库存:' . @$goodsNumberArray[$valueIndex] . ',' . '加价:' . Money::toSmartyDisplay(@$goodsSpecAddPriceArray[$valueIndex]) . ',' . 'SN:' . @$goodsSnArray[$valueIndex] . ',' . 'image:' . @$imgIdArray[$valueIndex] . ',' . "\n"; } $authAdminUser = AuthHelper::getAuthUser(); $goodsLogService = new GoodsLogService(); $goodsLogService->addGoodsLog($goods_id, $authAdminUser['user_id'], $authAdminUser['user_name'], '商品规格', $goodsLogContent); //清除缓存,确保商品显示正确 ClearHelper::clearGoodsCacheById($goods_id); out_reroute: RouteHelper::reRoute($this, RouteHelper::makeUrl('/Goods/Edit/Spec', array('goods_id' => $goods_id), true)); return; out_fail_list_goods: RouteHelper::reRoute($this, '/Goods/Search'); return; out_validate_fail: global $smarty; $smarty->display('goods_edit_spec.tpl'); return; out_fail_edit_spec: RouteHelper::reRoute($this, RouteHelper::makeUrl('/Goods/Edit/Spec', array('goods_id' => $goods->goods_id), true)); }
/** * 从商品中加载 goods_spec 信息 * * @param int $goods_id * * @return bool */ public function loadGoodsSpec($goods_id, $ttl = 0) { // 参数验证 $validator = new Validator(array('goods_id' => $goods_id)); $goods_id = $validator->required()->digits()->min(1)->validate('goods_id'); $this->validate($validator); $goodsService = new Goods(); $goods = $goodsService->loadGoodsById($goods_id, $ttl); if ($goods->isEmpty()) { return false; } $this->initWithJson($goods->goods_spec); return true; }
public function get($f3) { // 权限检查 $this->requirePrivilege('manage_goods_create'); // 参数验证 $validator = new Validator($f3->get('GET')); $goods_id = $validator->required('商品ID不能为空')->digits()->min(1)->validate('goods_id'); if (!$this->validate($validator)) { goto out_fail; } // 取得商品信息 $goodsBasicService = new GoodsBasicService(); $goods = $goodsBasicService->loadGoodsById($goods_id); if ($goods->isEmpty()) { $this->addFlashMessage('非法商品ID'); goto out_fail; } $authAdminUser = AuthHelper::getAuthUser(); // 1. 复制 goods 信息 $goodsArray = $goods->toArray(); unset($goodsArray['goods_id']); // 清除主键 // 新商品缺省为下线状态 $goodsArray['is_on_sale'] = 0; // 清除购买数量统计 $goodsArray['user_buy_number'] = 0; $goodsArray['user_pay_number'] = 0; // 设置复制人 $goodsArray['admin_user_id'] = $authAdminUser['user_id']; $goodsArray['admin_user_name'] = $authAdminUser['user_name']; // 处理商品的规格 if (!empty($goodsArray['goods_spec'])) { $goodsSpecService = new GoodsSpecService(); $goodsSpecService->initWithJson($goodsArray['goods_spec']); $goodsSpecService->clearGoodsSpecImgIdArray(); // 清除图片 ID 的关联 $goodsArray['goods_spec'] = $goodsSpecService->getJsonStr(); unset($goodsSpecService); } $goodsArray['add_time'] = Time::gmTime(); $newGoods = $goodsBasicService->loadGoodsById(0); $newGoods->copyFrom($goodsArray); $newGoods->save(); // 更新 goods_sn $newGoods->goods_sn = $f3->get('sysConfig[goods_sn_prefix]') . $newGoods['goods_id']; $newGoods->save(); unset($goodsArray); // 2. 复制 goods_attr 信息 if ($goods->type_id > 0) { $goodsTypeService = new GoodsTypeService(); $goodsAttrValueArray = $goodsTypeService->fetchGoodsAttrItemValueArray($goods->goods_id, $goods->type_id); foreach ($goodsAttrValueArray as $goodsAttrValue) { $goodsAttr = $goodsTypeService->loadGoodsAttrById(0); $goodsAttr->goods_id = $newGoods->goods_id; $goodsAttr->attr_item_id = $goodsAttrValue['meta_id']; $goodsAttr->attr_item_value = $goodsAttrValue['attr_item_value']; $goodsAttr->save(); unset($goodsAttr); } unset($goodsAttrValueArray); unset($goodsTypeService); } // 3. 复制 goods_gallery 信息 $goodsGalleryService = new GoodsGalleryService(); $goodsGalleryArray = $goodsGalleryService->fetchGoodsGalleryArrayByGoodsId($goods_id); foreach ($goodsGalleryArray as $goodsGalleryItem) { // 新建一个 goods_gallery 记录 $goodsGallery = $goodsGalleryService->loadGoodsGalleryById(0); unset($goodsGalleryItem['img_id']); $goodsGallery->copyFrom($goodsGalleryItem); $goodsGallery->goods_id = $newGoods['goods_id']; $goodsGallery->save(); unset($goodsGallery); } unset($goodsGalleryArray); unset($goodsGalleryService); // 4. 复制 goods_team 信息 $goodsTeam = $goodsBasicService->loadGoodsTeamByGoodsId($goods_id); if (!$goodsTeam->isEmpty()) { $goodsTeamInfo = $goodsTeam->toArray(); unset($goodsTeamInfo['team_id']); $goodsTeamInfo['goods_id'] = $newGoods['goods_id']; $newGoodsTeam = new DataMapper('goods_team'); $newGoodsTeam->copyFrom($goodsTeamInfo); $newGoodsTeam->save(); unset($newGoodsTeam); unset($goodsTeamInfo); unset($goodsTeam); } // 5. 复制 link_goods 信息 $linkGoodsArray = $goodsBasicService->fetchSimpleLinkGoodsArray($goods_id); foreach ($linkGoodsArray as $linkGoodsItem) { unset($linkGoodsItem['link_id']); $linkGoodsItem['goods_id'] = $newGoods['goods_id']; $linkGoodsItem['admin_id'] = $authAdminUser['user_id']; $linkGoods = new DataMapper('link_goods'); $linkGoods->copyFrom($linkGoodsItem); $linkGoods->save(); unset($linkGoods); } unset($linkGoodsArray); // 6. 复制 goods_promote 信息 $goodsPromote = $goodsBasicService->loadGoodsPromoteByGoodsId($goods_id); if (!$goodsPromote->isEmpty()) { $goodsPromoteInfo = $goodsPromote->toArray(); unset($goodsPromoteInfo['promote_id']); $goodsPromoteInfo['goods_id'] = $newGoods['goods_id']; $newGoodspromote = new DataMapper('goods_promote'); $newGoodspromote->copyFrom($goodsPromoteInfo); $newGoodspromote->save(); unset($newGoodspromote); } unset($goodsPromote); // 记录编辑日志 $goodsLogContent = '从 [' . $goods_id . '] 复制过来'; $goodsLogService = new GoodsLogService(); $goodsLogService->addGoodsLog($newGoods['goods_id'], $authAdminUser['user_id'], $authAdminUser['user_name'], '复制商品', $goodsLogContent); $this->addFlashMessage('复制新建商品成功'); RouteHelper::reRoute($this, RouteHelper::makeUrl('/Goods/Edit/Edit', array('goods_id' => $newGoods['goods_id']), true)); return; //正常返回 out_fail: RouteHelper::reRoute($this, '/Goods/Search'); }
public function get($f3) { global $smarty; // 首先做参数合法性验证 $validator = new Validator($f3->get('GET')); $goods_id = $validator->required('商品id不能为空')->digits('商品id非法')->min(1, true, '商品id非法')->validate('goods_id'); if (!$this->validate($validator)) { goto out_fail; } // 生成 smarty 的缓存 id $smartyCacheId = 'Goods|' . $goods_id . '|View'; // 开启并设置 smarty 缓存时间 enableSmartyCache(true, bzf_get_option_value('smarty_cache_time_goods_view')); if ($smarty->isCached('goods_view.tpl', $smartyCacheId)) { goto out_display; } // 查询商品信息 $goodsBasicService = new GoodsBasicService(); $goodsInfo = $goodsBasicService->loadGoodsById($goods_id); // 商品不存在,退出 if ($goodsInfo->isEmpty() || !Utils::isTagExist(PluginHelper::SYSTEM_SHOP, $goodsInfo['system_tag_list'])) { $this->addFlashMessage('商品 [' . $goods_id . '] 不存在'); goto out_fail; } // 取得商品的分类层级 $goodsCategoryLevelArray = array(); $goodsCategoryService = new GoodsCategoryService(); $categoryLevel = 5; // 最多取 5 层分类 $currentCategoryId = $goodsInfo['cat_id']; for (; $categoryLevel > 0; $categoryLevel--) { $category = $goodsCategoryService->loadCategoryById($currentCategoryId, 1800); if ($category->isEmpty()) { break; } array_unshift($goodsCategoryLevelArray, $category); if ($category['parent_meta_id'] <= 0) { break; } $currentCategoryId = $category['parent_meta_id']; } // 取商品推广信息设置 $goodsPromote = $goodsBasicService->loadGoodsPromoteByGoodsId($goods_id); // 取商品图片集 $goodsGalleryArray = GoodsGalleryCache::getGoodsGallery($goods_id); foreach ($goodsGalleryArray as &$galleryItem) { $galleryItem['img_original'] = RouteHelper::makeImageUrl($galleryItem['img_original']); $galleryItem['img_url'] = RouteHelper::makeImageUrl($galleryItem['img_url']); $galleryItem['thumb_url'] = RouteHelper::makeImageUrl($galleryItem['thumb_url']); } unset($galleryItem); // 取相互关联的商品 $linkGoodsArray = $goodsBasicService->fetchLinkGoodsArray($goods_id); // 相同供货商的商品,一起购买只收一份邮费 $goodsSupplierService = new GoodsSupplierService(); // 取得供货商下面的商品总数,总数只缓存 10 分钟 $supplierTotalGoodsCount = $goodsSupplierService->countSupplierGoodsArray($goodsInfo['suppliers_id'], 600); // 随机挑选 10 个商品 $supplierGoodsSize = 10; $supplierGoodsOffset = $supplierTotalGoodsCount <= $supplierGoodsSize ? 0 : mt_rand(0, $supplierTotalGoodsCount - $supplierGoodsSize); $supplierGoodsArray = $goodsSupplierService->fetchSupplierGoodsArray($goodsInfo['suppliers_id'], $supplierGoodsOffset, $supplierGoodsSize); // 把自己去除掉 $supplierGoodsKeyExcludeArray = array(); foreach ($supplierGoodsArray as $supplierGoodsKey => $supplierGoodsItem) { if ($supplierGoodsItem['goods_id'] == $goods_id) { $supplierGoodsKeyExcludeArray[] = $supplierGoodsKey; } } foreach ($supplierGoodsKeyExcludeArray as $supplierGoodsKey) { unset($supplierGoodsArray[$supplierGoodsKey]); } // 设置商品页面的 SEO 信息 $smarty->assign('seo_title', $goodsInfo['seo_title'] . ',' . $f3->get('sysConfig[site_name]')); $smarty->assign('seo_description', $goodsInfo['seo_description']); $smarty->assign('seo_keywords', $goodsInfo['seo_keyword']); // 给模板赋值 $smarty->assign('goodsInfo', $goodsInfo); $smarty->assign('goodsPromote', $goodsPromote); // 商品购买选择的规格 if (!empty($goodsInfo['goods_spec'])) { $goodsSpecService = new GoodsSpecService(); $goodsSpecService->initWithJson($goodsInfo['goods_spec']); // 只显示有库存的商品规格 $goodsSpecData = $goodsSpecService->getBuyableData(); $smarty->assign($goodsSpecData); $smarty->assign('goodsSpecJson', json_encode($goodsSpecData)); } // 商品的类型属性 if ($goodsInfo['type_id'] > 0) { $goodsTypeService = new GoodsTypeService(); $goodsAttrTreeTable = $goodsTypeService->fetchGoodsAttrItemValueTreeTable($goodsInfo['goods_id'], $goodsInfo['type_id']); $smarty->assign('goodsAttrTreeTable', $goodsAttrTreeTable); } if (!empty($goodsCategoryLevelArray)) { $smarty->assign('goodsCategoryLevelArray', $goodsCategoryLevelArray); } if (!Utils::isEmpty($goodsGalleryArray)) { $smarty->assign('goodsGalleryArray', $goodsGalleryArray); } if (!Utils::isEmpty($linkGoodsArray)) { $smarty->assign('linkGoodsArray', $linkGoodsArray); } if (!Utils::isEmpty($supplierGoodsArray)) { $smarty->assign('supplierGoodsArray', $supplierGoodsArray); } // 滑动图片广告 $goods_view_adv_slider = json_decode(bzf_get_option_value('goods_view_adv_slider'), true); if (!empty($goods_view_adv_slider)) { $smarty->assign('goods_view_adv_slider', $goods_view_adv_slider); } // 移动端对应的 URL,用于百度页面适配 $smarty->assign('currentPageMobileUrl', RouteHelper::makeShopSystemUrl(PluginHelper::SYSTEM_MOBILE, '/Goods/View', array('goods_id' => $goods_id))); out_display: $smarty->display('goods_view.tpl', $smartyCacheId); return; out_fail: // 失败从这里返回 RouteHelper::reRoute($this, '/'); // 返回首页 }