此文档仅限对lecms二次开发以及编写插件开发者适用。
如仅仿制模版可直接移步到
官方撰写的模版开发手册
画风的人大佬撰写的模版开发手册
手动往下看吧,论坛的描点不管用,阅读菜单也没法用。
阅读菜单:
1、菜单挂载部分
2、插件基础信息部分
3、block封装部分
4、model模型部分
5、control控制器部分
6、路由部分
7、插件部分
8、db以及基础底层封装的方法部分
开发专用插件示例文档手册,后期将使用文档来存储
有人问,或者老鸟问,为什么要写这玩意,没办法 我是新手,一般需要对照着手册。
其中我看某些插件文件时,有很多方法都不知道咋回事。比如
自己是新手,一般都是靠文档手册,最新想转lecms,后期迁移的插件较多,暂时统计一下官方的类助手函数和语法。
查阅菜单流程示意图:
【菜单挂载部分】
友情链接为例:https://www.lecms.cc/?thread-6.htm(下载程序自带)
挂载菜单位置:https://www.lecms.cc/?thread-11.htm
菜单挂载的钩子文件admin_admin_control_init_nav_after.php
把插件菜单挂载到指定菜单下面,比如挂载到“插件主题”菜单下!
【下方为菜单的挂载】
<?php
//后台菜单钩子
defined('ROOT_PATH') or exit; //权限代码
// index.php?links-index //首页的链接 也就是你的链接,其中links-index就是你的后台的的模板文件地址,在友情链接插件目录下可以看见
// lang('f_links') 语言包 也可以是汉语 比如'title' => 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 插件基本说明
<?php
//插件基本说明
return array(
'name' => '友情链接', // 插件名
'brief' => '友情链接插件,简单的文字链接。',
'version' => '1.0.0', // 插件版本
'cms_version' => '3.0.0', // 插件支持的程序版本
'update' => '2022-12-16', // 插件最近更新
'author' => '大大的周', // 插件作者
'authorurl' => 'https://www.lecms.cc', // 插件作者主页
'setting' => '', // 插件设置URL
);
【上方为菜单的基础信息】
【block封装,位于lecms/block下】
kp_block_links.lib.php 插件前台模板调用数据标签
3.0.3版本后实际文件名为:block_links.lib.php
代码示意:
<?php
defined('ROOT_PATH') || exit;
//插件前台调用模板
// 官方文件说法本文件为插件前台模板调用数据标签
/**
* 友情链接插件
* @param string cate 分类
* @param string orderby 排序方式
* @param int orderway 降序(-1),升序(1)
* @param int start 开始位置
* @param int limit 显示几条
* @return array
*/
function block_links($conf) {
global $run;
$where = array();
// hook block_links_before.php
$orderby = isset($conf['orderby']) && in_array($conf['orderby'], array('id', 'orderby')) ? $conf['orderby'] : 'id';
$orderway = isset($conf['orderway']) && $conf['orderway'] == 1 ? 1 : -1;//是否存在 升降序
$start = _int($conf, 'start');//开始位置
$limit = _int($conf, 'limit', 10);//显示条数
$arr = $run->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部分】
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个,其他自行开发者自行查看。
【模型部分结束】
【control控制器部分】
控制器代码部分:
控制器部分非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里面使用, ->模型名
DB操作以及lecms原始的xiunophp模型部分
根据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草稿箱插件以及友情链接插件,如果以上还看不懂,算了,你找群里的大哥大们定制插件吧。