function arc_static($aid = 0, $addno = 0, $needwri = 1) { //可能需要多个页面同时进行 global $db, $tblprefix, $arc, $sid, $timestamp, $cms_abs, $enablestatic, $archivecircle, $templatedir, $G, $_no_dbhalt, $btags, $mconfigs, $_mp, $_actid, $_midarr, $_a_vars, $_a_var, $mpnav, $mptitle, $mpstart, $mpend, $mppre, $mpnext, $mppage, $mpcount, $mpacount; if ($aid) { $arc->arcid($aid); } if (empty($arc->aid) || $addno > $arc->channel['addnum']) { return false; } @extract($mconfigs, EXTR_SKIP); switch_cache($arc->archive['sid']); $sid = $arc->archive['sid']; @extract($btags); $tplname = arc_tplname($addno, $arc->archive['arctpls'], $arc->channel['arctpls']); $staticarr = empty($arc->channel['statics']) ? array() : explode(',', $arc->channel['statics']); $nenablestatic = empty($staticarr[$addno]) ? $enablestatic : ($staticarr[$addno] == 1 ? 0 : 1); if (!$nenablestatic || !arc_allowstatic($arc->archive) || !$tplname) { arc_un_static(0, $addno, $needwri, 1); return false; } $arc->detail_data(); $surlpre = $arc->urlpre($addno, 1); $filepre = $arc->filepre($addno); $_da =& $arc->archive; arc_parse($_da); $_o_content = ob_get_contents(); ob_clean(); $_no_dbhalt = true; $pcount = 1; for ($_pp = 1; $_pp <= $pcount; $_pp++) { $_mp = $G = array(); $_mp['surlpre'] = $surlpre; $_mp['static'] = 1; $_mp['nowpage'] = $_pp; _aenter($_da, 1); extract($_da, EXTR_OVERWRITE); tpl_refresh($tplname); @(include M_ROOT . "template/{$templatedir}/pcache/{$tplname}.php"); $_content = ob_get_contents(); ob_clean(); $_content .= "<script language=\"javascript\" src=\"" . $cms_abs . "tools/static.php?mode=arc&aid={$aid}" . ($addno ? "&addno={$addno}" : '') . ($sid ? "&sid={$sid}" : '') . "\"></script>"; $arcfile = m_parseurl($filepre, array('page' => $_pp)); str2file($_content, M_ROOT . $arcfile); unset($_content); $pcount = @$_mp['pcount']; } echo $_o_content; unset($_o_content); $_no_dbhalt = false; if ($needwri) { $arc->update_needstatic($addno, 1); } return true; }
function follow_dynamic($aid = 0, $mode = 'down', $temparr = array()) { global $db, $tblprefix, $arc, $sptpls, $memberid, $sid, $timestamp, $cms_abs, $cache1circle, $currencys, $curuser, $templatedir, $btags, $mconfigs, $_mp, $_actid, $_midarr, $_a_vars, $_a_var, $mpnav, $mptitle; @extract($mconfigs, EXTR_SKIP); $arc->arcid($aid); if (empty($arc->aid)) { message(lang('confchoosarchi')); } !$arc->archive['checked'] && message(lang('poinarchnoch')); switch_cache($arc->archive['sid']); $sid = $arc->archive['sid']; if_siteclosed($sid); if (!arc_allow($arc->archive, 'down')) { message(lang('noarchivbrowpermis')); } if ($crids = $arc->arc_crids(1)) { //需要对当前用户扣值 $cridstr = ''; foreach ($crids['total'] as $k => $v) { $cridstr .= ($cridstr ? ',' : '') . abs($v) . $currencys[$k]['unit'] . $currencys[$k]['cname']; } $commu = read_cache('commu', 8); if (empty($commu['setting']['autoatm'])) { //不自动扣值的情况:提示出订阅链接,选择是否订阅 message(lang('subattachwanpaycur') . $cridstr . "<br><br><a href=\"{$cms_abs}tools/subscribe.php?aid={$aid}&isatm=1\">>>" . lang('subscribe') . "</a>"); } else { //自动扣值,当前会员扣值及向出售者支付积分 if (!$curuser->crids_enough($crids['total'])) { message(lang('subattachwanpaycur') . $cridstr . lang('younosuatwaencur')); } $curuser->updatecrids($crids['total'], 0, lang('subsattach')); $curuser->payrecord($arc->aid, 1, $cridstr, 1); if (!empty($crids['sale'])) { $actuser = new cls_userinfo(); $actuser->activeuser($arc->archive['mid']); foreach ($crids['sale'] as $k => $v) { $crids['sale'][$k] = -$v; } $actuser->updatecrids($crids['sale'], 1, lang('saleattach')); unset($actuser); } } } $arc->detail_data(); $_da =& $arc->archive; arc_parse($_da); if (empty($temparr['tmode'])) { if ($temp = @unserialize($_da[$temparr['tname']])) { $temp = @$temp[$temparr['fid']]; } } else { $temp = @explode('#', $arc->archive[$temparr['tname']]); } $_da['url'] = view_atmurl(@$temp['remote']); $_da['player'] = @$temp['player']; unset($temp); empty($_da['url']) && message(lang('noattach')); save_nums($aid, $mode); //统计下载或播放数 if (!($tplname = $sptpls[$mode])) { follow_notpl($mode, $_da['url'], $_da['player']); } if ($mode == 'down') { $auth = authcode($memberid . "\t" . $aid . "\t" . $temparr['tname'] . "\t" . $temparr['tmode'] . "\t" . $temparr['fid'], 'ENCODE'); $_da['trueurl'] = $cms_abs . "tools/down.php?auth={$auth}&aid=" . $arc->aid . "&tname={$temparr['tname']}&tmode={$temparr['tmode']}&fid={$temparr['fid']}"; //真实下载地址 } elseif ($cache1circle) { $auth = authcode($temparr['tname'] . "\t" . $temparr['tmode'] . "\t" . $temparr['fid'], 'ENCODE'); $cachefile = htmlcac_dir('fw', date('Ym', $arc->archive['createdate']), 1) . cac_namepre($arc->aid, $arc->archive['createdate']) . '_' . $auth . '.php'; if (is_file($cachefile) && filemtime($cachefile) > $timestamp - $cache1circle * 60) { mexit(read_htmlcac($cachefile)); } } _aenter($_da, 1, array('url', 'player')); @extract($btags); extract($_da, EXTR_OVERWRITE); tpl_refresh($tplname); @(include M_ROOT . "template/{$templatedir}/pcache/{$tplname}.php"); $_content = ob_get_contents(); ob_clean(); if ($cache1circle && $mode != 'down') { save_htmlcac($_content, $cachefile); } mexit($_content); }
} } //读取缓存页面 if (!$enablestatic && $cache1circle) { $cachefile = htmlcac_dir($ispre ? 'pre' : 'arc', date('Ym', $arc->archive['createdate']), 1) . cac_namepre($arc->aid) . '_' . $page . '.php'; if (is_file($cachefile) && filemtime($cachefile) > $timestamp - $cache1circle * 60) { mexit(read_htmlcac($cachefile)); } } //分析模板来源 $tplname = $ispre ? $pretpl : arc_tplname($addno, $arc->archive['arctpls'], $arc->channel['arctpls']); !$tplname && message('definereltem'); $arc->detail_data(); $durlpre = $arc->urlpre($addno); $_da =& $arc->archive; arc_parse($_da); $_mp = array(); $_mp['durlpre'] = $durlpre; $_mp['static'] = 0; $_mp['nowpage'] = max(1, intval($page)); $_mp['s_num'] = 0; //静态页数不限 _aenter($_da, 1); @extract($btags); extract($_da, EXTR_OVERWRITE); tpl_refresh($tplname); include M_ROOT . "template/{$templatedir}/pcache/{$tplname}.php"; $_content = ob_get_contents(); ob_clean(); if ($enablestatic) { $_content .= "<script language=\"javascript\" src=\"" . $cms_abs . "tools/static.php?mode=arc&aid={$aid}" . ($sid ? "&sid={$sid}" : '') . ($addno ? "&addno={$addno}" : '') . "\"></script>";
message('chooseproduct'); } $arc = new cls_archive(); if (!$arc->arcid($_offer['aid'])) { message('choosearchive'); } if (!$arc->archive['checked'] && !$curuser->isadmin()) { message('poinarcnoche'); } $tplname = ms_arctpl($arc->archive['chid'], 'product'); if (!$tplname) { message('definereltem'); } $arc->detail_data(); $_arc =& $arc->archive; arc_parse($_arc); $_mp = array(); $_mp['durlpre'] = $mspaceurl . en_virtual('product.php?mid=' . $mid . '&cid=' . $cid . '&page={$page}', 1); $_mp['static'] = 0; $_mp['nowpage'] = max(1, intval($page)); _aenter($_arc, 1); _aenter($_da); _aenter($_offer); @extract($btags); extract($_arc, EXTR_OVERWRITE); extract($_da, EXTR_OVERWRITE); extract($_offer, EXTR_OVERWRITE); $sid = 0; tpl_refresh($tplname); @(include M_ROOT . "template/{$templatedir}/pcache/{$tplname}.php"); $_content = ob_get_contents();
function deal_incell() { global $cotypes, $sid, $orelays, $acatalogs, $m_thumb; if (in_array($this->tclass, array('archives', 'alarchives', 'relates', 'searchs'))) { arc_parse($this->item, $this->temparr['m_thumbid']); } elseif (in_array($this->tclass, array('marchives', 'masearchs'))) { marc_parse($this->item, $this->temparr['m_thumbid']); } elseif ($this->tclass == 'catalogs') { //这是一个特例(含节点),在标识中会加入新元素,需要先处理midarr, //读取继承参数 parse_str(cnstr($this->temparr), $midarr); if (isset($midarr['caid']) && @$this->tag['cainherit'] != 'active') { unset($midarr['caid']); } foreach ($cotypes as $k => $v) { if (isset($midarr['ccid' . $k]) && @$this->tag['coinherit' . $k] != 'active') { unset($midarr['ccid' . $k]); } } $listby = $this->tag['listby'] == 'ca' ? 0 : intval(str_replace('co', '', $this->tag['listby'])); if (!$listby) { //先处理非列表项目,因为列表项id要放在最后 foreach ($cotypes as $k => $v) { //读取手动指定的参数 if ($v['sortable'] && !empty($this->tag['coinherit' . $k]) && is_numeric($this->tag['coinherit' . $k])) { $midarr['ccid' . $k] = $this->tag['coinherit' . $k]; } } unset($midarr['caid']); $midarr['caid'] = $this->item['caid']; } else { $coid = $listby; if (!empty($this->tag['cainherit']) && is_numeric($this->tag['cainherit'])) { $midarr['caid'] = $this->tag['cainherit']; } foreach ($cotypes as $k => $v) { $k != $coid && $v['sortable'] && !empty($this->tag['coinherit' . $k]) && is_numeric($this->tag['coinherit' . $k]) && ($midarr['ccid' . $k] = $this->tag['coinherit' . $k]); } unset($midarr['ccid' . $coid]); $midarr['ccid' . $coid] = $this->item['ccid']; } if (!empty($this->tag['urlmode']) && !empty($midarr[$this->tag['urlmode']])) { $midarr = array_merge(array($this->tag['urlmode'] => $midarr[$this->tag['urlmode']]), $midarr); } $nsid = empty($this->tag['nsid']) ? 0 : intval($this->tag['nsid']); if (!$nsid) { $nsid = isset($temparr['nsid']) ? $temparr['nsid'] : $sid; //当前子站需要分析是否有传下来的id,否则认为是全局id } elseif ($nsid == -1) { $nsid = 0; } elseif ($nsid == -2) { $nsid = $sid; } $cnstr = cnstr($midarr); $this->item = cn_parsearr($cnstr, $nsid, $listby, $this->temparr['m_thumbid']); $cnode = cnodearr($cnstr, $this->item['sid']); re_cnode($this->item, $cnstr, $cnode); unset($cnode, $midarr); } elseif ($this->tclass == 'farchives') { $m_thumb->config[$this->temparr['m_thumbid']] = array('id' => $this->item['aid'], 'mode' => 'fa', 'smode' => $this->item['chid']); } elseif ($this->tclass == 'commus') { $m_thumb->config[$this->temparr['m_thumbid']] = array('id' => $this->item['cid'], 'mode' => 'cu', 'smode' => @$this->tag['cuid']); } elseif ($this->tclass == 'mcommus') { $m_thumb->config[$this->temparr['m_thumbid']] = array('id' => $this->item['cid'], 'mode' => 'mcu', 'smode' => @$this->tag['cuid']); } elseif ($this->tclass == 'mcatalogs') { if ($this->tag['listby'] == 'ca') { $this->item['indexurl'] = mcn_url($this->item['mcaid']); $this->item['listurl'] = mcn_url($this->item['mcaid'], 0, 1); } elseif ($this->tag['listby'] == 'uc') { $this->item['indexurl'] = mcn_url($this->item['mcaid'], $this->item['ucid']); $this->item['listurl'] = mcn_url($this->item['mcaid'], $this->item['ucid'], 1); } } elseif ($this->tclass == 'images') { if ($this->tmode == 'p') { $m_thumb->config[$this->temparr['m_thumbid']] = $m_thumb->config['main']; } if (@$this->tag['thumb'] && @$this->tag['maxwidth'] && @$this->tag['maxheight'] && islocal($this->item['url'], 1)) { //生成缩略图或启用缩略图 $true_local = islocal($this->item['url'], 2); if ($true_local && is_file(local_atm($this->item['url']) . 's/' . $this->tag['maxwidth'] . '_' . $this->tag['maxheight'] . '.jpg') || !$true_local && in_str($this->tag['maxwidth'] . '_' . $this->tag['maxheight'], @$this->item['thumbs'])) { //已生成缩略图 $this->item['url_s'] = $this->item['url'] . 's/' . $this->tag['maxwidth'] . '_' . $this->tag['maxheight'] . '.jpg'; } else { $this->item['url_s'] = @$m_thumb->thumb($this->item['url'], $this->temparr['m_thumbid'], $this->tag['tname'], $this->item['fid'], @$this->tag['maxwidth'], @$this->tag['maxheight']); } } else { $this->item['url_s'] = $this->item['url']; } if ($this->item['url_s'] != $this->item['url']) { //真正启用了缩略图,直接使用设定的宽高 $this->item['width'] = @$this->tag['maxwidth']; $this->item['height'] = @$this->tag['maxheight']; } else { //使用原图来重计宽高 $wh = imagewh($this->item['url'], @$this->item['width'], @$this->item['height'], @$this->tag['maxwidth'], @$this->tag['maxheight']); $this->item['width'] = $wh['width']; $this->item['height'] = $wh['height']; } } elseif ($this->tclass == 'members') { global $grouptypes; foreach ($grouptypes as $k => $v) { $this->item['grouptype' . $k . 'name'] = ''; if (!empty($this->item['grouptype' . $k])) { $usergroups = read_cache('usergroups', $k); $this->item['grouptype' . $k . 'name'] = $usergroups[$this->item['grouptype' . $k]]['cname']; } } $m_thumb->config = array('id' => $this->item['mid'], 'mode' => 'm', 'smode' => $this->item['mchid']); unset($usergroups, $v); } //从上级标识接受参数作为当前原始标识 if (!empty($this->tag['rrelays'])) { $midarr = array(); $relays = relays2arr($this->tag['rrelays']); foreach ($relays as $k => $v) { if (isset($this->temparr[$v])) { $midarr[$k] = $this->temparr[$v]; } } $this->item += $midarr; unset($midarr); } $this->item += $this->temparr; //从当前原始标识向下级标识传送参数 $this->midarr = $this->temparr; $relays = $orelays; !empty($this->tag['relays']) && ($relays = relays2arr($this->tag['relays']) + $relays); foreach ($relays as $k => $v) { if (isset($this->item[$v])) { $this->midarr[$k] = $this->item[$v]; } } unset($relays); }