最新公告
  • 欢迎您光临站长源码网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 2024/6/16更新【lecms开发技巧示例文档手册】,少踩坑

    正文概述 管理员   2024-11-10   43

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


    站长源码网 » 2024/6/16更新【lecms开发技巧示例文档手册】,少踩坑

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    支付宝支付
    余额支付
    ×
    微信扫码支付 0 元