PHPCMS v9城市分站插件
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/
相关文章:
PHPCMS v9城市分站插件
PHPCMS自带的有多站点功能,但是用过的朋友都知道,自带的多站点功能有很多的不方便之处,例如站点栏目没法公用,每个站点都需要创建模型、每个站点都需要单独添加内容,还有站点必须静态化。如果你内容很多这些功能当然无…...
学习几个地图组件(基于react)
去年开发时用的公司封装的地图组件,挺方便的,但是拓展性不强,所以看看有哪些优秀的开源地图组件吧 1、React Leaflet 介绍:开源的JavaScript库,用于在web上制作交互式地图,允许你使用React组件的方式在应…...
【测试开发学习历程】计算机编程语言
前言: 学习完数据库,我们便要进入到编程语言的内容当中了。 这里先对编程语言写出大致的分类, 在这之后,我们会以Python为重点, 开始测试开发为重点的编程语言学习。 目录 1 计算机编程语言的发展 2 语言的分类…...
动态内存管理-传值调用错题解析
首先我们来看这个错误代码 首先我们看代码逻辑,首先main函数调用test,test接收的是void类型,设置一个指针变量,指向null,传递给get函数,也就是传递一个空指针给getmemory函数,这个函数接收了&a…...
Java特性之设计模式【装饰器模式】
一、装饰器模式 概述 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装 装饰器模式通过将对象包装在装饰器类中,以…...
Leetcode算法题笔记(2)
目录 图论51. 岛屿数量解法一 52. 腐烂的橘子解法一 53. 课程表解法一 54. 实现 Trie (前缀树)解法一 回溯55. 全排列解法一 56. 子集解法一解法二 57. 电话号码的字母组合解法一 58. 组合总和解法一解法二 59. 括号生成解法一解法二 60. 单词搜索解法一 61. 分割回文串解法一 …...
二手车交易网站|基于JSP技术+ Mysql+Java+ B/S结构的二手车交易网站设计与实现(可运行源码+数据库+设计文档)
推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…...
lora-scripts 训练IP形象
CodeWithGPU | 能复现才是好算法CodeWithGPU | GitHub AI算法复现社区,能复现才是好算法https://www.codewithgpu.com/i/Akegarasu/lora-scripts/lora-trainstable-diffusion打造自己的lora模型(使用lora-scripts)-CSDN博客文章浏览阅读1.1k次…...
Acwing 503. 借教室
Problem: 503. 借教室 文章目录 思路解题方法复杂度Code 思路 这是一个二分查找问题。我们需要找到最大的借教室数量,使得每个教室的借用时间不超过其可用时间。我们可以通过二分查找来找到这个最大的借教室数量。 解题方法 我们首先对所有的借教室请求按照结束时间…...
吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.1-3.5
目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第三周:浅层神经网络(Shallow neural networks)3.1 神经网络概述(Neural Network Overview)3.2 神经网络的表示(Neural Network Representation…...
Linux设备驱动开发 - 三色LED呼吸灯分析
By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 展锐UIS7885呼吸灯介绍呼吸灯调试方法亮蓝灯亮红灯亮绿灯展锐UIS7885呼吸灯DTS配置ump9620 PMIC驱动ump9620中的LED呼吸灯驱动LED的tr…...
开发者的瑞士军刀:DevToys
DevToys: 一站式开发者工具箱,打造高效创意编程体验,让代码生活更加得心应手!—— 精选真开源,释放新价值。 概览 不知道大家是否在windows系统中使用过PowerToys?这是微软研发的一项免费实用的系统工具套…...
【vue3.0】实现导出的PDF文件内容是红头文件格式
效果图: 编写文件里面的主要内容 <main><div id"report-box"><p>线索描述</p><p class"label"><span>线索发现时间:</span> <span>{{ detailInfoVal?.problem.createdDate }}</span></p><…...
【CSP试题回顾】202012-2-期末预测之最佳阈值(优化)
CSP-202012-2-期末预测之最佳阈值 关键点 1.map的遍历方式 map<int, int>occ0Num, occ1Num; for (auto it thetaSet.begin(); it ! thetaSet.end(); it) {num num occ0Num[*it] - occ1Num[*it];auto nextIt next(it); // 获取下一个迭代器if (num > maxNum &a…...
docker学习笔记 三-----docker安装部署
我使用的部署环境是centos 7.9 1、安装依赖工具 yum install -y yum-utils device-mapper-persistent-data lvm2 安装完成如下图 2、添加docker的软件信息源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo url地址为如…...
FastAPI+React全栈开发02 什么是FARM技术栈
Chapter01 Web Development and the FARM Stack 02 What is the FARM stack and how does it fit together? FastAPIReact全栈开发02 什么是FARM技术栈 It is important to understand that stacks aren’t really special, they are just sets of technologies that cover…...
C#程序结构详解
目录 背景: 一、C#程序的基本组成部分 二、C# Hello World示例 三、程序结构解析 四、编译与执行C#程序 五、总结 背景: 在学习C#编程语言的过程中,了解程序的基本结构是非常重要的。C#程序由多个组成部分构成,每个部分都有其特定的功能和作用。下面…...
linux 清理空间
1. 根目录下执行命令,查看每个目录下文件大小总和 rootvm10-88-88-3 /]# du -h --max-depth1 79M ./tmp 123M ./etc 4.0K ./media 4.0K ./srv 104M ./boot 5.3G ./var 0 ./sys 8.6M ./dev 196G ./usr 4.0K ./mnt 285M ./opt…...
C语言:给结构体取别名的4种方法
0 前言 在进行嵌入式开发的过程中,我们经常会见到typedef这个关键字,这个关键字的作用是给现有的类型取别名,在实际使用过程中往往是将一个复杂的类型名取一个简单的名字,便于我们的使用。就像我们给很熟的人取外号一样ÿ…...
今天聊聊Docker
在数字化时代,软件应用的开发和部署变得越来越复杂。环境配置、依赖管理、版本控制等问题给开发者带来了不小的挑战。而Docker作为一种容器化技术,正以其独特的优势成为解决这些问题的利器。本文将介绍Docker的基本概念、优势以及应用场景,帮…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
