# XiaoCMS 二次开发
**Repository Path**: inkScholar/xiao_cms
## Basic Information
- **Project Name**: XiaoCMS 二次开发
- **Description**: No description available
- **Primary Language**: PHP
- **License**: Not specified
- **Default Branch**: Readme
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2022-03-08
- **Last Updated**: 2024-08-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## XiaoCMS v2
版本更新 最初记录版本
1. 栏目 - 单页模板 - 单页面内容(隐藏)
2. 大部分单选按钮可以通过跟随文字进行选择
## XiaoCMS v2.1
1. 编辑器 - 在线管理 - 增加单个文件删除功能
- 更换文件包 v2.1.1 编辑器_多图_删除单个图片_core_img_ueditor_dialogs_image.rar
- 文件所在路径 /core/img/ueditor/image/
2. 确认按钮绑定键盘事件
- 增加键盘事件,回车与空格立即跳转
- 来源 /core/controller/Base.class.php -> public function show_message(){}
- 改动文件 /core/img/message/xiaocms_msg.tpl.php
3. XiaoCMS v2.1.1
编辑器百度地图可以使用,对应文件已修改,添加地图设置宽高
- 后台编辑器 链接后面加 &width=100%&height=500px
- 来源 /core/img/ueditor/dialogs/map/show.html
- 修改文件内容
```html
```
4. XiaoCMS v2.1.2
- 地图功能正在完善
- 使用最小高度控制后台大小
- width:100%;height:100%;min-heihgt:200px
```html
```
- 增加一个新的地图文件,还未开发
## XiaoCMS v2.2
1. 页面加载后视频显示元数据 video - preload
- 来源 /core/img/ueditor/ueditor.all.min.js
- 搜索 preload="none"
- 替换 preload="metadata"
2. 自动跳转页面 点这返回列表 增加键盘事件 Esc
- 改动文件 /core/img/message/xiaocms_msg.tpl.php
3. 去除 区块 多文件上传 去重处理
```php
// /@admin/controller/block.php
// public function cacheAction()
// $d[$value] = $t['content']['filename'][$key];
array_push($d, array($value, $t['content']['filename'][$key]));
```
```php
// /core/library/class.php
// $replace_array
/* "_blocklist(\\1); if (is_array(\$return)) foreach (\$return as \$img=>\$name) { ?>", */
"_blocklist(\\1); if (is_array(\$return)) foreach (\$return as \$value) { \$img = \$value[0]; \$name = \$value[1]; ?>",
```
## XiaoCMS v3.0
1. 重置搜索功能,增加自定义字段,增加多段内容搜索
- 缺陷:英文逗号没有处理,被分成多段搜索词
```php
// /core/xiaocms.php
xiaocms::load_file(CORE_PATH . 'library' . DS . 'class.php');
xiaocms::load_file(CORE_PATH . 'library' . DS . 'class2.php'); // ** 增加 ** //
xiaocms::load_file(CORE_PATH . 'version.php');
```
```php
// /core/controller/Base.class.php
$this->db = xiaocms::load_class('Model');
$this->db2 = xiaocms::load_class('inkModel'); // ** 增加 ** //
```
```php
// /core/controller/index.php
/**
* 内容搜索 二次开发
* ?a=s 初始化 | & 分隔 | 英文逗号 , 多个内容 - t / n / ca / m
* @param
* f fileName 文件名称 | p postfix 文件名后缀
* t text 搜索文本 | n findName 查询字段
* ca catid 查询栏目 | m modelid 查询模型 | all 搜索自定义字段
* page 当前页码 | pagesize 每页数量 -- 分页
* @return
* text 搜索内容
* page 当前页码 | pagesize 每页数量
* data 数据 | total 总共数量 | num 当前页数量
* @example
* 默认值 -- f search | p html | ?a=s
* ?a=s&all&t=1,2&n=title,description&ca=1,2&m=1,2
* ?a=s&f=s1&p=htm&page=10&pagesize=10
* bug缺陷 -- 英文逗号没有处理,被分成多段搜索词
*/
public function sAction() { } // ** 增加方法 ** //
```
```php
// /core/library/class2.php -- 新建文件
```
2. 添加内容页面 推荐 文字与单选按钮绑定
## XiaoCMS v3.1
1. 同栏目多组图删除bug修改
- 缺陷:栏目 - 编辑 - 多个组图,点击第二个组图的删除会先删除第一个组图对应的内容
- 原理:组图对应 li 的 id 一致,删除链接不包含组图的字段名称
```php
// /core/library/field.class.php - 435
// $str .= '';
$str .= '';
// /core/library/field.class.php - 438
// $str .= '删除';
$str .= '删除';
```
```javascript
// /core/img/js/xiaocms.js - var c
// var c='';
var c='';
// /core/img/js/xiaocms.js
// c+="删除";
c+="删除";
// /core/img/js/xiaocms.js
// html+="删除";
html+="删除";
// /core/img/js/xiaocms.js - 完整替换
function omnipotent(id,linkurl,title,close_type,w,h){if(!w){w=620}if(!h){h=420}$.sobox.pop({type:"iframe",width:w,height:h,title:title,showMask:false,iframe:linkurl})}function remove_relation(sid,id,name){var relation_ids=$("#"+name).val();if(relation_ids!=""){$("#"+sid).remove();var r_arr=relation_ids.split(",");var newrelation_ids="";$.each(r_arr,function(i,n){if(n!=id){if(i==0){newrelation_ids=n}else{newrelation_ids=newrelation_ids+","+n}}});$("#"+name).val(newrelation_ids)}}function showImg(_this){if(!_this.value){return false}$("body").append("");$("#"+_this.id).mousemove(function(e){$("#Previewthumb").css({"top":(e.pageY+5)+"px","left":(e.pageX+2)+"px"})})}function hideImg(_this){$("#Previewthumb").remove()}function confirmurl(url,message){if(confirm(message)){redirect(url)}}function redirect(url){location.href=url}function get_kw(){$.post("../index.php?c=api&a=ajaxkw&id="+Math.random(),{data:$("#title").val()},function(data){if(data&&$("#keywords").val()==""){$("#keywords").val(data)}})}function removediv(fileid){$("#files_"+fileid).remove()}function add_null_file(obj){var id=parseInt(Math.random()*1000);var c='';c+='';c+='';c+="删除";$("#"+obj+"-sort-items").append(c)}function htmlList(obj,data,file,p){var id=parseInt(Math.random()*1000);var html='';html+='";html+='';html+="删除";$("#"+obj+"-sort-items").append(html)}function setC(){if($("#deletec").prop("checked")==true){$(".deletec").prop("checked",true)}else{$(".deletec").prop("checked",false)}}function confirm_delete(){$("#list_form").val("del");if(confirm("确认删除吗?")){$("#myform").submit()}};
```
## XiaoCMS v3.2
1. 可调用表单内容
- 修改文件 /core/library/class.php
- 修改文件 /core/library/class2.php
- 前置文件 /core/xiaocms.php - 24 行 引入 class2.php
```php
# /core/xiaocms.php - 24
xiaocms::load_file(CORE_PATH . 'library' . DS . 'class2.php');
```
```php
# /core/library/class.php
# 函数内容 protected function handle_view_file($view_content){}
# 变量内容 $regex_array 增加
'#{xiao:form\s+(.+?)\s?}#i',
'#{\/xiao:form}#i',
# 变量内容 $replace_array 增加
"_form(\"\\1\"); if(is_array(\$return)) foreach(\$return as \$key=>\$xiao) { ?>",
""
# 增加函数 _form
protected function _form($param)
{
$param = str_replace('desc', 'desc=1', $param);
$param = str_replace('desc=1=', 'desc=', $param);
$_param = explode(' ', $param);
$param = array();
foreach ($_param as $p) {
$mark = strpos($p, '=');
if ($p && $mark !== false) {
$var = substr($p, 0, $mark);
$val = substr($p, $mark + 1);
if (isset($var) && $var) $param[$var] = $val;
}
}
$i = 1;
$form = xiaocms::load_class('inkModel');
$data = $form->sqlForm($param);
return $data;
}
```
```php
# /core/library/class2.php
# 类 class inkModel extends Model
# 增加函数 public function sqlForm($param)
public function sqlForm($param) {
if(!$param['modelid']) exit('Modelid is not exits!');
$tableNameResult = $this->query("select tablename from ".$this->_prefix."model where modelid=".$param['modelid'].";")->fetchAll(PDO::FETCH_ASSOC);
$tableName = $this->_prefix.$tableNameResult[0]['tablename'];
$findResult = $this->query("select field from ".$this->_prefix."model_field where modelid=".$param['modelid'].";")->fetchAll(PDO::FETCH_ASSOC);
$find = array();
foreach($findResult as $value) { array_push($find, $value['field']); }
$sql = "select * from ".$tableName." where 1=1";
if($param['status']) {
$sql .= " and status in (".$param['status'].")";
} else {
$sql .= " and status=1";
}
foreach($find as $value) {
if($param[$value]) $sql .= " and ".$value." like '%".$param[$value]."%'";
}
if($param['order']){
$sql .= " order by ".$param['order'];
if($param['desc']) $sql .= " DESC";
}
if($param['num']) $sql .= " limit ".$param['num'];
$sql .= ";";
$data = $this->query($sql)->fetchAll(PDO::FETCH_ASSOC);
return $data;
}
```
```html
{xiao:form modelid=1}
{xiao:php print_r($xiao);}
{xiao:$xiao[name]}
{/xiao:form}
* 参数说明
modelid=1 必须参数 查询表单 ID=1
$xiao[name] 自定义字段 name 的值
status=0,1 审核状态 1 正常 0 未审核 默认显示正常字段
num=1 显示 1 条结果
name=2 自定义字段 name 中存在内容 2
order=id 按照字段 id 进行排序
order=name desc 按照自定义字段 name 倒序排列
```
## XiaoCMS v3.3
1. 区块编辑器增加视频
2. 改动文件
```shell
/@admin/controller/block.php
/@admin/img/xiaocms.css
/@admin/template/block_add.tpl.php
/core/library/field.class.php
```
3. 增加功能
1) 区块可上传视频, 限制文件格式 mp4,flv, 限制大小 100MB
2) 默认值与文件视频来回切换
3) 视频的几个参数: 自动播放 | 播放控件 | 循环播放 | 宽度100%
4) 纯文本或者视频形式
5) 在线查看视频状况
## XiaoCMS v3.4
1. 可调用字段属性 字段-编辑-属性
- 修改文件 /core/library/class.php
- 修改文件 /core/library/class2.php
```php
# /core/library/class.php - 89
protected function handle_view_file($view_content) {
$regex_array # 92 变量末尾增加内容
$replace_array # 118 变量末尾增加内容
}
# 188 增加私有函数
protected function _field($param) {}
# /core/library/class2.php - 215 增加公共函数
public function sqlField($param) {}
```
```html
{xiao:field modelid=0}
{xiao:php print_r($xiao);}
{xiao:$xiao[name]}
{/xiao:field}
* 参数说明
modelid=0 必须参数 查询模型 ID -- 0 栏目扩展 | n 内容模型 + 表单模型
$xiao[name] 字段属性 name 对应 find 内容
系统属性 -- modelid | field | name | isshow | pattern | tips | errortips | formtype | disabled
setting 属性 -- size | width | height | content | items | preview | type | defaultvalue
field 字段名称(栏目扩展字段名称 + 模型 content + 模型自定义字段名称)
可联合查询 eg. field=content,img
isshow (未知)
formtype 字段类型
input 单行文本 | textarea 多行文本 | editor 编辑器 | radio 单选按钮 | 复选框 | 下拉选择框 | file 单文件/图片上传 | files 多文件/图片上传 | 日期时间 | 相关内容字段 | 高级自定义字段
可联合查询 eg. formtype=input,textarea
disabled 禁用 -- 没有值 all | 0 禁用 | 1 启用
num=1 显示 1 条结果
order=modelid desc 按照自定义属性 modelid 倒序排列
find 筛选 -- 只显示筛选的内容 | 可联合查询 多值为数组形式 eg. find=field,name
modelid | field | name 字段别名 | isshow | pattern 数据校验 | tips 输入提示 | errortips 错误信息 | formtype | disabled | size 单行文本 输入框长度 | width 多行文本/编辑器 输入框宽度 | height 多行文本/编辑器 输入框高度| content 单选按钮/复选框/下拉选择框 选项列表(已处理成数组) | items | preview | type 单文件/图片上传/多文件/图片上传 允许格式| defaultvalue 默认值
setting -- 没有这个值 all | 0 系统属性 | 1 setting 属性
list -- 若 modelid 为一个值,则展示其所有内容,以字段名称为键,内容为值
```
## XiaoCMS v3.4.1
1. 修改安装数据库 用户名 admin 密码 admin
## XiaoCMS v3.4.2
- 修改 /core/library/class.php
```php
protected function handle_view_file($view_content){ // 89行
$regex_array // 添加三个内容 -- show / show.html / html
$replace_array // 添加三个内容 -- show / show.html / html
}
// 1. {show:array($xiao[himg], $xiao[img]), ...}
// 若 $xiao[himg] 为 null , 则输出 '', 若有值, 则打印, 若为空, 则判断下一位 $xiao[img]
// 2. {show.html:array($xiao[hcontent], $xiao[content], ...)}
// show 的翻版, 打印 html 格式内容
// 3. {html:$xiao[content]}
// 打印 $xiao[content] 的 html 形式, 等同于
// {xiao:function.htmlspecialchars_decode($xiao[content])}
```
## XiaoCMS v3.4.2
- 完善搜索bug
```php
# 代码 $getText = $this->getKeyInArray($text, $array, true);
# 改善 $getText = $this->getKeyInArray($value, $array, true);
```
## Gitee
[解决码云出现git@gitee.com: Permission denied (publickey)](https://blog.csdn.net/dyy_csdn/article/details/81508809)
[git 从远程拉取代码、推代码的步骤](https://www.cnblogs.com/l199616j/p/10103246.html)
[博客系列9-绑定本地仓库到Gitee](https://zhuanlan.zhihu.com/p/362654741)
## Wiki
[语雀操作文档](https://www.yuque.com/docs/share/47a943b3-f9c7-45dc-b1a9-5b0045f0d973)
## 测试地址
[XiaoCMS](http://xiaocms.inkscholar.cn/@admin/)
账密 admin
## 有待开发
1. 搜索 - 英文逗号 , 的处理
2. 搜索 - sql 语句
3. 搜索 - 1 && 2
4. 搜索 - {xiao:search}{/xiao:search}