当前位置: 首页 > news >正文

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)

  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/

相关文章:

PHPCMS v9城市分站插件

PHPCMS自带的有多站点功能&#xff0c;但是用过的朋友都知道&#xff0c;自带的多站点功能有很多的不方便之处&#xff0c;例如站点栏目没法公用&#xff0c;每个站点都需要创建模型、每个站点都需要单独添加内容&#xff0c;还有站点必须静态化。如果你内容很多这些功能当然无…...

学习几个地图组件(基于react)

去年开发时用的公司封装的地图组件&#xff0c;挺方便的&#xff0c;但是拓展性不强&#xff0c;所以看看有哪些优秀的开源地图组件吧 1、React Leaflet 介绍&#xff1a;开源的JavaScript库&#xff0c;用于在web上制作交互式地图&#xff0c;允许你使用React组件的方式在应…...

【测试开发学习历程】计算机编程语言

前言&#xff1a; 学习完数据库&#xff0c;我们便要进入到编程语言的内容当中了。 这里先对编程语言写出大致的分类&#xff0c; 在这之后&#xff0c;我们会以Python为重点&#xff0c; 开始测试开发为重点的编程语言学习。 目录 1 计算机编程语言的发展 2 语言的分类…...

动态内存管理-传值调用错题解析

首先我们来看这个错误代码 首先我们看代码逻辑&#xff0c;首先main函数调用test&#xff0c;test接收的是void类型&#xff0c;设置一个指针变量&#xff0c;指向null&#xff0c;传递给get函数&#xff0c;也就是传递一个空指针给getmemory函数&#xff0c;这个函数接收了&a…...

Java特性之设计模式【装饰器模式】

一、装饰器模式 概述 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有的类的一个包装 装饰器模式通过将对象包装在装饰器类中&#xff0c;以…...

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&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…...

lora-scripts 训练IP形象

CodeWithGPU | 能复现才是好算法CodeWithGPU | GitHub AI算法复现社区&#xff0c;能复现才是好算法https://www.codewithgpu.com/i/Akegarasu/lora-scripts/lora-trainstable-diffusion打造自己的lora模型&#xff08;使用lora-scripts&#xff09;-CSDN博客文章浏览阅读1.1k次…...

Acwing 503. 借教室

Problem: 503. 借教室 文章目录 思路解题方法复杂度Code 思路 这是一个二分查找问题。我们需要找到最大的借教室数量&#xff0c;使得每个教室的借用时间不超过其可用时间。我们可以通过二分查找来找到这个最大的借教室数量。 解题方法 我们首先对所有的借教室请求按照结束时间…...

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.1-3.5

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第三周&#xff1a;浅层神经网络(Shallow neural networks)3.1 神经网络概述&#xff08;Neural Network Overview&#xff09;3.2 神经网络的表示&#xff08;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&#xff1a; 一站式开发者工具箱&#xff0c;打造高效创意编程体验&#xff0c;让代码生活更加得心应手&#xff01;—— 精选真开源&#xff0c;释放新价值。 概览 不知道大家是否在windows系统中使用过PowerToys&#xff1f;这是微软研发的一项免费实用的系统工具套…...

【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#编程语言的过程中&#xff0c;了解程序的基本结构是非常重要的。C#程序由多个组成部分构成&#xff0c;每个部分都有其特定的功能和作用。下面…...

linux 清理空间

1. 根目录下执行命令&#xff0c;查看每个目录下文件大小总和 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 前言 在进行嵌入式开发的过程中&#xff0c;我们经常会见到typedef这个关键字&#xff0c;这个关键字的作用是给现有的类型取别名&#xff0c;在实际使用过程中往往是将一个复杂的类型名取一个简单的名字&#xff0c;便于我们的使用。就像我们给很熟的人取外号一样&#xff…...

今天聊聊Docker

在数字化时代&#xff0c;软件应用的开发和部署变得越来越复杂。环境配置、依赖管理、版本控制等问题给开发者带来了不小的挑战。而Docker作为一种容器化技术&#xff0c;正以其独特的优势成为解决这些问题的利器。本文将介绍Docker的基本概念、优势以及应用场景&#xff0c;帮…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...