public function run(&$arrData, $arrConf) { if (empty($arrData) || !is_array($arrData)) { return false; } $arrPublicInfo = array(); $intPageNo = intval($arrData['uiData']['queryInfo']['pageNo']); $intRstNum = intval($arrData['uiData']['queryInfo']['resNum']); $arrPublicInfo['word_enc'] = $arrData['uiData']['queryInfo']['wordEnc']; //query_come_from $arrPublicInfo['come_from'] = intval($arrData['uiData']['queryInfo']['pUrlConfig']['f']); $arrPublicInfo['time'] = Volatile::gettimeofday(); //T参数 $arrData['uiData']['queryInfo']['listTime'] = $arrPublicInfo['time']['sec']; $arrNewQueryInfo = CSmarty::getQueryInfo(); $arrNewQueryInfo['listTime'] = $arrPublicInfo['time']['sec']; //CSmarty::setQueryInfo($arrData['uiData']['queryInfo']); CSmarty::setQueryInfo($arrNewQueryInfo); if (!empty($arrData['uiData']['asResult']['item']) && is_array($arrData['uiData']['asResult']['item'])) { foreach ($arrData['uiData']['asResult']['item'] as $intIndex => &$arrItem) { if (!in_array($arrItem['comeFrome'], array('SP', 'AS'))) { continue; } $arrStrategys = array(); $strUrl = $arrItem['offsetInfo']['urlEncoded']; //$arrPublicInfo['url'] = iconv('utf-8','gbk',$arrItem['offsetInfo']['url']); $arrPublicInfo['url'] = urldecode($strUrl); $arrPublicInfo['id'] = $intIndex + ($intPageNo - 1) * $intRstNum + 1; if (!empty($arrItem['comeFrome']) && $arrItem['comeFrome'] == 'AS') { $arrStrategys = $arrItem['urls']['asUrls']['strategys']; } else { $arrStrategys = $arrItem['strategyS']; } $arrStrategys = array_slice($arrStrategys, 0, 4); $arrRst = getClkEncryption($arrStrategys, $arrPublicInfo); //加密串 if (!empty($arrRst['clkencryption'])) { $arrItem['encryptionClick'] = trim($arrRst['clkencryption']); } //F,F1,F2,F3参数 if (!empty($arrRst['strategyStr']) && is_array($arrRst['strategyStr'])) { $arrItem['strategyStr'] = $arrRst['strategyStr']; } //Y参数 if (!empty($arrRst['identifyStr'])) { $arrItem['identifyStr'] = trim($arrRst['identifyStr']); } } } $intSearchIdentifyStr = getSeClkencryption($arrPublicInfo); if ($intSearchIdentifyStr !== false) { $arrData['uiData']['asResult']['searchIdentifyStr'] = $intSearchIdentifyStr; } return true; }
public function run(&$arrData, $arrConf) { if (empty($arrData) || !is_array($arrData)) { return false; } if (!isset($arrData['uiData']['queryInfo']['personalData']) || empty($arrData['uiData']['queryInfo']['personalData'])) { return false; } $arrPersonalData = json_decode($arrData['uiData']['queryInfo']['personalData'], true); if (!is_array($arrPersonalData) || empty($arrPersonalData)) { return false; } if (!isset($arrPersonalData[TrafficFilter::TRAFFIC_KEY])) { return false; } // 处理违章多车信息 $arrTrafficInfo = $arrPersonalData[TrafficFilter::TRAFFIC_KEY]; unset($arrPersonalData[TrafficFilter::TRAFFIC_KEY]); $arrData['uiData']['queryInfo']['personalData'] = json_encode($arrPersonalData); $arrTrafficValue = json_decode($arrTrafficInfo['value'], true); $arrTrafficData = array(); $arrExisted = array(); if (is_array($arrTrafficValue) && !empty($arrTrafficValue)) { foreach ($arrTrafficValue as $intIndex => $arrItem) { $arrItem['city'] = strtolower($arrItem['city']); // 城市 $arrItem['hphm'] = mb_strtoupper($arrItem['hphm'], 'utf-8'); // 车牌号 $arrItem['engineno'] = strtoupper($arrItem['engineno']); // 发动机 $arrItem['classno'] = strtoupper($arrItem['classno']); // 车架号 $strTemp = md5($arrItem['city'] . $arrItem['hphm']); if (isset($arrExisted[$arrItem['hphm']])) { if (in_array($strTemp, $arrExisted[$arrItem['hphm']])) { continue; } else { $arrExisted[$arrItem['hphm']][] = $strTemp; $arrTrafficData[] = $arrItem; } } else { $arrExisted[$arrItem['hphm']][] = $strTemp; $arrTrafficData[] = $arrItem; } unset($strTemp); } } if (is_array($arrTrafficData) && !empty($arrTrafficData)) { $arrTrafficData = array_reverse($arrTrafficData); $arrData['uiData']['queryInfo']['trafficData'] = $arrTrafficData; } CSmarty::setQueryInfo($arrData['uiData']['queryInfo']); return true; }
/** * do rendering * @param array [in|out] data * @param array [in|out] result * @param Object [in] smarty */ function render(&$data, &$result, $smarty, $render_header_flag = false) { /** * init render result */ $result['status'] = $GLOBALS['STATUS_CODE']['OK']; $result['msg'] = $GLOBALS['STATUS_MSG'][$result['status']]; //$result['page'] = ''; if ($render_header_flag) { $GLOBALS['mulit_render_flag'] = 0; $page = $smarty->do_render($data['uiData'], $data['uiControl']['templateName'], $data['uiControl']['templateSwitch'], $data['uiControl']['templateVersion']); } else { if ($data['uiControl']['singleItem'] == 1) { /** * tplt name from gss data */ $templateName = $data['uiData']['asResult']['item'][0]['dispData']['strategy']['tempName']; /** * tplt name from uiCrontrol */ if (empty($templateName)) { $templateName = $data['uiControl']['templateName']; } $data['uiData']['asResult']['item'][0]['dispData']['resultData']['queryInfo'] = CSmarty::getQueryInfo(); $data['uiData']['asResult']['item'][0]['dispData']['resultData']['templateConfig'] = CSmarty::getTemplateConfig(); $conf = CSmarty::getConf(); backend_encrypt_url($data['uiData']['asResult']['item'][0]['dispData'], $conf['platform'], $conf['language'], $conf['type'], $templateName); $page = $smarty->do_render($data['uiData']['asResult']['item'][0]['dispData'], $templateName, $data['uiControl']['templateSwitch'], $data['uiControl']['templateVersion']); } else { //并行渲染需要的数据,预处理时顺便就分类了,避免并行渲染时需要再循环遍历一次 $arrAlaData = array(); $arrAsData = array(); // HHVM直连状态下,直接关闭并行渲染 if (!empty($_ENV['HHVM'])) { $GLOBALS['globalConf']['FEATURE_LIST']['MULTI_RENDER']['TURN'] = 'OFF'; } # $arrMultiRenderConf = Util::getConf('/multi_render', 'MULTI_RENDER'); # $bolPreRenderFeature = (Util::getConf('/feature', 'FEATURE_LIST/PREDATA/TURN') === 'ON') ? true : false; # $bolMultiRenderFeature = (Util::getConf('/feature', 'FEATURE_LIST/MULTI_RENDER/TURN') === 'ON') ? true : false; $arrMultiRenderConf = $GLOBALS['globalConf']['MULTI_RENDER']; $bolPreRenderFeature = $GLOBALS['globalConf']['FEATURE_LIST']['PREDATA']['TURN'] === 'ON' ? true : false; $bolMultiRenderFeature = $GLOBALS['globalConf']['FEATURE_LIST']['MULTI_RENDER']['TURN'] === 'ON' ? true : false; //限定baidu模板 //给FE加参数确定是否有预处理 if ($data['uiControl']['platform'] == 'pc' && $data['uiControl']['templateName'] == 'baidu' && $bolPreRenderFeature) { $time_start = Volatile::microtime(true) * 1000; pre_render($data, $arrAlaData, $arrAsData); $data['uiData']['queryInfo']['multiRenderFlag'] = true; $GLOBALS['logArr']['time_pre_render'] = round(Volatile::microtime(true) * 1000 - $time_start, 2); } if ($bolMultiRenderFeature && $bolPreRenderFeature && $data['uiControl']['templateName'] == 'baidu' && $data['uiControl']['platform'] == 'pc' && (!empty($arrAlaData) || !empty($arrAsData))) { CSmarty::setQueryInfo($data['uiData']['queryInfo']); CSmarty::setEncKeyStr($data['uiData']['queryInfo']['encryptionKey']); $time_start = Volatile::microtime(true) * 1000; try { $page = multi_render($data, $smarty, $arrAlaData, $arrAsData, $arrMultiRenderConf); } catch (Exception $e) { $page = ""; if (isset($GLOBALS['multi_render_shmid'])) { $shmid = $GLOBALS['multi_render_shmid']; shmop_delete($shmid); shmop_close($shmid); } CLog::warning("milti error:" . $e->getMessage()); } $GLOBALS['logArr']['time_multi_render_total'] = round(Volatile::microtime(true) * 1000 - $time_start, 2); } if (empty($page)) { $GLOBALS['mulit_render_flag'] = 0; $page = $smarty->do_render($data['uiData'], $data['uiControl']['templateName'], $data['uiControl']['templateSwitch'], $data['uiControl']['templateVersion']); } } } $GLOBALS['logArr']['result_tpl_tm'] = @implode(',', CSmarty::getResultTplRenderTime()); if ($page === false) { $result['page'] = ''; $errors = CSmarty::getError(); $errors_str = implode(";", $errors); $status = $GLOBALS['STATUS_CODE']['RENDER_FAIL']; $result['status'] = $status; $result['msg'] = $GLOBALS['STATUS_MSG'][$status] . ", errors[{$errors_str}]"; CLog::warning($GLOBALS['STATUS_MSG'][$status] . ", errors[{$errors_str}]", $status); return $status; } else { $result['page'] .= $page; } return $GLOBALS['STATUS_CODE']['OK']; }
public function run(&$arrData, $arrDefConf) { $time_start = Volatile::microtime(true) * 1000; if (empty($arrData) || !is_array($arrData)) { CLog::warning("get image sid failed, param null"); $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2); $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_PARAM_ERR; return false; } // 整体功能开关 $arrConf = Util::getConf('/image_base', 'IMAGE_BASE'); if ($arrConf['base64'] !== 'on') { CLog::debug("get image sid turn off"); $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2); $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_OFF; return false; } // 无用代码,小流量使用 if (!isset($arrConf['base64_tempname']) || empty($arrConf['base64_tempname'])) { $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2); $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_NOT_LEGAL; return false; } if (strcasecmp($arrData['uiControl']['templateName'], $arrConf['base64_tempname']) == 0) { $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2); $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_NOT_LEGAL; return false; } // 浏览器识别IE6、IE7 $bolFlag = $this->recognizeUserAgent($arrData); if ($bolFlag !== true) { CLog::debug("get image sid useragent not legal"); $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2); $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_BROWSER; return false; } // for small flow /* if (isset ( $arrConf ['base64_small_flow'] ) && $arrConf ['base64_small_flow'] === on) { $arrSample = Util::getConf ( '/sample_variable', 'sample_variable/IMAGE_BASE64' ); $bolSampleExp = false; $bolSampleMat = false; if (is_array ( $arrSample ) && ! empty ( $arrSample ) && ! empty ( $arrSample ['Contexted'] )) { if (is_array ( $arrData ['uiData'] ['queryInfo'] ['samplingId'] ) && ! empty ( $arrData ['uiData'] ['queryInfo'] ['samplingId'] )) { $arrSids = $arrData ['uiData'] ['queryInfo'] ['samplingId']; $arrSids = array_flip ( $arrSids ); foreach ( $arrSample ['Contexted'] as $arrTemp ) { if (isset ( $arrSids [$arrTemp ['sampling_id']] )) { if ($arrTemp ['value'] == $arrConf ['exp_value']) { $bolSampleExp = true; break; } else if ($arrTemp ['value'] == $arrConf ['mat_value']) { $bolSampleMat = true; break; } } } } } if ($bolSampleMat === true) { $GLOBALS ['logArr'] ['time_img_base64'] = round ( Volatile::microtime ( true ) * 1000 - $time_start, 2 ); $GLOBALS ['logArr'] ['img_base64_ret'] = self::BASE64_MAT; return false; } if ($bolSampleExp === false) { $GLOBALS ['logArr'] ['time_img_base64'] = round ( Volatile::microtime ( true ) * 1000 - $time_start, 2 ); $GLOBALS ['logArr'] ['img_base64_ret'] = self::BASE64_OTHER; return false; } } */ // 设置左侧小流量开关 $base64LeftOn = false; $leftOpenTpllist = $arrConf['base64_left_tempname']; $leftOpenTpllist = explode(',', $leftOpenTpllist); foreach ($leftOpenTpllist as $leftTplName) { if (strcasecmp($arrData['uiControl']['templateName'], $leftTplName) == 0) { $base64LeftOn = true; } } // 处理右侧结果队列 $arrResult = $arrConf['result']; $arrResult = explode(',', $arrResult); $arrControlInfo =& $arrData['uiControl']; $arrImgIds = array(); $arrImgIdsLeft = array(); $strPlatform = $arrControlInfo['platform']; $strLanguage = $arrControlInfo['language']; $strType = ''; $strTemplateName = ''; $arrImgConf = array(); foreach ($arrResult as $res) { if (is_array($arrData['uiData'][$res]['item']) && !empty($arrData['uiData'][$res]['item'])) { // 处理结果队列的每条结果 foreach ($arrData['uiData'][$res]['item'] as $intIndex => $arrItem) { $strType = empty($arrItem['dispData']['strategy']['type']) ? VUI_TEMPLATE_ALADDIN_TEMPLATE_TYPE : trim($arrItem['dispData']['strategy']['type']); if (empty($arrItem['dispData']['strategy'])) { CLog::debug("get tpl strategy fail"); continue; } $strTemplateName = trim($arrItem['dispData']['strategy']['tempName']); if (empty($strTemplateName)) { CLog::debug("get image sid template name null"); continue; } // 获取tpl.conf内容 $arrImgConf = $this->load_image_tpl_conf($strPlatform, $strLanguage, $strType, $strTemplateName); // 从src中提取sid if (is_array($arrImgConf) && !empty($arrImgConf)) { if (intval($arrImgConf['open_base64']) != 1) { continue; } if (is_array($arrImgConf['img']) && !empty($arrImgConf['img'])) { if ($base64LeftOn === true && strcasecmp($res, "asResult") == 0) { foreach ($arrImgConf['img'] as $arrImgData) { $this->parse_image_conf($arrItem['dispData']['resultData'], $arrImgIdsLeft, $arrImgData); } } else { if (strcasecmp($res, "rightResult") == 0) { /* 处理 右侧展开图片的base64加载问题,控制每单个模板base64加载张数:先读取模板变量$tplData.showrow,如果读不到则默认只加载4张 */ $imgCountLimit = 4; if (is_array($arrItem['dispData']['resultData'])) { $showNum = $arrItem['dispData']['resultData']['tplData']['shownums']; if (!empty($showNum) && is_numeric($showNum) && $showNum > 0 && $showNum < 13) { $imgCountLimit = $showNum; } } //记录当前数组里的图片张数 $tempCount = count($arrImgIds); foreach ($arrImgConf['img'] as $arrImgData) { $this->parse_image_conf($arrItem['dispData']['resultData'], $arrImgIds, $arrImgData); //判断新增张数是否超过切分阈值 if (count($arrImgIds) > $tempCount + $imgCountLimit) { //进行切分,去掉尾部图片 $arrImgIds = array_slice($arrImgIds, 0, $tempCount + $imgCountLimit); //更新当前图片数量值 $tempCount = count($arrImgIds); } } } } } } unset($arrImgConf); } } } // 标记base64是否开启 $base64on = false; if (is_array($arrImgIds) && !empty($arrImgIds)) { $arrData['uiData']['queryInfo']['base64_sids_for_plugin'] = $arrImgIds; //该数组供Smarty插件读取,用于拼装base64形式的图片dom //只要右侧有图片,即开启base64开关 $base64on = true; } //判断是否开启图片预取, 将已设置预取的图片从base64列表中去除. $preImageConf = Util::getConf('/image_predict', 'IMAGE_PREDICT'); if ($preImageConf['predict_get'] === 'on' && $arrData['uiData']['queryInfo']['pageNo'] == 1) { $preImgList = $arrData['uiData']['queryInfo']['viewConfig']['predictImg']; if (!empty($preImgList)) { if (!empty($preImgList['right']['sidList'])) { $img_diff = array_diff($arrImgIds, $preImgList['right']['sidList']); #当图片预取list与实际图片list小于,配置差值时关闭base64 $arrImgIds = $img_diff; } if (!empty($preImgList['left']['sidList'])) { $img_diff_left = array_diff($arrImgIdsLeft, $preImgList['left']['sidList']); #当图片预取list与实际图片list小于,配置差值时关闭base64 $arrImgIdsLeft = $img_diff_left; } } } // 设置base64模板变量 if (is_array($arrImgIds) && !empty($arrImgIds)) { //去重后的右侧图片 $arrData['uiData']['queryInfo']['base64_img_sids'] = $arrImgIds; } if (is_array($arrImgIdsLeft) && !empty($arrImgIdsLeft)) { //左侧图片 $arrData['uiData']['queryInfo']['base64_img_sids_left'] = $arrImgIdsLeft; $base64on = true; if ($base64LeftOn === true) { $arrData['uiData']['queryInfo']['base64_left_exp'] = 'on'; } } if ($base64on) { $arrData['uiData']['queryInfo']['base64'] = 'on'; $arrData['uiData']['queryInfo']['base64_domain'] = $arrConf['domain']; CSmarty::setQueryInfo($arrData['uiData']['queryInfo']); $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2); $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_OK; return true; } $GLOBALS['logArr']['time_img_base64'] = round(Volatile::microtime(true) * 1000 - $time_start, 2); $GLOBALS['logArr']['img_base64_ret'] = self::BASE64_NOT_OK; return false; }