# cms
**Repository Path**: seamanx/cms
## Basic Information
- **Project Name**: cms
- **Description**: FastCMS,更好的CMS,该项目是TpMeCMS升级版本
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-01-04
- **Last Updated**: 2025-01-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
该CMS是一款基于FastAdmin框架(version:1.5.0.20240328)开发的,FastAdmin基于ThinkPHP5+Bootstrap开发的框架。
## 界面截图

## 环境要求
操作系统:Linux、Windows、Mac OS
Web 服务器:Apache、Nginx
PHP 版本:>= 7.2 且 <= 7.4 (推荐 PHP7.4 版本)
MySQL 版本:>= 5.6 且 <= 8.0 (需支持 innodb 引擎)
## 下载方法
下载默认直接:
`git clone https://gitee.com/xiaohe4966/cms.git`
下载某个分支:
`git clone -b 分支名 https://gitee.com/xiaohe4966/cms.git`
## 安装方法
修改网站运行目录为public
修改伪静态!!!修改伪静态!!修改伪静态!
正常Nginx伪静态
```
location ~* (runtime|application)/{
return 403;
}
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}
```
文件在application/database.php里面修改 //或者在根目录.env里面更改(没有此文件请忽略)
然后安装即可
安装完成,就可以访问了后台地址 域名/h.php
后台地址在public/h.php 可以自行修改文件名即可
cms首页: 打开域名会跳转到/cms/index/index,如果不需要可以自行注释跳转 application/index/controller/Index.php
## 使用流程
安装好框架后
只需要复制表修改表字段(只需要字段)
一键生成后台菜单命令(增删改查)
添加/修改栏目选择表即可(如果数据库表名未修改不用修改)
## 注意事项及说明
* 数据库设计要求
* 字段命名要求https://doc.fastadmin.net/doc/database.html
* 使用后台的《在线命令管理》或者用命令php think crud -t 表名生成CRUD时会自动生成对应的HTML元素和组件
* 数据库说明
* xx代表表前缀
* xx_cate CMS栏目的栏目,不能删除(可以添加其他通用字段
* xx_page CMS的单页内容信息,不能删除(可以添加其他通用字段
* xx_user 在原Fastadmin的user表
* xx_admin 登陆后台的账号
* xx_command Fastadmin的一键命令插件记录
* xx_config 网站常规配置就在这里面,在后台可直接添加
* xx_news 列表页的内容,通用都可以复制此表改名改备注即可(列表页面的 deletetime 字段不要删除,用户在后台删除后,可以进入回收站,但前台会看不见,以防误操作)
## 在线演示
http://cms.he4966.cn/cms/index/index
## 配置
微信配置在 后台常规管理->系统配置->微信->设置小程序公众号等资料

调试模式开启application/config.php
// 应用调试模式
'app_debug' => Env::get('app.debug', 1), //或者在根目录.env里面更改(没有此文件请忽略)
数据库配置修改application/database.php里面修改 //或者在根目录.env里面更改(没有此文件请忽略)
## 使用标签
thinkphp5.0 手册(https://www.kancloud.cn/manual/thinkphp5/125005)
### 后台参数标签
```html
{$site.后台添加的字段}
{$site.name} //网站名称
{$site.keywords} //网站关键字
{$site.description} //网站描述
{$site.beian} //网站备案号
{$site.logo} //网站logo
...可以自己添加
```
### 获取config.php里面的配置
```html
{$Think.config.fastadmin.version}
```
### 获取栏目名
```html
{tp:cate id="38" type="name"}
```
### 获取栏目地址链接
```html
{tp:cate id="38" type="url"}
```
//这个url在application/common.php getCateUrl方法里面(可自行修改封装
### 获取栏目某个字段
```html
{tp:cate id="38" type="字段"}
```
### 获取栏目里面的 列表数据
```html
{volist name="nav" id="v"}
{if $v.id==67}
{volist name="$v.childlist" id="v2"}

{$v2.name}
{tp:list name="p" id="$v2['id']">}
{if $v2.id==$p.cate_id}
- {$p.title}
{/if}
{/tp:list}
{/volist}
{/if}
{/volist}
```
### 🗂️获取列表
参数:id(栏目id),name(变量名 默认$list),pagesize(一页数量),where(条件),limit(每页数量 默认0),order(排序 默认'weigh DESC,id DESC')
```html
{tp:list name="list" id="1" limit="3"}
//{$list.这个栏目表里面的字段}
{$list.title}
{$list.image}
{$list.url}//这个url在application/common.php 里面的getShowUrl方法里面(可自行修改封装
{/tp:list}
```
```html
🌹只能在列表页面使用 列表页字带list变量
{volist name="list" id="v"}
{$v.title}
{/volist}
```
#### 🗂️获取列表加条件 where里面是条件
```html
{tp:list id="61" limit="2" name="v" where="FIND_IN_SET('1', hotdata)"}
{/tp:list}
```
#### 🗂️获取列表加条件 FIND_IN_SET多个
```html
{tp:list id="61" limit="2" name="v" where="FIND_IN_SET('1', hotdata) OR FIND_IN_SET('2', hotdata)"}
{/tp:list}
```
#### 🗂️获取新增列表数据示例
```html
{tp:list name="v" id="67" limit="10" where="FIND_IN_SET('1', hotdata) AND cate_id=68"}
{$v.title}
{/tp:list}
```
### 循环多级栏目 及 当前栏目高亮
```html
{volist name="nav" id="v"}
{if $v.childlist}
{$v.name}
{volist name="$v.childlist" id="v2"}
{if $v2.childlist}
- {$v2.name}
{volist name="$v2.childlist" id="v3"}
- {$v3.name}
{/volist}
{else /}
- {$v2.name}
{/if}
{/volist}
{else /}
{$v.name}
{/if}
{/volist}
```
这段代码通过循环遍历和条件判断,动态生成了多级导航菜单。使用了volist标签来循环遍历导航数据。其中name="nav"表示遍历的变量名为nav(导航栏目),id="v"表示将遍历的每个元素赋值给变量v。
在遍历过程中,使用if标签判断当前导航是否有子菜单(childlist),如果有,则将其渲染为下拉菜单。下拉菜单中同样使用了volist标签来遍历子菜单数据。子菜单同样存在是否有子菜单的情况,通过嵌套使用volist标签来实现。
如果导航没有子菜单,则直接渲染为一个普通的导航项。在导航项中,通过if标签判断当前导航项是否为当前选中状态,如果是,则添加class="current"。
### 列表页分页示例
#### 上一页
```html
{if $page_data['prev_page']}{/if}
```
#### 循环中间页码并高量当前页
```html
{volist name="$page_data['list']" id="v"}
{$v.num}
{/volist}
```
#### 下一页
```html
{if $page_data['next_page']}{/if}
```
### 详情页面
#### 上一篇:
```html
{if $content.prev}上一篇:{$content.prev.title}
{/if}
```
#### 下一篇:
```html
{if $content.next}下一篇:{$content.next.title}
{/if}
```
### 非单页面获取单页数据:
```html
{tp:page id="52" type="content"}
```
### 不放a标签点击跳转页面(确定✅页面里有引用过jquery)
```js
```
### 友情链接
```html
{tp:link limit="20"}
{$key+1}.{$link.title}
{/tp:link}
{tp:link name="v"}
{$v.title}
{/tp:link}
```
### 其他说明
```html
留言地址: /cms/gbook/add 前段页面form表单提交地址可以返回
{if $site.gbook_captcha_switch}
{/if}
获取当前位置信息
当前位置:首页
{tp:position name="v" cate_id="$cate['id']"}
> {$v.name}
{/tp:position}
🌹除了首页都有$cate变量(可直接使用)
🌹详情页和单页有$content变量(可直接使用)
🌹搜索地址:/路由?search=搜索的内容 自动搜索该栏目下的内容
示例/news?search=小和
搜索代码application/cms/controller/Cms.php get_cate_art_list2方法
if(isset($params['search']) && !empty($params['search'])){
$where['title|content|seotitle|keywords|description|memo'] = ['like',"%".$params['search']."%"];
unset($where['cate_id']);//如果搜索当前栏目下的列表就注释该代码
}
```
```html
data-area='["80%", "80%"]' 按钮弹窗大小定义
示例
{:__('Add')}
```
```
自己添加定时检查链接是否有效
域名+/api/cms/link_check 检测链接是否有效
```
## 版本更新日志
2024-03-01 开始立项
2024-05-13 继续开始开发
2024-05-16 完成基本功能
2024-05-17 添加违禁词验证(后台内容可强制添加/编辑 有设置开关,函数bans(违禁词)返回包含的违禁词)
2024-05-22 添加后台超级管理员配置 可隐藏非超级管理员的组或者某个配置字段
2024-05-30 添加后台配置字段crud_copy_switch 可在线命令生成 复制数据按钮
2024-11-28 添加批量移动/复制/编辑字段,根据表含有cate_id自动生成 (方法在👉🏻app\common\controller\Backend)
2024-11-29 添加前台网站生成sitemap功能 /api/cms/update_sitemap
## 代码说明
## 文件说明
* 标签文件定义
application/common/library/Tp.php
* 方法定义
application/common.php
* 栏目选择 把空格实体替换成空字符
text = text.replace(/ /g," ");
文件路径
public/assets/libs/fastadmin-selectpage/selectpage.js
## 界面截图
https://he4966.cn/index/product/10.html?cate=9




## 问题反馈
在使用中有任何问题,请加QQ群153073132 请备注CMS
## 特别鸣谢
FastAdmin
## 版权信息
CMS遵循Apache2开源协议发布,并提供免费使用。
本项目包含的第三方源码和二进制文件之版权信息另行标注。