WeCenter付费阅读功能 - 插件开发文档

技术-安辰
技术-安辰 这家伙很懒,还没有设置简介

2 人点赞了该文章 · 1506 浏览

插件设计

您在开始插件的设计之前,有必要了解一下我们所推荐的插件设计方式,更好的规范性和兼容性,将使得您设计的插件受到更多使用者的欢迎,对于程序员而言,也有助于形成良好的编码习惯,实现自身能力的提升。如果您有意编写 WeCenter插件,请按照先后顺序仔细阅读本文档。

 

准备工作

插件实现流程

开始编写插件,您应当首先对插件实现的流程有一个大致的了解,以下是我们推荐的插件编写流程:

熟练使用 WeCenter系统后,对希望完善或补充的个性化功能进行评估,进而提出插件的功能需求。

对插件做一个概括性的设计,例如:需要使用什么菜单、什么参数,配置哪些选项、数据结构如何设计、前后台实现哪些功能等等。

阅读本文档并在系统设置中实际体验WeCenter插件接口所实现的功用,例如:您的插件应当如何设计才能良好的挂接到WeCente系统中来。插件接口能够实现哪些功能、不能实现哪些功能,插件为此而需要做的优化、改造和取舍。

编写相应程序代码和模板语句,实现所需的功能并进行代码测试、兼容性测试和代码改进。

同时,编写一个适合新手的插件的说明书也是必不可少的,其中包括: 插件适用的WeCenter版本、功能概述、兼容性声明、安装方法、使用方法、卸载方法等等。

将插件提供给他人,或自己使用,根据使用者反馈,对插件进行完善。插件实现流程至此结束。

文件命名规范

WeCenter 按照如下的规范对程序和模板进行命名,请在设计插件时尽量遵循此命名规范:

1.命名规范

插件命名以wc_作为前缀+插件名,如插件test,即wc_test

2.目录新建

目录新建在根目录下plugin文件夹下,如插件名test,目录结构就是/plugins/wc_test/

3.目录结构

目录包含内容必须要有配置文件、核心类,非必要的有模型类、静态资源、第三方类、页面模板等,如test,则完整目录如下

wc_test

|-config.php  配置文件

|-test.php    核心类

|-test_model  模型类

|-view       视图模板目录

|-static  静态资源目录

|-install.sql   安装sql

|-uninstall.sql  卸载sql

|-upgrade.sql  升级sql

4.配置文件

config.php配置文件 返回一个多维数组,包含有:

name: 插件标识

title: 插件标题名称

intro: 插件介绍

author : 插件作者

version: 插件版本

state : 插件状态

config: 也是一个数组,包含所需的配置项,如:

  'config'=>[

  'ad_plugin_enable' =>

  array (

    'title' => '广告开启',

    'type' => 'radio',

    'value' => 'Y',

    'options' =>

    array (

      'Y' => '开启',

      'N' => '关闭',

),

'tips' => 是否开启广告

  )

],

以上的配置config就是后台插件的配置显示效果,'options' 对应的是配置项的值,'value' 是默认值,'type' 是配置类型,常用的有text,select,radio,checkbox,'title' 是配置名称,tips是配置说明ad_plugin_enable是开发者自己定义,调用的时候调用此键名即可

配置调用方式,

get_plugins_config(3.5.0新增方法)

get_hook_config(3.5.0之前方法)

 

4.核心类

核心类同样继承自AWS_CONTROLLER,包含5个固定方法,即构造方法 install安装,uninstall卸载,enable启用,disable禁用,构造方法获取插件的配置和插件相关信息,安装、卸载、启、禁用四个方法默认是调用系统的方法,也可以自定义,在方法里自行处理相关逻辑。除了这5个方法之外,开发者可以自定义其他的方法进行调用。

注意:若install安装,uninstall卸载,enable启用,disable禁用,未自定义方法,请直接return true;

如:

/**
 * 安装前的业务处理,可在此方法实现,默认返回true
 * @return bool
 */
public function install()
{
    return true;
}

/**
 * 卸载前的业务处理,可在此方法实现,默认返回true
 * @return bool
 */
public function uninstall()
{
    return true;
}

/**
 * 插件启用方法
 */
public function enable()
{
    return true;
}

/**
 * 插件禁用方法
 */
public function disable()
{
    return true;
}

 

 

5.模型类

模型类的定义名称需后接_model方可,内部的定义与使用与model目录下的模型相同,

另注意一点,此处的模型名不可与model目录下的模型重名,如果重名,会去调用model目录下的模型,从而会导致找不到相关的方法一类的错误。调用方法还是$this->model()进行调用。

6.static、view静态资源、视图目录

Staic目录存放css\js等静态资源

View 视图目可存放后台以及前台的视图模板,后台的要在目录下新建子目录admin,前台的模板直接放在view下即可,在核心类中,通过 PLUTPL::output('ad/banner');渲染页面,其中ad是插件名或者标识,banner是页面名称,PLUTPL::output('ad/admin/edit');后台的只需加上admin即可。

7.安装、卸载、升级

安装、卸载、升级在后台都有相对应的操作,对应相应的sql执行即可。

8.插件调用

正常的调用只需用公共方法hook()方法调用即可,若新建的插件定义了钩子列表可使用run_hook(钩子名称,钩子参数)进行用钩子,在后台或者其他的页面需要调用插件方法进行页面调用或方法的时候,可以通过get_plugins_url方法获取组装插件链接;代码如下:

/**
 * 获取插件地址
 * @param string $plugins 插件名称
 * @param string $method 插件方法
 * @param array $param 插件参数
 * @param string $scene  auto 自动识别,index前台插件地址,admin,后台插件地址
 * @return string
 */
function get_plugins_url($plugins,$method,$param=[],$scene = 'auto')
{
    $param_url = array();
    $param_url[] = ''.$plugins;
    $param_url[] = ''.$method;
    foreach ($param as $k=>$v)
    {
        $param_url[] = $k.'-'.$v;
    }

    switch ($scene)
    {
        case 'index':
            return get_js_url('/plugins/'.implode('__',$param_url));
            break;
        case 'admin':
            return get_js_url('/admin/plugin/doact/'.implode('__',$param_url));
            break;
        case 'auto':
            if($_GET['app']!='admin')
            {
                return get_js_url('/plugins/'.implode('__',$param_url));
            }else{
                return get_js_url('/admin/plugin/doact/'.implode('__',$param_url));
            }
            break;
    }
}

 

插件概述

使用管理员账号登录WeCenter系统后台,在左侧菜单将可以看到“插件拓展菜单;

 

插件管理

点开插件管理后,可以看到所有插件,如插件还未安装会看到如下提示

 

 

新建插件

WeCenter3.5.0版本后,我们在后台提供了快速生成插件目录结构的功能,点击“插件管理”后,可以看到TAB导航中有,设计插件菜单;我们点开后界面如下:

 

 

 

 

钩子说明

 

钩子名称:在一个插件内,钩子的名称是唯一的,不可重复。名称可以由英文字母、数字和“_”组成,不支持中文,最长255个字符。为了便于理解和记忆钩子的作用, 名称应当尽量简洁清晰,能够表述一定的含义。

注意:钩子名称尽量使用小写字母

钩子介绍:对钩子的详细说明,如功能介绍、调用方法、使用方法等。

是否启用:每个插件允许有多个钩子,您可以自由选择关闭或者开启某个钩子。

钩子的删除

 

在钩子管理界面,您可以随时删除某一个自定义钩子系统钩子除外 钩子删除以后,您应当及时修正放置钩子的程序文件,清除钩子标记,以免影响您的正常使用。

 

钩子的编辑

编辑:插件设计阶段,您可能需要随时编辑钩子,每次更改,系统会自动更新缓存文件,您可以立即看到更改的效果。如果是更改钩子名称,那么您可能需要调整钩子放置的程序,修改钩子调用的名称。

钩子的放置与调用

钩子设计完成以后,您需要在相应的程序中安放钩子,不同钩子由于作用的不同,放置的位置也是不同的。 安放钩子,您仅仅需要将钩子的调用代码放入即可。调用代码格式如下:

run_hook(钩子名称,钩子参数)  

例如:调用 插件demo 的钩子 testhook并传参当前页面位置, 我们需要在程序中适当的地方加入下面的代码

run_hook(‘testhook[page=>explore])

注意:系统内置钩子参数一般都是使用数组的形式进行传参,若系统内置钩子无法满足前台需求,建议使用自定义钩子的方式去实现;

若插件需要给第三方使用,建议使用新建模板添加自定义钩子的方式进行发布;

设计范例

此处我们为您提供一个使用钩子技术的插件范例,完成功能十分简单,旨在使您直观的了解钩子的使用。

进入系统后台的插件管理->钩子管理,添加一个名为demo_hook的插件

进入系统后台的插件管理,添加一个名称和惟一标识符均为 demo 的插件。

找到使用钩子”,选择名为 demo_hook 的钩子,然后提交。

 

 

同时系统在plugins目录下给我们生成了插件,文件如下:

 

用编辑器打开plugins/wc_demo/demo.php;我们可以看到系统默认给我们生成的代码如下:

PHP代码:

<?php
/**
 * demo插件
 */
class demo extends AWS_CONTROLLER
{
     protected $demo_plugin_info;
     protected $demo_plugin_config;
     /*定义使用的钩子*/
     public $hooks = ["demo_hook",];
    
     public function __construct()
    {
        parent::__construct();
        $this->demo_plugin_info = get_hook_info('demo');
        $this->demo_plugin_config = get_plugins_config('demo');
    }
    
    /**
     * 安装前的业务处理,可在此方法实现,默认返回true
     * @return bool
     */
    public function install()
    {
        return true;
    }

    /**
     * 卸载前的业务处理,可在此方法实现,默认返回true
     * @return bool
     */
    public function uninstall()
    {
        return true;
    }
    
    /**
     * 插件启用方法
     */
    public function enable()
    {
        return true;
    }

    /**
     * 插件禁用方法
     */
    public function disable()
    {
        return true;
    }
    
        /**
     * demo_hook钩子方法
     * @param $params=[]
     */
    public function demo_hook($params=[])
    {
        echo '这是[demo]插件[demo_hook]钩子的示例!
'
;
    }
}

 

此时我们进入后台插件管理处,可以看到,提示我们有新插件,我们安装demo插件;

 

 

此时我们在前端页面explore/index.tpl.htm中放置我们的钩子:

我们放置在页面左侧看下效果:

<div class="col-sm-12 col-md-3 aw-side-bar hidden-xs hidden-sm">
   <?php run_hook('demo_hook');?>

我们打开网站首页,看到如下:

 

我们看到页面已经输出了,系统默认打印的信息

此时我们只需要完善插件钩子的业务,即demo_hook方法;

 

WeCenter 插件的钩子技术,为广大的插件开发者提供了一个更加灵活的插件设计机制。当WeCenter升级后,用户只需重新将钩子调用代码安放到程序中原来的位置,就几乎可以继续使用原来已安装的插件,降低了对于程序修改的幅度和插件安装的难度,更加有利于插件程序的规范、管理、维护、相互交流。因此我们强烈建议插件开发者能够深入研究并应用这一机制,创作出越来越多的优秀插件。

发布于 2022-01-14 08:59

免责声明:

本文由 技术-安辰 原创发布于 WeCenter ,著作权归作者所有。

登录一下,更多精彩内容等你发现,贡献精彩回答,参与评论互动

登录! 还没有账号?去注册

胖子不怕
2022-01-17 09:34
这个能控制可阅读文章数字吗?如果免费阅读部分太少,都没法吸引人看下去,