此文档仅限对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
把插件菜单挂载到指定菜单下面,比如挂载到“插件主题”菜单下!
【下方为菜单的挂载】
<?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);
【上方为菜单的基础信息】
kp_block_links.lib.php 插件前台模板调用数据标签
3.0.3版本后实际文件名为:block_links.lib.php
代码示意:
<?phpdefined('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也就是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草稿箱插件以及友情链接插件,如果以上还看不懂,算了,你找群里的大哥大们定制插件吧。
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。