PHP建站技术分享-从入门到精通PHP建站技术分享-从入门到精通PHP建站技术分享-从入门到精通

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > LeCMS

【lecms开发技巧示例文档手册】,少踩坑

管理员 2024-12-15
LeCMS
6

此文档仅限对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

代码示意:

<?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部分】

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



希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部