此文档仅限对lecms二次开发以及编写插件开发者适用。
如仅仿制模版可直接移步到
官方撰写的模版开发手册
画风的人大佬撰写的模版开发手册
手动往下看吧,论坛的描点不管用,阅读菜单也没法用。
阅读菜单:
1、菜单挂载部分
2、插件基础信息部分
6、路由部分
7、插件部分
开发专用插件示例文档手册,后期将使用文档来存储
有人问,或者老鸟问,为什么要写这玩意,没办法 我是新手,一般需要对照着手册。
其中我看某些插件文件时,有很多方法都不知道咋回事。比如
自己是新手,一般都是靠文档手册,最新想转lecms,后期迁移的插件较多,暂时统计一下官方的类助手函数和语法。
查阅菜单流程示意图:
友情链接为例:https://www.lecms.cc/?thread-6.htm(下载程序自带)
挂载菜单位置:https://www.lecms.cc/?thread-11.htm
菜单挂载的钩子文件admin_admin_control_init_nav_after.php
把插件菜单挂载到指定菜单下面,比如挂载到“插件主题”菜单下!
【下方为菜单的挂载】
lang('友情链接')
// index.php?links-index 首页位置
// icon 插件图标
$menu['menuInfo']['plugin']['child'][] = array('title' => lang('f_links'), 'href' => 'index.php?links-index', 'icon' => 'fa fa-link', 'target' => '_self');
位置位于:
首页常用功能下:admin_my_control_get_used_after.php
跟菜单钩子类似,代码基本一样(一模一样)
示意图:
【上方为菜单的挂载】
插件信息:
conf.php 插件基本说明
'友情链接', // 插件名
'brief' => '友情链接插件,简单的文字链接。',
'version' => '1.0.0', // 插件版本
'cms_version' => '3.0.0', // 插件支持的程序版本
'update' => '2022-12-16', // 插件最近更新
'author' => '大大的周', // 插件作者
'authorurl' => 'https://www.lecms.cc', // 插件作者主页
'setting' => '', // 插件设置URL
);
【上方为菜单的基础信息】
kp_block_links.lib.php 插件前台模板调用数据标签
3.0.3版本后实际文件名为:block_links.lib.php
代码示意:
links->find_fetch($where, array($orderby => $orderway), $start, $limit);//前台显示的
// hook block_links_after.php
return $arr;
}
代码返回的示例:
//-友情链接start-->
// array(2) {
// ["links-id-2"]=>
// array(5) {
// ["id"]=>
// string(1) "2"
// ["name"]=>
// string(6) "百度"
// ["url"]=>
// string(9) "baidu.com"
// ["orderby"]=>
// string(1) "0"
// ["dateline"]=>
// string(10) "1703770259"
// }
// ["links-id-1"]=>
// array(5) {
// ["id"]=>
// string(1) "1"
// ["name"]=>
// string(5) "baidu"
// ["url"]=>
// string(20) "http://www.baidu.com"
// ["orderby"]=>
// string(1) "0"
// ["dateline"]=>
// string(10) "1703770149"
// }
// }
block所有的标签均可在html页面中使用{php}print_r{标签}{/php}进行打印
block调用模型时值得注意的是使用$run->模型名->方法
【block文件结束】
model也就是mvc的模型部分,lecms的后端 admin控制器的模型也位于lecms/model位置,全站可调佣,调用模型方法为:$this->模型名->方法
lecms集成的模型文件位于:/lecms/model,也是使用$this->moxing->方法调用,例如$this->kv->xget('cfg');
$this->kv->xget('cfg');意思查询kv模型里面的,xget方法
lecms开发者kv模型给出的方法有以下几个:
get($k);//// 读取 kv 值 接受键名 比如查询link_keywords 就是get($link_keywords );
set($k, $s, $life = 0);// 写入 kv 值 在kv表新增键值对 也就是新增字段和字段值
xget($key = 'cfg');//读取整个字段cfg的值
xset($k, $v, $key = 'cfg');//修改 例如:xset(webmail, gebilaolu@qq.com); 其中cfg是可以改成其他的字段的。
xdelete($k, $key = 'cfg')//删除
xsave($key = 'cfg')//保存
save_changed()保存所有修改过的key 【以上所有的方法所有的修改,都要进行保存】
本人只查看了kv模型,具体的lecms模型文件有19个,其他自行开发者自行查看。
【模型部分结束】
控制器代码部分:
控制器部分非block,所以全程使用$this
(代码部分有点长,就不贴代码了)
【结束....】
在查看控制器和后台操作时现一个问题如下
在请求控制器方法时是:url/index.php?控制器类名(links2)_方法名(index)->传值
比如首页为:/admin/index.php?links2-index
请求列表页为:/admin/index.php?links2-get_list-page-1-limit-15
在lecms写插件时,插件的路由为:
在请求控制器方法时是:url/index.php?控制器类名(links2)_方法名(index)->传值
比如首页为:/admin/index.php?links2-index
请求列表页为:/admin/index.php?links2-get_list-page-1-limit-15
其中$this->模型名->方法
【继续往下看会讲到】
$this->links->find_count($where);
$this->links->count();
$this->links->list_arr($where, 'id', -1, ($page-1)*$pagenum, $pagenum, $total);
$this->links->update($data)
$this->links->create($data);
$this->assign('data', $data);//前台输出的标签
$this->display('links_set.htm');//前台输出的页面
global $run;
$run->links->find_fetch();
官方回复:
$this是在控制器里面使用, $run是在block里面使用, ->模型名
根据lecms开发者提示,查看底层xiunophp代码发现:
常用数据库操作方法:(在xiunophp文件下有多个文件及公用方法,在此只举例数据库)
以下是lecms底层的xiunophp方法,在自定义模型时,需要在模型文件里面定义他的主键和表
比如:
//草稿箱插件的模型model文件
function __construct() {
$this->table = 'drafts'; // 表名
$this->pri = array('id'); // 主键
$this->maxid = 'id'; // 自增字段
}
要调用下方的get方法如何使用呢?
控制器:$this->drafts->get($key);//这里的drafts是我在草稿箱定义的模型文件,当然我可以在任何的插件或者文件中使用。
block:$run->drafts->get($key);
下方只是底层的方法,只需要使用lecms模型内的方法即可,模型路径:/lecms/model
如果还不能满足,可以使用lecms/xiunophp/lib/*model.php的方法
如果上方这俩文件内的模型还不能满足,可以直接使用lecms/xiunophp/所有文件下的方法,也是按照刚刚示例的get方法一样使用。
为什么尽量使用上面的呢?用lecms为了啥?大数据而生。
上面还不能满足,就自己插件里面写自己的模型!
下面列出的方法是lecms/xiunophp/lib/db模型的方法 我记得好像是。
get($key);
multi_get($keys);
set($key, $data);
update($key, $data);
delete($key);
maxid($key, $val = FALSE);
count($key, $val = FALSE);
truncate($table);
version();
find_fetch($table, $pri, $where = array(), $order = array(), $start = 0, $limit = 0);
find_fetch_key($table, $pri, $where = array(), $order = array(), $start = 0, $limit = 0);
find_update($table, $where, $data, $order = array(), $limit = 0, $lowprority = FALSE);
find_delete($table, $where, $order = array(), $limit = 0, $lowprority = FALSE);
find_maxid($key);
find_count($table, $where = array());
//创建和删除索引
index_create($table, $index);
index_drop($table, $index);
//获取表字段、判断表是否存在
get_field($table);
exist_table($table);
//删除表、创建表、删除数据库
table_drop($table);
table_create($table, $cols);
delete_db();
也就是说以上方法均可以使用$this->模型->方法调用,或者使用$run,也就是$run是在block里面使用。
例如$this->模型->table_drop($table);
建议开发者直接查看路径:/lecms/xiunophp/下的文件即可。
/lecms/xiunophp/下的方法均可以通过$this->模型->方法调用,值得注意的是模型中需要指明数据库的数据库名,自增字段等信息,可以找一个官方自带的模型文件查看。
23月27日增加:
引入composer时,插件文件下载composer插件,在要使用的php文件中,引入进来,定义一个常量,define('VENDOR', 1),这里最好在引入的每个文件夹判断一下是否有过定义,因为有时候别人也定义了这个常量VENDOR,默认随便定义一下,VENDOR存在就行,不的话引入会报错,没有发现引入的类,定义后就一切正常了,我记得是这么回事。。。具体忘了。
其次插件conf文件
里面有个rank优先级,优先级是越小越靠前,如果你要合并到别的插件钩子,优先级一定要放到后面,比你要合并的插件钩子后面。
建议:学习一下lecms草稿箱插件以及友情链接插件,如果以上还看不懂,算了,你找群里的大哥大们定制插件吧。
小胡子
5月前
引用
2楼
隔壁老卢
5月前
引用
3楼
lecms
5月前
引用
4楼
lecmsadmin
5月前
引用
5楼
隔壁老卢
5月前
引用
6楼
小夜好坏
5月前
引用
7楼
隔壁老卢
5月前
引用
8楼
isunjie
4月前
引用
9楼
隔壁老卢
3月前
引用
10楼
隔壁老卢
4天前
引用
11楼
评论(0)