PHPCMS自带的有多站点功能,但是用过的朋友都知道,自带的多站点功能有很多的不方便之处,例如站点栏目没法公用,每个站点都需要创建模型、每个站点都需要单独添加内容,还有站点必须静态化。如果你内容很多这些功能当然无可厚非,但是实际情况我们网站内容不会这么多的,所以决定开发一款简单使用的PHPCMS城市分站插件。
演示站点:全国分站列表 - 郑州腾石网络科技有限公司--专注于网站建设、网站推广
phpcms城市分站插件的优势:
1、后台一键导入全国城市,无需一个一个的手动添加
2、每个分站都支持动态、静态、伪静态,还支持绑定二级域名,并仍然支持动态静态伪静态。
3、可以任意定义每个分站的标题、关键词、描述、版权以及支持自定义url。如果不填,则默认调用分站通用设置
4、每个分站都支持自定义模板风格
5、前端调用方便,在不修改phpcms官方默认调用的前提下,尽量减少对模板调用的修改,仅修改分站首页、面包屑、分页以及每个循环前处理一下内容链接等
6、设置为静态的分站,可点击“一键生成”,自动帮你生成分站全站
分站列表截图:
后台截图:
安装使用教程:
一、后台操作
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)
- {pc:fenzhan action="sitelists" num="1000" parentid="0" order="listorder DESC"}
- {loop $data $r}
- <span><a href="{$r['url']}">{$r['name']}</a></span>
- {/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)}
- {pc:content action="lists" catid="13" num="1" thumb="1" siteid="$siteid" order="listorder DESC"}
- {php $data = checkUrl($data,$sid)}
- {loop $data $r}
(4)需要分页的地方,需要加入参数 sid="$sid",同时分页代码改成:{$fzpages},例:
- {pc:content action="lists" catid="$catid" num="12" order="listorder desc,id DESC" page="$page" sid="$sid"}
- {php $data = checkUrl($data,$sid);}
- {loop $data $r}
- ......
- {/loop}
- {/pc}
- <div id="pages">{$fzpages}</div>
(5)分站模板常用调用:
- {fzsiteurl($sid)}//分站首页($sid=0的时候标识分站列表)
- {fzcatpos($catid,$sid)};//面包屑导航
- {$copyright};//分站底部导航
- {$city};//城市名称
- {$dirname}//城市路径
- {$SEO['site_name]}//SEO调用和默认用法一样,自动转换城市关键词
(6)打开phpcms\libs\classes\template_cache.class.php找到代码(120行左右)
- $arr = array('action','num','cache','page', 'pagesize', 'urlrule', 'return', 'start');
里边加参数sid,改成:
- $arr = array('action','num','cache','page', 'pagesize', 'urlrule', 'return', 'start','sid');
然后找到代码:
- $str .= '$pages = pages($'.$op.'_total, $page, $pagesize, $urlrule);';
在后边新增代码:
- if(isset($sid)){
- $str .='$sid = intval('.$sid.');';
- $str .= '$fzpages = fzpages($'.$op.'_total, $page, $pagesize, $urlrule,"",$sid);';
- }
(7)在phpcms\libs\functions\global.func.php添加对分站分页的处理函数
- /**
- * 分站分页函数
- *
- * @param $num 信息总数
- * @param $curr_page 当前分页
- * @param $perpage 每页显示数
- * @param $urlrule URL规则
- * @param $array 需要传递的数组,用于增加额外的方法
- * @return 分页
- */
- function fzpages($num, $curr_page, $perpage = 20, $urlrule = '', $array = array(),$sid=0,$setpages = 10) {
- if(!$sid) return pages($num, $curr_page, $perpage, $urlrule, $array,$setpages);
- $fenzhan = getcache('fenzhan_sid_'.$sid, 'fenzhan');
- if(defined('URLRULE') && $urlrule == '') {
- $urlrule = URLRULE;
- $array = $GLOBALS['URL_ARRAY'];
- } elseif($urlrule == '') {
- $urlrule = url_par('page={$page}');
- }
- $multipage = '';
- if($num > $perpage) {
- $page = $setpages+1;
- $offset = ceil($setpages/2-1);
- $pages = ceil($num / $perpage);
- if (defined('IN_ADMIN') && !defined('PAGES')) define('PAGES', $pages);
- $from = $curr_page - $offset;
- $to = $curr_page + $offset;
- $more = 0;
- if($page >= $pages) {
- $from = 2;
- $to = $pages-1;
- } else {
- if($from <= 1) {
- $to = $page-1;
- $from = 2;
- } elseif($to >= $pages) {
- $from = $pages-($page-2);
- $to = $pages-1;
- }
- $more = 1;
- }
- $multipage .= '<a class="a1">'.$num.L('page_item').'</a>';
- if($curr_page>0) {
- $multipage .= ' <a href="'.fzpageurl($urlrule, $curr_page-1, $array,$sid).'" class="a1">'.L('previous').'</a>';
- if($curr_page==1) {
- $multipage .= ' <span>1</span>';
- } elseif($curr_page>6 && $more) {
- $multipage .= ' <a href="'.fzpageurl($urlrule, 1, $array,$sid).'">1</a>..';
- } else {
- $multipage .= ' <a href="'.fzpageurl($urlrule, 1, $array,$sid).'">1</a>';
- }
- }
- for($i = $from; $i <= $to; $i++) {
- if($i != $curr_page) {
- $multipage .= ' <a href="'.fzpageurl($urlrule, $i, $array,$sid).'">'.$i.'</a>';
- } else {
- $multipage .= ' <span>'.$i.'</span>';
- }
- }
- if($curr_page<$pages) {
- if($curr_page<$pages-5 && $more) {
- $multipage .= ' ..<a href="'.fzpageurl($urlrule, $pages, $array,$sid).'">'.$pages.'</a> <a href="'.fzpageurl($urlrule, $curr_page+1, $array,$sid).'" class="a1">'.L('next').'</a>';
- } else {
- $multipage .= ' <a href="'.fzpageurl($urlrule, $pages, $array,$sid).'">'.$pages.'</a> <a href="'.fzpageurl($urlrule, $curr_page+1, $array,$sid).'" class="a1">'.L('next').'</a>';
- }
- } elseif($curr_page==$pages) {
- $multipage .= ' <span>'.$pages.'</span> <a href="'.pageurl($urlrule, $curr_page, $array,$sid).'" class="a1">'.L('next').'</a>';
- } else {
- $multipage .= ' <a href="'.fzpageurl($urlrule, $pages, $array,$sid).'">'.$pages.'</a> <a href="'.fzpageurl($urlrule, $curr_page+1, $array,$sid).'" class="a1">'.L('next').'</a>';
- }
- }
- return $multipage;
- }
- /**
- * 返回分页路径
- *
- * @param $urlrule 分页规则
- * @param $page 当前页
- * @param $array 需要传递的数组,用于增加额外的方法
- * @return 完整的URL路径
- */
- function fzpageurl($urlrule, $page, $array = array(),$sid=0) {
- if(strpos($urlrule, '~')) {
- $urlrules = explode('~', $urlrule);
- $urlrule = $page < 2 ? $urlrules[0] : $urlrules[1];
- }
- $city = '';
- $domain = '';
- if($sid){
- $fenzhan = getcache('fenzhan_sid_'.$sid,'fenzhan');
- $city = $fenzhan['dirname'];
- $domain = trim($fenzhan['domain']);
- }
- $findme = array('{$page}','{$city}');
- $replaceme = array($page,$city);
- if (is_array($array)) foreach ($array as $k=>$v) {
- $findme[] = '{$'.$k.'}';
- $replaceme[] = $v;
- }
- $url = str_replace($findme, $replaceme, $urlrule);
- $url = str_replace(array('http://','https://','//','~'), array('~','~','/',SITE_PROTOCOL), $url);
- if(substr($url,0,4) != 'http'){
- if($domain){
- $url = $domain.ltrim($url,'/');
- }else{
- $url = APP_PATH.ltrim($url,'/');
- }
- }else{
- if($domain){
- $url = str_replace(APP_PATH,$domain,$url);
- }
- }
- return $url;
- }
3、进入分站列表页,可以点击进入任意分站查看效果
注意:
1、如果主站的图片路径不带域名,那么可能出现绑定域名的分站图片打不开,此时需要给主站图片加上路径
2、设置为静态的分站 点击生成之后是一次性给你生成全站了,如果内容较多可能会比较耗时
3、分站没有绑定域名并开启伪静态的情况下,伪静态路径默认带 /city/当前城市,例如:/city/henen/