EMM 发现很多插件各种动不动覆盖~
所以融合搁置吧! 基于群|卝||主的V2修改版
如果有任何BUG请及时反馈,
本机环境PHP7.0.0 ~ PHP8.4.1,
install.sql 低于mysql8的版本
install8.sqll 高于等于mysql8
git clone https://cnb.cool/nenge/xiunobbs-4.0.4.git
git pull
//往后此为最新版 欢迎提交修改
环境
- 尽管PHP7.0.0 - PHP8.4.1均可运行,但是推荐PHP7.2+
- MySQL情况未知,我的版本的8.0.25,但是群里很多是5.6 5.7老版本,如有报错可以反馈.
cnb图床?
首先在cnb.cool创建仓库,浏览器F12,应用>Cookies 复制'CNBSESSION','csrfkey'
插件限定类
例如插件 xn_abc,对应类文件地址为 plugin/xn_abc/class/xn_abc.php 此方法可以替代原来的全局增加model文件问题,该类文件仍旧可以使用 // hook 让其他插件注入
使用方法
一般来说PHP根本不在乎你塞了多少函数,对性能影响微乎其微,所以不要有焦虑.国外的那些标准反而不推荐all in one(所有文件在一起xiunophp.min.php)
class xn_abc{
public function __construct(){
echo 'OK';
}
public static function app()
{
if (!isset(self::$_app)):
self::$_app = new self;
endif;
return self::$_app;
}
public static function user()
{
return MyDB::t('user')->selectFirst(['uid'=>1]);
}
}
xn_abc::app();
xn_abc::user();
新的查询方式 MyDB::t('表名')
使用此方法的插件将不再向下兼容,操作有一定可扩展性
$db->table['user'] = new class extends \lib\table{
}('bbs_user','uid','xiuno4');
var_export(MyDB::t('user')->selectAll());
内置servicerWoker
默认编辑器
具体查找 view/htm/post.htm
可通过$conf['editor_js'] 进行设置,只能两个值,'ckeditor','tinymce' 其他值被认为不启用.个人认为CKeditor相对tinymce更好!
<?=in_array($conf['editor_js'] ??'ckeditor',['ckeditor','tinymce'])?'import(new URL("'.$conf['view_url'].'js/module/editor-'.($conf['editor_js'] ??'ckeditor').'.js",location)).then(Module=>{new Module.default(jform[0]);$(".attachlist_parent>a").prop("hidden",true);$(".attachlist_parent>fieldset").prop("hidden",true);});':''?>
ckeditor可以去(https://ckeditor.com/ckeditor-5/builder/)定制功能!参考main.js中toolbar,plugins替换`editor-ckeditor.js`中对应参数 的即可!
- 编辑器接口
const {default:MyEditor} = await import(new URL("view/js/module/editor-ckeditor.js",location));
const editor = new MyEditor(jform[0]);
editor.save();
editor.insert(html);
jform.triggerHandler('save');
jform.triggerHandler('insert',HTML);
jform[0].toEvent('insert',HTML);
jform[0].dispatchEvent(new CustomEvent('insert',HTML));
jform[0].dispatchEvent(new CustomEvent('save',''));
jform[0].editor
editor.pid = 1;
上传新接口
attach/upload 只接受image/zip/rar/7z等文件
const input = document.createElement('input');
input.type = 'file';
input.accept = 'image/*';
input.multiple = false;
input.addEventListener('change', async function () {
const data = new FormData;
data.set('file',this.files[0]);
$.ajax({
url: '?attach.htm',
data,
processData: false,
contentType:false,
dataType: 'json',
type: 'POST',
beforeSend(xhr) {
xhr.setRequestHeader('ajax-fetch', '1');
xhr.setRequestHeader('content-action', 'attach/upload');
}
});
});
input.click();
input.remove();
attach/list 查询接口,可选参数pid
const data = new FormData;
data.set('pid','编辑帖子ID');
$.ajax({
url: '?attach.htm',
data,
dataType: 'json',
processData: false,
contentType:false,
type: 'POST',
beforeSend(xhr) {
xhr.setRequestHeader('ajax-fetch', '1');
xhr.setRequestHeader('content-action', 'attach/list');
},
success(result) {
}
});
attach/delete 删除接口, 必须参数aid
const data = new FormData;
data.set('aid','附件aid');
$.ajax({
url: '?attach.htm',
data,
dataType: 'json',
processData: false,
contentType:false,
type: 'POST',
beforeSend(xhr) {
xhr.setRequestHeader('ajax-fetch', '1');
xhr.setRequestHeader('content-action', 'attach/delete');
},
success(result) {
}
});
最后于 7天前
被nenge编辑
,原因: