二次开发第二天

其实也谈不上二次开发了,纯属在原有基础上小改,大改谈不上了,区域选择的问题网上现成的很少,但是也有,参考了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&degree=$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&degree=$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&degree=",$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&degree=$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&degree=$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&degree=$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&degree=$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&degree=$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&degree=$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>&nbsp;&nbsp; 品牌:<span {if $r[brandid] == $brandid} style="color:#F00;"{/if}>[{$brand_data[$r[brandid]][name]}] </span>&nbsp;&nbsp;区域:[{$area_data[$r[areaid]][name]}]&nbsp;&nbsp; 点击:{$views} &nbsp;&nbsp;评论:{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"}
View Code

因为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}
      <!--获取结束-->
View Code

那么这些就是我们想要的东西了,至于显示就好办了

比如频道页的更多我们就可以 <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)),
            ),
                
        );
    }
 }
 ?>
View Code

自己加了一个条件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;
            }
        }
    }
}
View Code

 

更改顶部导航路径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)    收藏  举报

导航