PHPCMS v9城市分站插件

news2024/11/20 16:36:46

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)

  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.  * @param $urlrule 分页规则 
  78.  * @param $page 当前页 
  79.  * @param $array 需要传递的数组,用于增加额外的方法 
  80.  * @return 完整的URL路径 
  81.  */ 
  82. function fzpageurl($urlrule, $page, $array = array(),$sid=0) { 
  83.     if(strpos($urlrule, '~')) { 
  84.         $urlrules = explode('~', $urlrule); 
  85.         $urlrule = $page < 2 ? $urlrules[0] : $urlrules[1]; 
  86.     } 
  87.     $city = ''; 
  88.     $domain = ''; 
  89.     if($sid){ 
  90.         $fenzhan = getcache('fenzhan_sid_'.$sid,'fenzhan'); 
  91.         $city = $fenzhan['dirname']; 
  92.         $domain = trim($fenzhan['domain']); 
  93.     } 
  94.     $findme = array('{$page}','{$city}'); 
  95.     $replaceme = array($page,$city); 
  96.     if (is_array($array)) foreach ($array as $k=>$v) { 
  97.         $findme[] = '{$'.$k.'}'; 
  98.         $replaceme[] = $v; 
  99.     } 
  100.     $url = str_replace($findme, $replaceme, $urlrule); 
  101.     $url = str_replace(array('http://','https://','//','~'), array('~','~','/',SITE_PROTOCOL), $url); 
  102.     if(substr($url,0,4) != 'http'){ 
  103.         if($domain){ 
  104.             $url = $domain.ltrim($url,'/'); 
  105.         }else{ 
  106.             $url = APP_PATH.ltrim($url,'/'); 
  107.         } 
  108.     }else{ 
  109.         if($domain){ 
  110.             $url = str_replace(APP_PATH,$domain,$url); 
  111.         } 
  112.     } 
  113.     return $url; 


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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1547330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Frida】【Android】02_JAVA层HOOK

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

【C语言】三种方法模拟实现 strlen 函数

前言 这篇文章将要带我们去实现模拟一个stelen()函数 首先我们要知道strlen()函数的定义 strlen()定义和用法 我们先看一下strlen在cplusplus网站中的定义 链接: 点击跳转 这里我们可以知道strlen的用法 size_t strlen ( const char * str );获取字符串长度 返回 C 字符串…

【分布式】——降级熔断限流

降级&熔断&限流 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记仓库&#x1f449;https://github.com/A-BigTree/tree-learning-notes 个人主页&#x1f449;https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点…

搭建 Apple Mac M1 stm32 开发环境

近期想学习 stm32 开发,看了些书和视频,买了开发板。开发板到了后就迫不及待的的进行尝试。由于我目前使用的电脑是 Apple M1 Pro,目前用的比较多的是 windows + keil。我先是在 mac 使用虚拟机,安装 win 环境来使用,但是我分别使用了 VMware 和 parallels desktop ,keil…

机器学习笔记(4)—逻辑回归(Logistic Regression)

文章目录 逻辑回归&#xff08;Logistic Regression&#xff09;分类问题假说表示判定边界代价函数简化的成本函数和梯度下降多类别分类&#xff1a;一对多 逻辑回归&#xff08;Logistic Regression&#xff09; 分类问题 分类问题中&#xff0c;我们要预测的变量 y y y是一…

论文阅读笔记——Rethinking Pointer Reasoning in Symbolic Execution

文章目录 前言Rethinking Pointer Reasoning in Symbolic Execution12.1、基本情况概述12.2、摘要12.3、引言12.4、方法12.4.1、基本版本12.4.1.1、内存加载和存储12.4.1.2、状态合并 12.4.2、改进12.4.2.1、地址范围选择12.4.2.2、内存清理12.4.2.3、符号化的未初始化内存12.4…

RelayAttention:让大型语言模型更高效地处理长提示符

一、前言 虽然大型语言模型 (LLM) 近年来取得了非常显著的进展&#xff0c;也在各种自然语言处理任务中展现出强大的能力。然而&#xff0c;LLM 的在实际的应用落地层面也面临着一些实际挑战&#xff0c;其中之一就是效率和成本问题&#xff0c;导致了在垂直行业实际落地的应用…

网际协议 - IP

文章目录 目录 文章目录 前言 1 . 网际协议IP 1.1 网络层和数据链路层的关系 2. IP基础知识 2.1 什么是IP地址? 2.2 路由控制 3. IP地址基础知识 3.1 IP地址定义 3.2 IP地址组成 3.3 IP地址分类 3.4 子网掩码 IP地址分类导致浪费? 子网与子网掩码 3.5 CIDR与…

笔记本如何调节亮度?笔记本亮度调节方法

对于经常长时间面对笔记本电脑的小伙伴们来说&#xff0c;屏幕亮度过暗或者过亮&#xff0c;都会对眼睛造成伤害。那么&#xff0c;我们如何调节笔记本亮度至适中呢?下面为大家介绍3种简单的调节屏幕亮度的方法&#xff0c;一起来看看吧! 笔记本亮度调节方法一&#xff1a; 1、…

【MySQL】4.MySQL日志管理与数据库的备份和恢复

备份的目的只要是为了灾难恢复&#xff0c;备份还可以测试应用&#xff0c;回滚数据&#xff0c;修改和查询历史数据&#xff0c;审计等 日志在备份、恢复中起着重要作用 一、数据库备份的重要性 在生产环境中&#xff0c;数据的安全性至关重要 任何数据丢失都可能产生严重的…

关系型数据库mysql(7)sql高级语句

目录 一.MySQL常用查询 1.按关键字&#xff08;字段&#xff09;进行升降排序 按分数排序 &#xff08;默认为升序&#xff09; 按分数升序显示 按分数降序显示 根据条件进行排序&#xff08;加上where&#xff09; 根据多个字段进行排序 ​编辑 2.用或&#xff08;or&…

centos 7 安装磐维(PanWeiDB)数据库(单机)

前置环境准备 文件系统环境要求 文件系统环境所要求的扇区必须为512bytes&#xff0c;查看方法如下&#xff1a; [rootdevops-core-highapp3-b-32 ~]#df -h /apps/ [rootdevops-core-highapp3-b-32 ~]#ll /dev/mapper/vg--docker-lvapp [rootdevops-core-highapp3-b-32 ~]#f…

Apache ActiveMQ OpenWire 协议反序列化命令执行漏洞分析 CVE-2023-46604

Apache ActiveMQ 是美国阿帕奇&#xff08;Apache&#xff09;软件基金会所研发的一套开源的消息中间件&#xff0c;它支持Java消息服务、集群、Spring Framework等。 OpenWire协议在ActiveMQ中被用于多语言客户端与服务端通信。在Apache ActiveMQ 5.18.2版本及以前&#xff0…

小程序富文本图片宽度自适应

解决这个问题 创建一个util.js文件,图片的最大宽度设置为100%就行了 function formatRichText(html) {let newContent html.replace(/\<img/gi, <img style"max-width:100%;height:auto;display:block;");return newContent; }module.exports {formatRichT…

2024-03-26 Android8.1 px30 WI-FI 模块rtl8821cu调试记录

一、kernel 驱动&#xff0c;我这里使用v5.8.1.2_35530.20191025_COEX20191014-4141这个版本&#xff0c;下载这个版本的驱动可以参考下面的文章。 2021-04-12 RK3288 Android7.1 USB wifi bluetooth 模块RTL8821CU 调试记录_rk平台rtl8821cu蓝牙调试-CSDN博客 二、Makefile文…

基于nodejs+vue考试信息报名系统python-flask-django-php

本文拟采用nodejs技术和express 搭建系统框架&#xff0c;后台使用MySQL数据库进行信息管理&#xff0c;设计开发的考试信息报名系统。通过调研和分析&#xff0c;系统拥有管理员、学生和教师三个角色&#xff0c;主要具备登录注册、个人信息修改、对系统首页、个人中心、学生管…

在项目中数据库如何优化?【MySQL主从复制(创建一个从节点复制备份数据)】【数据库读写分离ShardingJDBC(主库写,从库读)】

MySQL主从复制 MySQL主从复制介绍MySQL复制过程分成三步&#xff1a;1). MySQL master 将数据变更写入二进制日志( binary log)2). slave将master的binary log拷贝到它的中继日志&#xff08;relay log&#xff09;3). slave重做中继日志中的事件&#xff0c;将数据变更反映它自…

JS等比压缩图片方法

AI给出来的答案&#xff0c;AI真的能改变世界&#xff0c;以后程序员这个职业真的有可能不存在了。 function compressImage(image, callback) {// 创建一个 canvas 元素const canvas document.createElement(canvas);canvas.width 48;canvas.height 48;// 获取 canvas 的绘…

【学海拾贝】| 关于Python的 PEP 484规则了解:类型提示,函数注解

在实际的工厂在实际的工程代码的开发中&#xff0c;常常可以碰到这种情况 上网查了之后发现这是PEP484规则~ 文章目录 1 Type Hints for Variables&#xff08;变量在这里插入图片描述2 Function Annotations&#xff08;函数注解&#xff09;3 Type Checking Tools&#xff08…

【比特币】比特币的奥秘、禁令的深层逻辑与风云变幻

导语&#xff1a; 比特币(Bitcoin)&#xff0c;这个充满神秘色彩的数字货币&#xff0c;自诞生以来便成为各界瞩目的焦点。它背后所蕴含的Mining机制、禁令背后的深层逻辑以及市场的风云变幻&#xff0c;都让人欲罢不能。今天&#xff0c;我们将深入挖掘比特币的每一个角落&…