二次开发第二天
其实也谈不上二次开发了,纯属在原有基础上小改,大改谈不上了,区域选择的问题网上现成的很少,但是也有,参考了http://www.hackerfans.com/hacker-skills/php-mysql/phpcms-v9-linkage-shaixuan.html
阅读之后直接pass掉,这个文章反复看,网上反复查,发现没有现成的,都不是我想要的,蛋疼了,仔细拜读了下这篇文章并且测试了一下,哎哟,大爷的,居然跟我的想法有那么点类似,于是乎再仔细读,然后提取代码,然后修改,发现还是不错的,,例如上我的测试模板
{template "content","header"} <!--main--> <div class="main"> <div class="col-left"> <div class="crumbs"><a href="{siteurl($siteid)}">首页</a><span> > </span>{catpos($catid)} 列表</div> <!--初始化init--> {php $theurl = "index.php?m=content&c=index&a=lists&catid=$catid";} {php $brandid = (isset($_GET['brandid']) && is_numeric($_GET['brandid']) ? $_GET['brandid'] : '');} {php $priceid = (isset($_GET['priceid']) && is_numeric($_GET['priceid']) ? $_GET['priceid'] : '');} {php $areaid = (isset($_GET['areaid']) && is_numeric($_GET['areaid']) ? $_GET['areaid'] : '');} {php $degree = (isset($_GET['degree']) ? $_GET['degree'] : '');} <!-- 读取缓存--> {php $modelid_cache = getcache('model_field_'.$modelid,'model');} <!-- 模型缓存 --> {php $brand_linkage = getcache(3360,'linkage'); $brand_data = $brand_linkage[data];} <!-- 品牌缓存 --> {php $area_linkage = getcache(3379,'linkage'); $area_data = $area_linkage[data];} <!-- 区域缓存 --> <!-- sql_条件--> <?php if($area_data[$_GET[areaid]][parentid] == 0) { $paid = 0; } else { $paid = $area_data[$_GET[areaid]]['parentid']; } $areaid_arr = array(); $boroughs = $streets = ''; foreach($area_data as $k=>$r){ if($r[parentid] == 0){ $boroughs[$k] = $r['name']; }elseif(($_GET[areaid] == $r['parentid'] || $paid == $r['parentid'])){ $streets[$k] = $r['name']; $areaid_arr[] = $k; } } /**-- 排序的数组 --**/ $order_arr = array( 'finer' => array('finer'=>'DESC'), 'avgsort' => array('avgsort'=>'DESC'), 'reviews' => array('reviews'=>'DESC'), 'enjoy' => array('enjoy'=>'DESC'), 'price' => array('avgprice'=>'DESC'), 'price_s' => array('avgprice'=>'ASC'), 'picture' => array('pictures'=>'DESC'), 'picture_s' => array('pictures'=>'ASC'), 'addtime' => array('addtime'=>'DESC'), 'pageviews' => array('pageviews'=>'DESC'), ); /**-- 查询的数组 --**/ $where = array(); if($catid) $where['catid'] = (int) $catid; if($brandid) $where['brandid'] = (int) $brandid; if($priceid) $where['priceid'] = (int) $priceid; //区域--继承 IN if($paid){ if($areaid) $where['areaid'] = (int) $areaid; $areasql = ''; }else{ if($areaid) $areasql = ' AND `areaid` IN('.join(',',$areaid_arr).')'; } //学历--多选 LIKE if($degree){ $degreesql = " AND degree LIKE "."'%".$degree."%'"; }else{ $degreesql = ''; } function getwheresql($wheresqlarr) { $result = $comma = ''; if(empty($wheresqlarr)) { $result = '1'; } elseif(is_array($wheresqlarr)) { foreach ($wheresqlarr as $key => $value) { $result .= $comma.$key.'=\''.$value.'\''; $comma = ' AND '; } } else { $result = $wheresqlarr; } return $result; } $wheresql = getwheresql($where); $wheresql .= $areasql; $wheresql .= $degreesql; ?> <div style="line-height:22px;"> <b>where :</b> {$wheresql} </div> {php $data = explode("\r\n", $modelid_cache['priceid']['options']);} {php $price_arr = Array();} <div class="col-cate"> <b>价格 :</b> {if $priceid} <a href="{url_par("brandid=$brandid&areaid=$areaid°ree=$degree",$theurl)}" style="color:#6633FF;">全部</a> {else} <font style="color:#fff; background-color:#6633FF">全部</font> {/if} {loop $data $r} {php $r = explode("|",trim($r))} {php $price_arr[$r[1]] = $r[0];} {if $priceid == $r[1]} <font style="color:#fff; background-color:#6633FF">{$r[0]}</font> {else} <a href='{url_par("brandid=$brandid&priceid=$r[1]&areaid=$areaid°ree=$degree",$theurl)}'>{$r[0]}</a> {/if} {/loop} </div> {php $data = explode("\r\n", $modelid_cache['degree']['options']);} <div class="col-cate"> <b>学历 :</b> {if $degree} <a href="{url_par("brandid=$brandid&priceid=$priceid&areaid=$areaid°ree=",$theurl)}" style="color:#6633FF;">全部</a> {else} <font style="color:#fff; background-color:#6633FF">全部</font> {/if} {loop $data $r} {php $r = explode("|",trim($r))} {if $degree == $r[1]} <font style="color:#fff; background-color:#6633FF">{$r[0]}</font> {else} <a href='{url_par("brandid=$brandid&priceid=$priceid°ree=$r[1]&areaid=$areaid",$theurl)}'>{$r[0]}</a> {/if} {/loop} </div> <div class="col-cate"> <b>品牌 :</b> {if $brandid} <a href="{url_par("priceid=$priceid&areaid=$areaid°ree=$degree",$theurl)}" style="color:#6633FF;">全部</a> {else} <font style="color:#fff; background-color:#6633FF">全部</font> {/if} {loop $brand_data $r} {if $brandid == $r[linkageid]} <font style="color:#fff; background-color:#6633FF">{$r[name]}</font> {else} <a href="{url_par("brandid=$r[linkageid]&priceid=$priceid&areaid=$areaid°ree=$degree",$theurl)}">{$r[name]}</a> {/if} {/loop} </div> <div class="col-cate"> <b>商圈 :</b> {if $_GET[areaid]} <a href="{url_par("brandid=$brandid&priceid=$priceid°ree=$degree",$theurl)}" style="color:#6633FF;">全部</a> {else} <font style="color:#fff; background-color:#6633FF">全部</font> {/if} {loop $boroughs $key $val} {if $_GET[areaid] == $key || $paid == $key} <font style="color:#fff; background-color:#6633FF"> {$val}</font> {else} <a href="{url_par("brandid=$brandid&priceid=$priceid&areaid=$key°ree=$degree",$theurl)}">{$val}</a> {/if} {/loop} </div> {if $_GET[areaid]} <div class="col_cate_2" style="padding:8px; border:1px solid #57a3c9; background-color:#eff5f8; margin-top:4px;"> {loop $streets $key $val} {if $_GET[areaid] == $key} <font style="color:#fff; background-color:#6633FF"> {$val}</font> {else} <a href="{url_par("brandid=$brandid&priceid=$priceid&areaid=$key°ree=$degree",$theurl)}">{$val}</a> {/if} {/loop} </div> {/if} {pc:get sql="SELECT * FROM v9_news WHERE $wheresql" cache="3600" num="10" page="$page" return="data"} <h3 style="font-size:12px; color:#FF0000; line-height:22px; text-align:right;">共找到 {php echo count($data);} 个结果</h3> <ul class="list lh24 f14" style="margin-top:12px;"> {loop $data $r} {php $db = pc_base::load_model('hits_model'); $_r = $db->get_one(array('hitsid'=>'c-'.$modelid.'-'.$r[id])); $views = $_r[views]; } {php $comment_tag = pc_base::load_app_class("comment_tag", "comment"); $comment_total = $comment_tag->count(array('commentid'=>'content_'.$catid.'-'.$r[id].'-'.$modelid));} <li style="background-color:#F9F9F9; border-bottom:1px solid #999999; margin-top:4px;"><span class="rt">{date('Y-m-d H:i:s',$r[inputtime])}</span>·<a href="{$r[url]}" target="_blank"{title_style($r[style])}>{$r[title]}</a> <p><span style="font-size:11px; font-family:PMingLiU; color:#666666;">学历要求:{$r[degree]}</span></p> <p><span style="font-size:11px; font-family:PMingLiU; color:#666666;">价格区间:<font style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;">[{$price_arr[$r[priceid]]}]</font> 品牌:<span {if $r[brandid] == $brandid} style="color:#F00;"{/if}>[{$brand_data[$r[brandid]][name]}] </span> 区域:[{$area_data[$r[areaid]][name]}] 点击:{$views} 评论:{if $comment_total}{$comment_total}{else}0{/if}</span></p> </li> {if $n%5==0}<li class="bk20 hr"></li>{/if} {/loop} </ul> <div id="pages" class="text-c">{$pages}</div> {/pc} </div> <div class="col-auto"> <div class="box"> <h5 class="title-2">频道总排行</h5> {pc:content action="hits" catid="$catid" num="10" order="views DESC" cache="3600"} <ul class="content digg"> {loop $data $r} <li><a href="{$r[url]}" target="_blank">{$r[title]}</a></li> {/loop} </ul> {/pc} </div> <div class="bk10"></div> <div class="box"> <h5 class="title-2">频道本月排行</h5> {pc:content action="hits" catid="$catid" num="8" order="monthviews DESC" cache="3600"} <ul class="content rank"> {loop $data $r} <li><span>{number_format($r[monthviews])}</span><a href="{$r[url]}"{title_style($r[style])} class="title" title="{$r[title]}">{str_cut($r[title],56,'...')}</a></li> {/loop} </ul> {/pc} </div> <div class="bk10"></div> <div class="box"> <h5 class="title-2">最新评论</h5> {pc:content action="hits" catid="$catid" num="8" order="monthviews DESC" cache="3600"} <ul class="content rank"> {loop $data $r} <li><span>{number_format($r[monthviews])}</span><a href="{$r[url]}"{title_style($r[style])} class="title" title="{$r[title]}">{str_cut($r[title],56,'...')}</a></li> {/loop} </ul> {/pc} </div> </div> </div> {template "content","footer"}
因为phpcms这些都是GET方式的,所以测试的方法能够用到GET获取我们想要的参数,下面就好办了,因为我只要地区,所以我精简了一下
<!--获取地区--> <!-- sql_条件--> {php $theurl = "index.php?m=content&c=index&a=lists&catid=$catid";} {php $areaid = (isset($_GET['areaid']) && is_numeric($_GET['areaid']) ? $_GET['areaid'] : '');} {php $area_linkage = getcache(1,'linkage'); $area_data = $area_linkage[data];} <!-- 区域缓存 --> <?php if($area_data[$_GET[areaid]][parentid] == 0) { $paid = 0; } else { $paid = $area_data[$_GET[areaid]]['parentid']; } $areaid_arr = array(); $boroughs = $streets = ''; foreach($area_data as $k=>$r){ if($r[parentid] == 0){ $boroughs[$k] = $r['name']; }elseif(($_GET[areaid] == $r['parentid'] || $paid == $r['parentid'])){ $streets[$k] = $r['name']; $areaid_arr[] = $k; } } /**-- 排序的数组 --**/ $order_arr = array( 'reviews' => array('reviews'=>'DESC'), 'addtime' => array('addtime'=>'DESC'), 'pageviews' => array('pageviews'=>'DESC'), ); /**-- 查询的数组 --**/ $where = array(); /**--if($catid) $where['catid'] = (int) $catid; --**/ //区域--继承 IN if($paid){ if($areaid) $where['areaid'] = (int) $areaid; $areasql = ''; }else{ if($areaid) $areasql = ' AND `areaid` IN('.$areaid.','.join(',',$areaid_arr).')'; } function getwheresql($wheresqlarr) { $result = $comma = ''; if(empty($wheresqlarr)) { $result = ' '; } elseif(is_array($wheresqlarr)) { foreach ($wheresqlarr as $key => $value) { $result .= $comma.$key.'=\''.$value.'\''; $comma = ' AND '; } } else { $result = $wheresqlarr; } return $result; } $wheresql = getwheresql($where); $wheresql .= $areasql; ?> <div style="line-height:22px;"> <b>where :</b> {$wheresql} </div> <div class="col-cate"> <b>商圈 :</b> {if $_GET[areaid]} <a href="{$url}" style="color:#6633FF;">全部</a> {else} <font style="color:#fff; background-color:#6633FF">全部</font> {/if} {loop $boroughs $key $val} {if $_GET[areaid] == $key || $paid == $key} <font style="color:#fff; background-color:#6633FF"> {$val}</font> {else} <a href="{url_par("areaid=$key",$theurl)}">{$val}</a> {/if} {/loop} </div> {if $_GET[areaid]} <div class="col_cate_2" style="padding:8px; border:1px solid #57a3c9; background-color:#eff5f8; margin-top:4px;"> {loop $streets $key $val} {if $_GET[areaid] == $key} <font style="color:#fff; background-color:#6633FF"> {$val}</font> {else} <a href="{url_par("areaid=$key",$theurl)}">{$val}</a> {/if} {/loop} </div> {/if} <!--获取结束-->
那么这些就是我们想要的东西了,至于显示就好办了
比如频道页的更多我们就可以 <h5 class="title-1">{$v[catname]}<a href="{url_par("areaid=$areaid",$v[url])}" class="more">更多>></a></h5>把地区参数传过去了,那么接收呢,我想了下,PHPCMS不是有个where条件吗,自己写上where不就对应了吗,反复测试,发现不对,\phpcms\modules\content\classes里面的content_tag.class.php里面的lists函数仔细看了一遍发现不对,phpcms里面where一般是用于万能标签自己写的SQL语句,那要是这么搞不是都要写sql语句了,这蛋疼了,不可行,为了升级方便,自己来吧MY_content_tag.class.php
<?php class MY_content_tag extends content_tag{ private $db; function __construct() { $this->db = pc_base::load_model('content_model'); $this->position = pc_base::load_model('position_data_model'); parent::__construct(); } /** * 初始化模型 * @param $catid */ public function set_modelid($catid) { static $CATS; $siteids = getcache('category_content','commons'); if(!$siteids[$catid]) return false; $siteid = $siteids[$catid]; if ($CATS[$siteid]) { $this->category = $CATS[$siteid]; } else { $CATS[$siteid] = $this->category = getcache('category_content_'.$siteid,'commons'); } if($this->category[$catid]['type']!=0) return false; $this->modelid = $this->category[$catid]['modelid']; $this->db->set_model($this->modelid); $this->tablename = $this->db->table_name; if(empty($this->category)) { return false; } else { return true; } } /** * 分页统计 * @param $data */ public function count($data) { if($data['action'] == 'lists') { $catid = intval($data['catid']); if(!$this->set_modelid($catid)) return false; if(isset($data['where'])) { $sql = $data['where']; } else { if($this->category[$catid]['child']) { $catids_str = $this->category[$catid]['arrchildid']; $pos = strpos($catids_str,',')+1; $catids_str = substr($catids_str, $pos); $sql = "status=99 AND catid IN ($catids_str)"; } else { $sql = "status=99 AND catid='$catid'"; } } if(isset($data['areasql'])) { $sql .= $data['areasql']; } return $this->db->count($sql); } } /** * 列表页标签 修改支持一个字段 * @param $data */ public function lists($data) { $catid = intval($data['catid']); if(!$this->set_modelid($catid)) return false; if(isset($data['where'])) { $sql = $data['where']; } else { $thumb = intval($data['thumb']) ? " AND thumb != ''" : ''; if($this->category[$catid]['child']) { $catids_str = $this->category[$catid]['arrchildid']; $pos = strpos($catids_str,',')+1; $catids_str = substr($catids_str, $pos); $sql = "status=99 AND catid IN ($catids_str)".$thumb; } else { $sql = "status=99 AND catid='$catid'".$thumb; } } if(isset($data['areasql'])) { $sql .= $data['areasql']; } $order = $data['order']; $return = $this->db->select($sql, '*', $data['limit'], $order, '', 'id'); //调用副表的数据 if (isset($data['moreinfo']) && intval($data['moreinfo']) == 1) { $ids = array(); foreach ($return as $v) { if (isset($v['id']) && !empty($v['id'])) { $ids[] = $v['id']; } else { continue; } } if (!empty($ids)) { $this->db->table_name = $this->db->table_name.'_data'; $ids = implode('\',\'', $ids); $r = $this->db->select("`id` IN ('$ids')", '*', '', '', '', 'id'); if (!empty($r)) { foreach ($r as $k=>$v) { if (isset($return[$k])) $return[$k] = array_merge($v, $return[$k]); } } } } return $return; } /** * 相关文章标签 * @param $data */ public function relation($data) { $catid = intval($data['catid']); $modelid = intval($data['modelid']); if(!$this->set_modelid($catid) && $modelid) { $this->db->set_model($modelid); $this->tablename = $this->db->table_name; } elseif(!$this->set_modelid($catid)) { return false; } $order = $data['order']; $sql = "`status`=99"; $limit = $data['id'] ? $data['limit']+1 : $data['limit']; if($data['relation']) { $relations = explode('|',trim($data['relation'],'|')); $relations = array_diff($relations, array(null)); $relations = implode(',',$relations); $sql = " `id` IN ($relations)"; if(isset($data['areasql'])) { $sql .= $data['areasql']; } $key_array = $this->db->select($sql, '*', $limit, $order,'','id'); } elseif($data['keywords']) { $keywords = str_replace(array('%',"'"), '',$data['keywords']); $keywords_arr = explode(' ',$keywords); $key_array = array(); $number = 0; $i =1; $sql .= " AND catid='$catid'"; if(isset($data['areasql'])) { $sql .= $data['areasql']; } foreach ($keywords_arr as $_k) { $sql2 = $sql." AND `keywords` LIKE '%$_k%'".(isset($data['id']) && intval($data['id']) ? " AND `id` != '".abs(intval($data['id']))."'" : ''); $r = $this->db->select($sql2, '*', $limit, '','','id'); $number += count($r); foreach ($r as $id=>$v) { if($i<= $data['limit'] && !in_array($id, $key_array)) $key_array[$id] = $v; $i++; } if($data['limit']<$number) break; } } if($data['id']) unset($key_array[$data['id']]); return $key_array; } /** * 排行榜标签 * @param $data */ public function hits($data) { $catid = intval($data['catid']); if(!$this->set_modelid($catid)) return false; $this->hits_db = pc_base::load_model('hits_model'); $sql = $desc = $ids = ''; $array = $ids_array = array(); $order = $data['order']; $hitsid = 'c-'.$this->modelid.'-%'; $sql = "hitsid LIKE '$hitsid'"; if(isset($data['day'])) { $updatetime = SYS_TIME-intval($data['day'])*86400; $sql .= " AND updatetime>'$updatetime'"; } if($this->category[$catid]['child']) { $catids_str = $this->category[$catid]['arrchildid']; $pos = strpos($catids_str,',')+1; $catids_str = substr($catids_str, $pos); $sql .= " AND catid IN ($catids_str)"; } else { $sql .= " AND catid='$catid'"; } if(isset($data['areasql'])) { $sql .= $data['areasql']; } $hits = array(); $result = $this->hits_db->select($sql, '*', $data['limit'], $order); foreach ($result as $r) { $pos = strpos($r['hitsid'],'-',2) + 1; $ids_array[] = $id = substr($r['hitsid'],$pos); $hits[$id] = $r; } $ids = implode(',', $ids_array); if($ids) { $sql = "status=99 AND id IN ($ids)"; } else { $sql = ''; } if(isset($data['areasql'])) { $sql .= $data['areasql']; } $this->db->table_name = $this->tablename; $result = $this->db->select($sql, '*', $data['limit'],'','','id'); foreach ($ids_array as $id) { if($result[$id]['title']!='') { $array[$id] = $result[$id]; $array[$id] = array_merge($array[$id], $hits[$id]); } } return $array; } /** * 栏目标签 * @param $data */ public function category($data) { $data['catid'] = intval($data['catid']); $array = array(); $siteid = $data['siteid'] && intval($data['siteid']) ? intval($data['siteid']) : get_siteid(); $categorys = getcache('category_content_'.$siteid,'commons'); $site = siteinfo($siteid); $i = 1; foreach ($categorys as $catid=>$cat) { if($i>$data['limit']) break; if((!$cat['ismenu']) || $siteid && $cat['siteid']!=$siteid) continue; if (strpos($cat['url'], '://') === false) { $cat['url'] = substr($site['domain'],0,-1).$cat['url']; } if($cat['parentid']==$data['catid']) { $array[$catid] = $cat; $i++; } } return $array; } /** * 推荐位 * @param $data */ public function position($data) { $sql = ''; $array = array(); $posid = intval($data['posid']); $order = $data['order']; $thumb = (empty($data['thumb']) || intval($data['thumb']) == 0) ? 0 : 1; $siteid = $GLOBALS['siteid'] ? intval($GLOBALS['siteid']) : 1; $catid = (empty($data['catid']) || $data['catid'] == 0) ? '' : intval($data['catid']); if($catid) { $siteids = getcache('category_content','commons'); if(!$siteids[$catid]) return false; $siteid = $siteids[$catid]; $this->category = getcache('category_content_'.$siteid,'commons'); } if($catid && $this->category[$catid]['child']) { $catids_str = $this->category[$catid]['arrchildid']; $pos = strpos($catids_str,',')+1; $catids_str = substr($catids_str, $pos); $sql = "`catid` IN ($catids_str) AND "; } elseif($catid && !$this->category[$catid]['child']) { $sql = "`catid` = '$catid' AND "; } if($thumb) $sql .= "`thumb` = '1' AND "; if(isset($data['where'])) $sql .= $data['where'].' AND '; if(isset($data['expiration']) && $data['expiration']==1) $sql .= '(`expiration` >= \''.SYS_TIME.'\' OR `expiration` = \'0\' ) AND '; $sql .= "`posid` = '$posid' AND `siteid` = '".$siteid."'"; $pos_arr = $this->position->select($sql, '*', $data['limit'],$order); if(!empty($pos_arr)) { foreach ($pos_arr as $info) { $key = $info['catid'].'-'.$info['id']; $array[$key] = string2array($info['data']); $array[$key]['url'] = go($info['catid'],$info['id']); $array[$key]['id'] = $info['id']; $array[$key]['catid'] = $info['catid']; $array[$key]['listorder'] = $info['listorder']; } } return $array; } /** * 可视化标签 */ public function pc_tag() { $positionlist = getcache('position','commons'); $sites = pc_base::load_app_class('sites','admin'); $sitelist = $sites->pc_tag_list(); foreach ($positionlist as $_v) if($_v['siteid'] == get_siteid() || $_v['siteid'] == 0) $poslist[$_v['posid']] = $_v['name']; return array( 'action'=>array('lists'=>L('list','', 'content'),'position'=>L('position','', 'content'), 'category'=>L('subcat', '', 'content'), 'relation'=>L('related_articles', '', 'content'), 'hits'=>L('top', '', 'content')), 'lists'=>array( 'catid'=>array('name'=>L('catid', '', 'content'),'htmltype'=>'input_select_category','data'=>array('type'=>0),'validator'=>array('min'=>1)), 'order'=>array('name'=>L('sort', '', 'content'), 'htmltype'=>'select','data'=>array('id DESC'=>L('id_desc', '', 'content'), 'updatetime DESC'=>L('updatetime_desc', '', 'content'), 'listorder ASC'=>L('listorder_asc', '', 'content'))), 'thumb'=>array('name'=>L('thumb', '', 'content'), 'htmltype'=>'radio','data'=>array('0'=>L('all_list', '', 'content'), '1'=>L('thumb_list', '', 'content'))), 'moreinfo'=>array('name'=>L('moreinfo', '', 'content'), 'htmltype'=>'radio', 'data'=>array('1'=>L('yes'), '0'=>L('no'))) ), 'position'=>array( 'posid'=>array('name'=>L('posid', '', 'content'),'htmltype'=>'input_select','data'=>$poslist,'validator'=>array('min'=>1)), 'catid'=>array('name'=>L('catid', '', 'content'),'htmltype'=>'input_select_category','data'=>array('type'=>0),'validator'=>array('min'=>0)), 'thumb'=>array('name'=>L('thumb', '', 'content'), 'htmltype'=>'radio','data'=>array('0'=>L('all_list', '', 'content'), '1'=>L('thumb_list', '', 'content'))), 'order'=>array('name'=>L('sort', '', 'content'), 'htmltype'=>'select','data'=>array('listorder DESC'=>L('listorder_desc', '', 'content'),'listorder ASC'=>L('listorder_asc', '', 'content'),'id DESC'=>L('id_desc', '', 'content'))), ), 'category'=>array( 'siteid'=>array('name'=>L('siteid'), 'htmltype'=>'input_select', 'data'=>$sitelist), 'catid'=>array('name'=>L('catid', '', 'content'), 'htmltype'=>'input_select_category', 'data'=>array('type'=>0)) ), 'relation'=>array( 'catid'=>array('name'=>L('catid', '', 'content'), 'htmltype'=>'input_select_category', 'data'=>array('type'=>0), 'validator'=>array('min'=>1)), 'order'=>array('name'=>L('sort', '', 'content'), 'htmltype'=>'select','data'=>array('id DESC'=>L('id_desc', '', 'content'), 'updatetime DESC'=>L('updatetime_desc', '', 'content'), 'listorder ASC'=>L('listorder_asc', '', 'content'))), 'relation'=>array('name'=>L('relevant_articles_id', '', 'content'), 'htmltype'=>'input'), 'keywords'=>array('name'=>L('key_word', '', 'content'), 'htmltype'=>'input') ), 'hits'=>array( 'catid'=>array('name'=>L('catid', '', 'content'), 'htmltype'=>'input_select_category', 'data'=>array('type'=>0), 'validator'=>array('min'=>1)), 'day'=>array('name'=>L('day_select', '', 'content'), 'htmltype'=>'input', 'data'=>array('type'=>0)), ), ); } } ?>
自己加了一个条件areaid,那么PC标签就可以这么写了
{pc:content action="lists" catid="$v[catid]" thumb="1" num="1" order="id DESC" areasql=$wheresql}
.....
</pc>
如此写来频道页的调用就对了,但是问题又来了,列表页呢,大哥,分页呢,参数不对呀
url扩展里面
index.php?m=content&c=index&a=lists&catid=1&page=1&areaid=1 index.php?m=content&c=index&a=lists&catid={$catid}&areaid={$areaid}|index.php?m=content&c=index&a=lists&catid={$catid}&page={$page}&areaid={$areaid}
更新下URL,ok了还真是蛋疼啊
注解:
不是更新URL是更新栏目缓存然后URL才能更新,另外解决上一页参数丢失问题
phpcms\libs\functions\global.func.php 里面pages下面的函数<2修改为<1即可
里面再加一个函数,在相关魔板位置替换
url_par函数
function url_par_area($par, $url = '') { //http://127.0.0.1/list-6-3-1.html if($url == '') $url = get_url(); if (!strpos($url, '.php')) { //如果URL不包含php $arr=explode('-',$url); $arr1=explode('=',$par); $arr[2]=$arr1[1]; $url=$arr[0].'-'.$arr[1].'-'.$arr[2].'-'.$arr[3]; }else { $pos = strpos($url, '?'); if($pos === false) { $url .= '?'.$par; } else { $querystring = substr(strstr($url, '?'), 1); parse_str($querystring, $pars); $query_array = array(); foreach($pars as $k=>$v) { if($k != 'page') $query_array[$k] = $v; } $querystring = http_build_query($query_array).'&'.$par; $url = substr($url, 0, $pos).'?'.$querystring; } } return $url; }
function url_par_index($par, $url = '') { //http://127.0.0.1/list-6-3-1.html if($url == '') $url = get_url(); $arr1=explode('=',$par); if($arr1==""){ str_replace($url,"php","html"); }else{ $url=str_replace($url,"index.php","index-".$arr1[1].".html"); } return $url; }
继承class MY_url extends url函数
<?php defined('IN_PHPCMS') or exit('No permission resources.'); class MY_url extends url{ private $urlrules,$categorys,$html_root; public function __construct() { $this->urlrules = getcache('urlrules','commons'); self::set_siteid(); $this->categorys = getcache('category_content_'.$this->siteid,'commons'); $this->html_root = pc_base::load_config('system','html_root'); parent::__construct(); } /** * 内容页链接 * @param $id 内容id * @param $page 当前页 * @param $catid 栏目id * @param $time 添加时间 * @param $prefix 前缀 * @param $data 数据 * @param $action 操作方法 * @param $upgrade 是否是升级数据 * @return array 0=>url , 1=>生成路径 */ public function show($id, $page = 0, $catid = 0, $time = 0, $prefix = '',$data = '',$action = 'edit',$upgrade = 0) { $page = max($page,1); $urls = $catdir = ''; $category = $this->categorys[$catid]; $setting = string2array($category['setting']); $content_ishtml = $setting['content_ishtml']; //当内容为转换或升级时 if($upgrade || (isset($_POST['upgrade']) && defined('IN_ADMIN') && $_POST['upgrade'])) { if($_POST['upgrade']) $upgrade = $_POST['upgrade']; $upgrade = '/'.ltrim($upgrade,WEB_PATH); if($page==1) { $url_arr[0] = $url_arr[1] = $upgrade; } else { $lasttext = strrchr($upgrade,'.'); $len = -strlen($lasttext); $path = substr($upgrade,0,$len); $url_arr[0] = $url_arr[1] = $path.'_'.$page.$lasttext; } } else { $show_ruleid = $setting['show_ruleid']; $urlrules = $this->urlrules[$show_ruleid]; if(!$time) $time = SYS_TIME; $urlrules_arr = explode('|',$urlrules); if($page==1) { $urlrule = $urlrules_arr[0]; } else { $urlrule = isset($urlrules_arr[1]) ? $urlrules_arr[1] : $urlrules_arr[0]; } $domain_dir = ''; if (strpos($category['url'], '://')!==false && strpos($category['url'], '?')===false) { if (preg_match('/^((http|https):\/\/)?([^\/]+)/i', $category['url'], $matches)) { $match_url = $matches[0]; $url = $match_url.'/'; } $db = pc_base::load_model('category_model'); $r = $db->get_one(array('url'=>$url), '`catid`'); if($r) $domain_dir = $this->get_categorydir($r['catid']).$this->categorys[$r['catid']]['catdir'].'/'; } $categorydir = $this->get_categorydir($catid); $catdir = $category['catdir']; $year = date('Y',$time); $month = date('m',$time); $day = date('d',$time); $urls = str_replace(array('{$categorydir}','{$catdir}','{$year}','{$month}','{$day}','{$catid}','{$id}','{$page}'),array($categorydir,$catdir,$year,$month,$day,$catid,$id,$page),$urlrule); $create_to_html_root = $category['create_to_html_root']; if($create_to_html_root || $category['sethtml']) { $html_root = ''; } else { $html_root = $this->html_root; } if($content_ishtml && $url) { if ($domain_dir && $category['isdomain']) { $url_arr[1] = $html_root.'/'.$domain_dir.$urls; $url_arr[0] = $url.$urls; } else { $url_arr[1] = $html_root.'/'.$urls; $url_arr[0] = WEB_PATH == '/' ? $match_url.$html_root.'/'.$urls : $match_url.rtrim(WEB_PATH,'/').$html_root.'/'.$urls; } } elseif($content_ishtml) { $url_arr[0] = WEB_PATH == '/' ? $html_root.'/'.$urls : rtrim(WEB_PATH,'/').$html_root.'/'.$urls; $url_arr[1] = $html_root.'/'.$urls; } else { $url_arr[0] = $url_arr[1] = APP_PATH.$urls; } } //生成静态 ,在添加文章的时候,同时生成静态,不在批量更新URL处调用 if($content_ishtml && $data) { $data['id'] = $id; $url_arr['content_ishtml'] = 1; $url_arr['data'] = $data; } return $url_arr; } /** * 获取栏目的访问路径 * 在修复栏目路径处重建目录结构用 * @param intval $catid 栏目ID * @param intval $page 页数 */ public function category_url($catid,$areaid,$page = 1) { $category = $this->categorys[$catid]; if($category['type']==2) return $category['url']; $page = max(intval($page), 1); $setting = string2array($category['setting']); $category_ruleid = $setting['category_ruleid']; $urlrules = $this->urlrules[$category_ruleid]; $urlrules_arr = explode('|',$urlrules); if ($page==1) { $urlrule = $urlrules_arr[0]; } else { $urlrule = $urlrules_arr[1]; } if (!$setting['ishtml']) { //如果不生成静态,自定义加入areaid $url = str_replace(array('{$catid}','{$areaid}', '{$page}'), array($catid,$areaid, $page), $urlrule); if (strpos($url, '\\')!==false) { $url = APP_PATH.str_replace('\\', '/', $url); } } else { //生成静态 if ($category['arrparentid']) { $parentids = explode(',', $category['arrparentid']); } $parentids[] = $catid; $domain_dir = ''; foreach ($parentids as $pid) { //循环查询父栏目是否设置了二级域名 $r = $this->categorys[$pid]; if (strpos(strtolower($r['url']), '://')!==false && strpos($r['url'], '?')===false) { $r['url'] = preg_replace('/([(http|https):\/\/]{0,})([^\/]*)([\/]{1,})/i', '$1$2/', $r['url'], -1); //取消掉双'/'情况 if (substr_count($r['url'], '/')==3 && substr($r['url'],-1,1)=='/') { //如果url中包含‘http://’并且‘/’在3个则为二级域名设置栏目 $url = $r['url']; $domain_dir = $this->get_categorydir($pid).$this->categorys[$pid]['catdir'].'/'; //得到二级域名的目录 } } } $category_dir = $this->get_categorydir($catid); $urls = str_replace(array('{$categorydir}','{$catdir}','{$catid}','{$page}'),array($category_dir,$category['catdir'],$catid,$page),$urlrule); if ($url && $domain_dir) { //如果存在设置二级域名的情况 if (strpos($urls, $domain_dir)===0) { $url = str_replace(array($domain_dir, '\\'), array($url, '/'), $urls); } else { $urls = $domain_dir.$urls; $url = str_replace(array($domain_dir, '\\'), array($url, '/'), $urls); } } else { //不存在二级域名的情况 $url = $urls; } } if (in_array(basename($url), array('index.html', 'index.htm', 'index.shtml'))) { $url = dirname($url).'/'; } if (strpos($url, '://')===false) $url = str_replace('//', '/', $url); if(strpos($url, '/')===0) $url = substr($url,1); return $url; } /** * 生成列表页分页地址 * @param $ruleid 角色id * @param $categorydir 父栏目路径 * @param $catdir 栏目路径 * @param $catid 栏目id * @param $page 当前页 */ public function get_list_url($ruleid,$categorydir, $catdir, $catid, $page = 1) { $urlrules = $this->urlrules[$ruleid]; $urlrules_arr = explode('|',$urlrules); if ($page==1) { $urlrule = $urlrules_arr[0]; } else { $urlrule = $urlrules_arr[1]; } $urls = str_replace(array('{$categorydir}','{$catdir}','{$year}','{$month}','{$day}','{$catid}','{$page}'),array($categorydir,$catdir,$year,$month,$day,$catid,$page),$urlrule); return $urls; } /** * 获取父栏目路径 * @param $catid * @param $dir */ private function get_categorydir($catid, $dir = '') { $setting = array(); $setting = string2array($this->categorys[$catid]['setting']); if ($setting['create_to_html_root']) return $dir; if ($this->categorys[$catid]['parentid']) { $dir = $this->categorys[$this->categorys[$catid]['parentid']]['catdir'].'/'.$dir; return $this->get_categorydir($this->categorys[$catid]['parentid'], $dir); } else { return $dir; } } /** * 设置当前站点 */ private function set_siteid() { if(defined('IN_ADMIN')) { $this->siteid = get_siteid(); } else { if (param::get_cookie('siteid')) { $this->siteid = param::get_cookie('siteid'); } else { $this->siteid = 1; } } } }
更改顶部导航路径areaid丢失
/** * 当前路径 * 返回指定栏目路径层级 * @param $catid 栏目id * @param $symbol 栏目间隔符 */ function catpos($catid, $symbol=' > '){ $category_arr = array(); $siteids = getcache('category_content','commons'); $siteid = $siteids[$catid]; $category_arr = getcache('category_content_'.$siteid,'commons'); if(!isset($category_arr[$catid])) return ''; $pos = ''; $siteurl = siteurl($category_arr[$catid]['siteid']); $arrparentid = array_filter(explode(',', $category_arr[$catid]['arrparentid'].','.$catid)); foreach($arrparentid as $catid) { $url = $category_arr[$catid]['url']; if(strpos($url, '://') === false) $url = $siteurl.$url; if($_GET[areaid]!='') $url=url_par_area("areaid=".$_GET[areaid],$url); //自己加入 $pos .= '<a href="'.$url.'">'.$category_arr[$catid]['catname'].'</a>'.$symbol; } return $pos; }
posted on 2015-01-15 15:34 HOT SUMMER 阅读(282) 评论(0) 收藏 举报
浙公网安备 33010602011771号