KingCMS 插件开发原则

1.         插件的构成

 

插件由前后台两部分构成,前台为“page/[插件文件夹]”,后台为“admin/[插件文件夹];

需要注意的是,一种类型的插件的前后台[插件文件夹]名称必须一致,并且以英文字母构成。

Adminpage目录下面的system目录为系统目录。

 

2.         插件的安装

 

登陆后台 -> 插件管理 -> 填写您的插件目录名称 -> 保存

这样就完成了插件安装过程

 

3.         插件目录结构约定

 

[目录结构]

 

[page]                                        前台系统目录

[插件1]

        [language]            语言包文件夹,详见7

        fun.asp                   插件主要函数页面,详见8

    tag.inc                      插件对应标签设置,详见9

  tag_Help.txt     标签帮助文档,不会被系统调用

  *.asp            功能页面,详见10

 

[admin]                                    后台管理目录

[插件1]

  *.asp            功能页面,详见10

 

4.         创建数据库规则约定

 

A)     插件目录及数据库表一致性原则

如:ad广告插件,插件目录名称为ad,则数据库表为:kingad,若有附带的表,则为:kingad_column1, kingad_column2, kingad_column3

 

5.         函数调用

 

<!--#include file="../system/plugin.asp"-->

这一plugin.asp文件包含了对page/conn.asp , page/config.asp , page/fun.asp 及所有的插件目录下面的fun.asp文件的引用,执行安装插件的过程则会重写这个plugin.asp文件并完成引用操作,无需单独调用。

 

6.         语言包的结构

 

<?xml version="1.0" encoding="UTF-8"?>

<kingcms>

       <title>[插件名称]</title>

       <common>[通用语言]</common>

       <list>[列表页语言]</list>

       <label>[表单页语言]</label>

       <check>[表单验证提示]</check>

       <flo>[flo对话框提示语言]</flo>

       <aja>[aja对话框页面语言]</aja>

       <alert>[弹出窗口提示语言]</alert>

</kingcms>

 

部分复杂的内容可以用<![CDATA[ … ]]>方式插入

 

7.         语言包的命名

 

page/system/inc/language.xml

 

<文件名 l="语言名称"/>

<zh l="繁體中文"/>

<zh-cn l="简体中文"/>

 

既要把语言包翻译成繁体,则需要先把插件目录下面的zh-cn.xml文件另存为zh.xml,然后进行翻译操作,当然简体->繁体是不需要翻译,直接转换即可。

 

8.         fun.asp

 

 

 

A)     作用

 

 

 

                         i.              插件专用函数及Class调用

 

                       ii.              插件标签解析函数

 

 

 

B)      具体结构

 

 

 

class []  '命名插件类

 

 

 

private sub class_initialize()      '参数设置

 

r_path = "[插件目录]"

 

end sub

 

 

 

public function lang(l1) '语言包调用,直接拷贝进去即可用,需要指定r_path参数

 

on error resume next

 

if isobject(r_doc)=false then

 

set r_doc=Server.CreateObject("Microsoft.XMLDOM")

 

r_doc.async=false

 

        if king.isexist(king_system&r_path&"/language/"&king.language&".xml") then

 

        r_doc.load(server.mappath(king_system&r_path&"/language/"&king.language&".xml"))

 

else

 

        r_doc.load(server.mappath(king_system&r_path&"/language/"&king_language&".xml"))

 

end if

 

end if

 

lang=r_doc.documentElement.SelectSingleNode("//kingcms/"&l1).text

 

if err.number<>0 then

 

lang="["&l1&"]"

 

err.clear

 

end if

 

end function

 

 

 

'install  插件数据表安装

 

private sub install()

 

king.head "admin",0'执行权限设置,安全起见,限管理员有权限进行安装

 

dim sql'定义变量

 

sql=" [表结构]"'定义数据库表结构

 

conn.execute "create table [数据库表] ("&sql&")"'创建表

 

end sub

 

 

 

end class'结束类

 

'       ***   ***   ***   ***   ***   ***   ***   ***

 

'       定义标签解析函数

 

function king_tag_[插件目录] (tag,invalue,tagname)

 

'注意:标签解析函数是全局函数,命名规则要严格遵守以上方式,以免发生冲突现象。

 

'tag:模板中写的完整的标签,如:{king:ad name="ggad" type="ssi"/}

 

'tagname:标签名称,也就是上述例子中的ad

 

'invalue:插入内容,如:title:[标题]|content:[内容]|keywords:[关键字]

 

       [函数过程略]

 

end function

 

 

 

9.         tag.inc

 

 

 

A)     作用:定义标签

 

B)      举例

 

case"[标签1]" str=king_tag_[插件目录](tag,invalue)

 

case"[标签2]" str=king_tag_[插件目录]_[扩展](tag,invalue,tagname)

 

C)     定义方法

 

case列表里指定标签名称,并把标签解析函数值返回给strtag,invalue,tagname解释请见8

 

 

 

10.     功能页面 *.asp

 

 

 

A)     作用:管理数据、显示数据、操作数据

 

B)      结构

 

<!--#include file="../system/plugin.asp"-->

 

<%

 

dim pp

 

setking=new kingcms

 

king.checkplugin king.path'检查插件安装状态

 

set pp=new passport

 

     select case action

 

     case"" king_def

 

     case"add" king_add

 

     case"set" king_set

 

     case elseking.error king.lang("error/invalid")

 

end select

 

set pp=nothing

 

set king=nothing

 

 

 

'def

 

sub king_def()

 

[代码略]

 

end sub

 

'add

 

sub king_add()

 

[代码略]

 

end sub

 

'set

 

sub king_set()

 

[代码略]

 

end sub

 

%>

原文地址:https://www.cnblogs.com/yk25com/p/2304291.html