2024/6/16更新【lecms开发技巧示例文档手册】,少踩坑 标签说明 开发技巧

隔壁老卢 11月前 1152

此文档仅限对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草稿箱插件以及友情链接插件,如果以上还看不懂,算了,你找群里的大哥大们定制插件吧。

 

 

 

最新回复 (10)
  • 小胡子 11月前
    引用 2
    很有必要出个手册啊
  • 隔壁老卢 11月前
    引用 3
    小胡子 很有必要出个手册啊
    对啊,助手函数要的啊,$this-表?还是$run?都快懵逼了
  • lecms 11月前
    引用 4
    隔壁老卢 对啊,助手函数要的啊,$this-表?还是$run?都快懵逼了
    $this是在控制器里面使用, $run是在block里面使用, ->模型名 
  • lecmsadmin 11月前
    引用 5
    估计只能等楼上的来了。
  • 隔壁老卢 11月前
    引用 6
    在模板手册里面有sql语法,但是是空的,能给常用的更新一下吗
  • 小夜好坏 11月前
    引用 7
    老卢可以啊!赶紧出个仿模板教程不然让黑影暴你菊花
  • 隔壁老卢 11月前
    引用 8
    小夜好坏 老卢可以啊!赶紧出个仿模板教程不然让黑影暴你菊花
    .....
  • isunjie 10月前
    引用 9
    我直接用tp的orm,更省事!
  • 隔壁老卢 8月前
    引用 10

    开发技巧已更新,建议按照上方流程翻一遍lecms代码,查看links友情链接插件代码,如果友情链接插件代码都看不懂,请放弃开发插件。

  • 隔壁老卢 5月前
    引用 11
    钩子文件啥意思?你要在什么地方,加载什么样的内容,就使用钩子,官方某个文件带的钩子,在写插件时新建个钩子文件,到时候他就会自动加载你的钩子文件的代码,比如hook admin_admin_control_init_nav_after.php钩子,忘记在那个文件了,可能在admin_nav控制器文件里面,要写插件,就将admin_admin_control_init_nav_after.php新建一个php文件,里面码代码,到时候会合并到admin_nav控制器文件里面。
返回
发新帖