【声明】关于六久阁私自出售我公司dedecms小程序插件声明
发布时间:2024-03-24 09:45:12查看:0PHPCMS v9城市分站插件 价格:¥299
PHPCMS自带的有多站点功能,但是用过的朋友都知道,自带的多站点功能有很多的不方便之处,例如站点栏目没法公用,每个站点都需要创建模型、每个站点都需要单独添加内容,还有站点必须静态化。如果你内容很多这些功能当然无可厚非,但是实际情况我们网站内容不会这么多的,所以决定开发一款简单使用的PHPCMS城市分站插件。

演示站点:https://www.tengcee.com/index.php?m=fenzhan&c=index&a=index

phpcms城市分站插件的优势:
1、后台一键导入全国城市,无需一个一个的手动添加
2、每个分站都支持动态、静态、伪静态,还支持绑定二级域名,并仍然支持动态静态伪静态。 
3、可以任意定义每个分站的标题、关键词、描述、版权以及支持自定义url。如果不填,则默认调用分站通用设置
4、每个分站都支持自定义模板风格
5、前端调用方便,在不修改phpcms官方默认调用的前提下,尽量减少对模板调用的修改,仅修改分站首页、面包屑、分页以及每个循环前处理一下内容链接等
6、设置为静态的分站,可点击“一键生成”,自动帮你生成分站全站

升级日志:
20241201 增加一键绑定城市拼音域名,修复SEO标题错误,支持分站绑定泛解析域名,增加“首字母”、“是否有子分站”字段,其他bug修复,(另:支持分站调用各自分站内容功能(需二开))

20240715  修复分站内页不显示底部版权问题,修复分站首页无法调用其他模块内容bug
20240713  新增一键绑定所有分站二级域名功能
20240706  修复导入省+市+县时的bug,新增一键清除所有分站,新增一键修改全部分站是否静态,一键修复城市路径错误 ,修复其他若干bug
20240324  phpcms城市分站1.0beta版本上线

分站列表截图:




后台截图:





安装使用教程:

一、后台操作
1、上传源码到对于目录,然后后台---模块----模块管理----找到分站插件,点击安装插件
2、安装之后打开“分站管理”---首先进行“分站设置”,设置通用标题,关键词描述和底部版权,以及设置自定义url。
3、导入城市,打开分站列表---导入城市,可根据自己需要导入对应级别即可,如果城市不多可以自己手动添加;
4、对每个分站站点单独设置每个分站域名、关键词,是否静态化、以及设置自定义url。

注意:
1、多次点击导入城市,会自动安装分站设置重新更新所有分站
2、对分站操作之后,记得点击“更新分站缓存”

二、前端调用
1、安装之后会自动在模板风格中创建文件夹fenzhan(如果创建到了default中,可以手动转移到你自己的风格中)
2、可以把你的content里边用到的模板复制一份到fenzhan文件夹中,模板修改
(1)、fenzhanlist.html为分站列表页
首页访问路径:{APP_PATH}index.php?m=fenzhan&c=index&a=index或者{fzsiteurl(0)}。当然你也可以自己写,调用代码是:(注:分站主键是$sid)
  1. {pc:fenzhan action="sitelists" num="1000" parentid="0" order="listorder DESC"
  2. {loop $data $r} 
  3.  <span><a href="{$r['url']}">{$r['name']}</a></span> 
  4. {/pc} 

(2)、fenzhan中所有的模板的头部调用分站的头部{template "fenzhan","header"},底部头部{template "fenzhan","footer"},同理其他页面也调用分站页面。(调用content模板不会自动帮你处理链接的)
(3)凡是调用栏目或者调用列表的地方在{loop $data $r} 之前加入代码:
如果是对栏目的调用则加:{php $data = checkUrl($data,$sid,1)}(其中1表示是处理栏目)
如果是对列表的调用则加:{php $data = checkUrl($data,$sid)}
  1. {pc:content action="lists" catid="13" num="1" thumb="1" siteid="$siteid" order="listorder DESC"
  2. {php $data = checkUrl($data,$sid)} 
  3. {loop $data $r} 
(4)需要分页的地方,需要加入参数 sid="$sid",同时分页代码改成:{$fzpages},例:
  1. {pc:content action="lists" catid="$catid" num="12" order="listorder desc,id DESC" page="$page" sid="$sid"
  2. {php $data = checkUrl($data,$sid);} 
  3. {loop $data $r} 
  4.          ...... 
  5. {/loop} 
  6. {/pc} 
  7. <div id="pages">{$fzpages}</div> 

(5)分站模板常用调用:
  1. {fzsiteurl($sid)}//分站首页($sid=0的时候标识分站列表) 
  2. {fzcatpos($catid,$sid)};//面包屑导航 
  3. {$copyright};//分站底部导航 
  4. {$city};//城市名称 
  5. {$dirname}//城市路径 
  6. {$SEO['site_name]}//SEO调用和默认用法一样,自动转换城市关键词 
(6)打开phpcms\libs\classes\template_cache.class.php找到代码(120行左右)
  1. $arr = array('action','num','cache','page''pagesize''urlrule''return''start'); 
里边加参数sid,改成:
  1. $arr = array('action','num','cache','page''pagesize''urlrule''return''start','sid'); 
然后找到代码:
  1. $str .= '$pages = pages($'.$op.'_total, $page, $pagesize, $urlrule);'
在后边新增代码:
  1. if(isset($sid)){ 
  2.      $str .='$sid = intval('.$sid.');'
  3.      $str .= '$fzpages = fzpages($'.$op.'_total, $page, $pagesize, $urlrule,"",$sid);'
(7)在phpcms\libs\functions\global.func.php添加对分站分页的处理函数
  1. /** 
  2.  * 分站分页函数 
  3.  * 
  4.  * @param $num 信息总数 
  5.  * @param $curr_page 当前分页 
  6.  * @param $perpage 每页显示数 
  7.  * @param $urlrule URL规则 
  8.  * @param $array 需要传递的数组,用于增加额外的方法 
  9.  * @return 分页 
  10.  */ 
  11. function fzpages($num, $curr_page, $perpage = 20, $urlrule = '', $array = array(),$sid=0,$setpages = 10) { 
  12.     if(!$sid) return pages($num, $curr_page, $perpage, $urlrule, $array,$setpages); 
  13.     $fenzhan = getcache('fenzhan_sid_'.$sid, 'fenzhan'); 
  14.     if(defined('URLRULE') && $urlrule == '') { 
  15.         $urlrule = URLRULE; 
  16.         $array = $GLOBALS['URL_ARRAY']; 
  17.     } elseif($urlrule == '') { 
  18.         $urlrule = url_par('page={$page}'); 
  19.     } 
  20.     $multipage = ''
  21.     if($num > $perpage) { 
  22.         $page = $setpages+1; 
  23.         $offset = ceil($setpages/2-1); 
  24.         $pages = ceil($num / $perpage); 
  25.         if (defined('IN_ADMIN') && !defined('PAGES')) define('PAGES', $pages); 
  26.         $from = $curr_page - $offset; 
  27.         $to = $curr_page + $offset; 
  28.         $more = 0; 
  29.         if($page >= $pages) { 
  30.             $from = 2; 
  31.             $to = $pages-1; 
  32.         } else { 
  33.             if($from <= 1) { 
  34.                 $to = $page-1; 
  35.                 $from = 2; 
  36.             }  elseif($to >= $pages) { 
  37.                 $from = $pages-($page-2); 
  38.                 $to = $pages-1; 
  39.             } 
  40.             $more = 1; 
  41.         } 
  42.          
  43.         $multipage .= '<a class="a1">'.$num.L('page_item').'</a>'
  44.         if($curr_page>0) { 
  45.             $multipage .= ' <a href="'.fzpageurl($urlrule, $curr_page-1, $array,$sid).'" class="a1">'.L('previous').'</a>'
  46.             if($curr_page==1) { 
  47.                 $multipage .= ' <span>1</span>'
  48.             } elseif($curr_page>6 && $more) { 
  49.                 $multipage .= ' <a href="'.fzpageurl($urlrule, 1, $array,$sid).'">1</a>..'
  50.             } else { 
  51.                 $multipage .= ' <a href="'.fzpageurl($urlrule, 1, $array,$sid).'">1</a>'
  52.             } 
  53.         } 
  54.         for($i = $from; $i <= $to; $i++) { 
  55.             if($i != $curr_page) { 
  56.                 $multipage .= ' <a href="'.fzpageurl($urlrule, $i, $array,$sid).'">'.$i.'</a>'
  57.             } else { 
  58.                 $multipage .= ' <span>'.$i.'</span>'
  59.             } 
  60.         } 
  61.         if($curr_page<$pages) { 
  62.             if($curr_page<$pages-5 && $more) { 
  63.                 $multipage .= ' ..<a href="'.fzpageurl($urlrule, $pages, $array,$sid).'">'.$pages.'</a> <a href="'.fzpageurl($urlrule, $curr_page+1, $array,$sid).'" class="a1">'.L('next').'</a>'
  64.             } else { 
  65.                 $multipage .= ' <a href="'.fzpageurl($urlrule, $pages, $array,$sid).'">'.$pages.'</a> <a href="'.fzpageurl($urlrule, $curr_page+1, $array,$sid).'" class="a1">'.L('next').'</a>'
  66.             } 
  67.         } elseif($curr_page==$pages) { 
  68.             $multipage .= ' <span>'.$pages.'</span> <a href="'.pageurl($urlrule, $curr_page, $array,$sid).'" class="a1">'.L('next').'</a>'
  69.         } else { 
  70.             $multipage .= ' <a href="'.fzpageurl($urlrule, $pages, $array,$sid).'">'.$pages.'</a> <a href="'.fzpageurl($urlrule, $curr_page+1, $array,$sid).'" class="a1">'.L('next').'</a>'
  71.         } 
  72.     } 
  73.     return $multipage; 
  74.  
  75. /** 
  76.  * 返回分页路径 
  77.  * 
  78.  * @param $urlrule 分页规则 
  79.  * @param $page 当前页 
  80.  * @param $array 需要传递的数组,用于增加额外的方法 
  81.  * @return 完整的URL路径 
  82.  */ 
  83. function fzpageurl($urlrule, $page, $array = array(),$sid=0) { 
  84.     if(strpos($urlrule, '~')) { 
  85.         $urlrules = explode('~', $urlrule); 
  86.         $urlrule = $page < 2 ? $urlrules[0] : $urlrules[1]; 
  87.     } 
  88.     $city = ''
  89.     $domain = ''
  90.     if($sid){ 
  91.         $fenzhan = getcache('fenzhan_sid_'.$sid,'fenzhan'); 
  92.         $city = $fenzhan['dirname']; 
  93.         $domain = trim($fenzhan['domain']); 
  94.     } 
  95.     $findme = array('{$page}','{$city}'); 
  96.     $replaceme = array($page,$city); 
  97.     if (is_array($array)) foreach ($array as $k=>$v) { 
  98.         $findme[] = '{$'.$k.'}'
  99.         $replaceme[] = $v; 
  100.     } 
  101.     $url = str_replace($findme, $replaceme, $urlrule); 
  102.     $url = str_replace(array('http://','https://','//','~'), array('~','~','/',SITE_PROTOCOL), $url); 
  103.     if(substr($url,0,4) != 'http'){ 
  104.         if($domain){ 
  105.             $url = $domain.ltrim($url,'/'); 
  106.         }else
  107.             $url = APP_PATH.ltrim($url,'/'); 
  108.         } 
  109.     }else
  110.         if($domain){ 
  111.             $url = str_replace(APP_PATH,$domain,$url); 
  112.         } 
  113.     } 
  114.     return $url; 

3、进入分站列表页,可以点击进入任意分站查看效果

注意:
1、如果主站的图片路径不带域名,那么可能出现绑定域名的分站图片打不开,此时需要给主站图片加上路径
2、设置为静态的分站 点击生成之后是一次性给你生成全站了,如果内容较多可能会比较耗时
3、分站没有绑定域名并开启伪静态的情况下,伪静态路径默认带 /city/当前城市,例如:/city/henen/

三、伪静态规则参考
1、nginx下:
  1. //排除beijing这个路径不做伪静态 
  2. location /beijing { 
  3.   if (!-e $request_filename) { 
  4.     #rewrite ^(.*)$ /index.php$1 last; 
  5.   } 
//没有绑定域名的时候的伪静态
  1. location /city { 
  2.   rewrite ^(.*)/city/(.*)/(.*)/(.*)/(.*)/(.*)/([0-9]+)\.html$ $1/index.php?m=fenzhan&c=index&dirname=$2&a=show&dir=$6&id=$7; 
  3.   rewrite ^(.*)/city/(.*)/(.*)/(.*)/(.*)/([0-9]+)\.html$ $1/index.php?m=fenzhan&c=index&dirname=$2&a=show&dir=$5&id=$6; 
  4.   rewrite ^(.*)/city/(.*)/(.*)/(.*)/([0-9]+)\.html$ $1/index.php?m=fenzhan&c=index&dirname=$2&a=show&dir=$4&id=$5; 
  5.   rewrite ^(.*)/city/(.*)/(.*)/([0-9]+)\.html$ $1/index.php?m=fenzhan&c=index&dirname=$2&a=show&dir=$3&id=$4; 
  6.  
  7.   rewrite ^(.*)/city/(.*)/(.*)/([0-9A-Za-z_/]*)/([0-9A-Za-z_/]*)/index_([1-9][0-9]*)\.html$ $1/index.php?m=fenzhan&c=index&a=lists&dirname=$2&dir=$5&page=$6 last; 
  8.   rewrite ^(.*)/city/(.*)/(.*)/([0-9A-Za-z_]*)/([0-9A-Za-z_/]*)/index\.html$ $1/index.php?m=fenzhan&c=index&a=lists&dirname=$2&dir=$5 last; 
  9.   rewrite ^(.*)/city/(.*)/(.*)/([0-9A-Za-z_]*)/index_([1-9][0-9]*)\.html$ $1/index.php?m=fenzhan&c=index&a=lists&dirname=$2&dir=$4&page=$5 last; 
  10.   rewrite ^(.*)/city/(.*)/(.*)/([0-9A-Za-z_]*)/index\.html$ $1/index.php?m=fenzhan&c=index&a=lists&dirname=$2&dir=$4 last; 
  11.    rewrite ^(.*)/city/(.*)/(.*)/index_([1-9][0-9]*)\.html$ $1/index.php?m=fenzhan&c=index&a=lists&dirname=$2&dir=$3&page=$4 last; 
  12.   rewrite ^(.*)/city/(.*)/(.*)/index\.html$ $1/index.php?m=fenzhan&c=index&a=lists&dirname=$2&dir=$3 last; 
  13.   rewrite ^(.*)/city/(.*)\.html$ $1/index.php?m=fenzhan&c=index&a=index&dirname=$2; 
//绑定了域名的子目录伪静态
  1. location / { 
  2.   rewrite ^(.*)/(.*)/(.*)/(.*)/([0-9]+)\.html$ $1/index.php?m=content&c=index&a=show&dir=$4&id=$5; 
  3.   rewrite ^(.*)/(.*)/(.*)/(.*)/show_([0-9]+)\.html$ $1/index.php?m=content&c=index&a=show&dir=$4&id=$5; 
  4.    rewrite ^(.*)/(.*)/(.*)/([0-9]+)\.html$ $1/index.php?m=content&c=index&a=show&dir=$3&id=$4; 
  5.    rewrite ^(.*)/(.*)/(.*)/show_([0-9]+)\.html$ $1/index.php?m=content&c=index&a=show&dir=$3&id=$4; 
  6.    rewrite ^(.*)/([0-9A-Za-z_]*)/([0-9]+)\.html$ $1/index.php?m=content&c=index&a=show&dir=$2&id=$3 last; 
  7.    rewrite ^(.*)/([0-9A-Za-z_]*)/show_([0-9]+)\.html$ $1/index.php?m=content&c=index&a=show&dir=$2&id=$3 last; 
  8.    rewrite ^(.*)/([0-9A-Za-z_/]*)/([0-9]+)_([0-9]+)\.html$ $1/index.php?m=content&c=index&a=show&dir=$2&id=$3&page=$4 last; 
  9.    rewrite ^(.*)/show-([0-9]+)-([0-9]+)-([0-9]+).html$ $1/index.php?m=content&c=index&a=show&catid=$2&id=$3&page=$4 last; 
  10.    rewrite ^(.*)/content-([0-9]+)-([0-9]+)-([0-9]+).html$ $1/index.php?m=content&c=index&a=show&catid=$2&id=$3&page=$4 last; 
  11.  
  12.    rewrite ^(.*)/([0-9A-Za-z_/]*)/([0-9A-Za-z_/]*)/index_([1-9][0-9]*)\.html$ $1/index.php?m=content&c=index&a=lists&dir=$3&page=$4 last; 
  13.    rewrite ^(.*)/([0-9A-Za-z_/]*)/index_([1-9][0-9]*)\.html$ $1/index.php?m=content&c=index&a=lists&dir=$2&page=$3 last; 
  14.    rewrite ^(.*)/(.*)/(.*)/index.html$ $1/index.php?m=content&c=index&a=lists&dir=$3; 
  15.    rewrite ^(.*)/(.*)/(.*)/$ $1/index.php?m=content&c=index&a=lists&dir=$3; 
  16.    rewrite ^(.*)/(.*)/$ $1/index.php?m=content&c=index&a=lists&dir=$2 last; 
  17.    rewrite ^(.*)/(.*)/index.html$ $1/index.php?m=content&c=index&a=lists&dir=$2; 
  18.    rewrite ^(.*)/list-([0-9]+)-([0-9]+)\.html$ $1/index.php?m=content&c=index&a=lists&catid=$2&page=$3 last; 
2:apache下
主目录下:
  1. RewriteRule ^city/([0-9A-Za-z]*?).html index.php?m=fenzhan&c=index&a=index&dirname=$1 
  2. RewriteRule ^city/([0-9A-Za-z]*?)/([0-9A-Za-z_-]*?)/([0-9A-Za-z_-]*?)/([0-9]+)\.html index.php?m=fenzhan&c=index&a=show&dirname=$1&dir=$3&id=$4 
  3. RewriteRule ^city/([0-9A-Za-z]*?)/([0-9A-Za-z_-]*?)/([0-9]+)\.html index.php?m=fenzhan&c=index&a=show&dirname=$1&dir=$2&id=$3 
  4. RewriteRule ^city/([0-9A-Za-z]*?)/([0-9A-Za-z_-]*?)/([0-9A-Za-z_-]*?)/ index.php?m=fenzhan&c=index&a=lists&dirname=$1&dir=$3 
  5. RewriteRule ^city/([0-9A-Za-z]*?)/([0-9A-Za-z_-]*?)/ index.php?m=fenzhan&c=index&a=lists&dirname=$1&dir=$2 
  6. RewriteRule ^city/([0-9A-Za-z]*?)/([0-9A-Za-z_-]*?)/list_([0-9]+)\.html index.php?m=fenzhan&c=index&a=lists&dirname=$1&dir=$2&page=$3 
分站绑定域名的情况下:
  1. #RewriteRule ^([0-9A-Za-z]*?).html index.php?m=fenzhan&c=index&a=index&dirname=$1 
  2. RewriteRule ^([0-9A-Za-z]*?)/([0-9A-Za-z_-]*?)/([0-9A-Za-z_-]*?)/([0-9]+)\.html index.php?m=fenzhan&c=index&a=show&dirname=$1&dir=$3&id=$4 
  3. RewriteRule ^([0-9A-Za-z]*?)/([0-9A-Za-z_-]*?)/([0-9]+)\.html index.php?m=fenzhan&c=index&a=show&dirname=$1&dir=$2&id=$3 
  4. RewriteRule ^([0-9A-Za-z]*?)/([0-9A-Za-z-]*?)/([0-9A-Za-z_-]*?)/ index.php?m=fenzhan&c=index&a=lists&dirname=$1&dir=$3 
  5. RewriteRule ^([0-9A-Za-z]*?)/([0-9A-Za-z-]*?)/index_([0-9]+)\.html index.php?m=fenzhan&c=index&a=lists&dirname=$1&dir=$2&page=$3 
  6. RewriteRule ^([0-9A-Za-z]*?)/([0-9A-Za-z-]*?)/ index.php?m=fenzhan&c=index&a=lists&dir=$2 
  7. RewriteRule ^([0-9A-Za-z]*?)/index_([0-9]+)\.html index.php?m=fenzhan&c=index&a=lists&dir=$1&page=$2 
  8. RewriteRule ^([0-9A-Za-z]*?)/ index.php?m=fenzhan&c=index&a=lists&dir=$1 
注:伪静态仅供参考

如何购买
添加微信好友

版权声明:本文为原创文章,未经允许不得转载。https://doc.tengcee.com/other/300.html

服务热线

15137100750

我知道你不会打


但是我还是要写


你懂得!

微信二维码

QQ群二维码