个人工具
名字空间
变换
操作

CMSware发布管理API

来自站长百科
跳转到: 导航, 搜索

导航:返回上一页

PublishAPI位于程序发布包根目录(不是 cmsware目录的根目录,2.8新增),是完全基于CMSware而专门开发的的一个发布接口,主要用于互动性较强的网站。在网站管理员允许的条件下,普通访问者或者网站会员在不登陆CMSware后台的情况下,仍可以向CMSware后台提交数据,比如完整的新闻内容,软件下载等等内容。

注:PublishAPI是一个单方面向CMSware后台写入、更新或删除数据的接口,并无任何读取后台数据并显示的功能,也就是说,PublishAPI只是一个处理提交过来的表单数据的API,跟其它的没有任何关系,如果实在难与理解,我们可以把PublishAPI看作是一个升级版的外部投稿,只不过这个“外部投稿”,在投稿后可以被立即发布并生成页面,还可以去执行刷新结点首页等操作,也可以去删除某个IndexID的文章或内容,至于编辑,将独立在使用方法里说清楚。

目录

一、PublishAPI工作流程

构造表单->提交数据->PublishAPI接收表单值->判断传入的各值的合法性->执行start类扩展->根据传入的操作命令值执行API的操作->执行end类扩展->完成操作跳转到指定页面

二、工作流程详细说明

工作流程中加红的部份,才属于PublishAPI的范围,构造表单步骤和提交数据确切来说跟API没有任何直接的关系。

斜体字标记的执行start类扩展 和 执行end类扩展在高级应用中介绍,如果是普通应用,将会自动忽略这两个步骤。

构造表单

表单的构造跟PublishAPI确切来说是没有关系的,你的表单放哪儿,放在哪个页面中,跟PublishAPI没有直接关系,而对于表单的构造无素,PublishAPI有非常严格的规定,你的表单只要是按照以下的规则构造出来的,那么只要提交到API,都会被正确执行,否则API将无法正确接收到你的表单数据。

表单的构造可以简单到用Dreamware去独立弄一个form.html,在其中手工输入表单的源代码,最终只需要将form的action按照规则指向PublishAPI的index.php文件就行,当然也可以通过CMSware的发布功能,直接在模板中采用普通的CMSWARE模板语法发布出一个具有表单的页面,这儿一般要用到CMSWARE动态发布来发布表单,至于动态发布怎么使用,详情请查看:http://www.cmsware.com/cmsware/manual/source/Manual/part_2/part_2_dongtai.html

构造表单规则:

对于表单所要提交的变量数据,我们可分为三种类型:操作命令变量、自定义变量、系统变量。

A、操作命令变量

主要为了告诉API需要做什么事,比如action=add这一个操作命令变量,就是告诉API我需要新增一篇文章或内容,建议将所有的操作命令变量写在表单的action属性里,诸如像这样:<form action="http://www.cmsware.com/publishapi/index.php?action=add&NodeID=25" >

操作命令变量主要有以下:

变量名 字段意义 是否必需 可选值及说明
action 告诉API应该执行何种操作

新增内容:add 编辑修改:edit 删除内容:del

例:action=edit表示编辑操作

NodeID 告诉API应该在哪个结点ID中执行操作

新增时:是 编辑:否 删除:否

所有CMSware后台中已有的结点号都可使用,当action=add时,该值不可省略,因为API必须知道在哪个节点中新增内容 例:action=add&NodeID=23表示在23号结点中执行新增内容操作

IndexID 告诉API应该对哪一篇内容执行操作

新增时:否 编辑:是 删除:是

所有CMSware后台中已有的内容的ID号都可使用,当action=edit或del时,该值不可省略,因为API必须知道对于哪一篇内容进行编辑或删除 例:action=del&IndexID=2597表示删除后台中ID号为2597的内容

con 告诉API需要执行的扩展配置文件

必须告知API在执行本表单提交时应用哪一个配置,具体使用方法后面会详细介绍 例:action=add&NodeID=3&con=PostBlog表示在第3号结点中新增内容并且需要执行扩展配置目录中的PostBlog.php中的内容

referer 当API执行完操作后,浏览器将会转向该变量指定的地址

一般情况下,可以不指定该值,API在执行完操作后,浏览器将会默认转向表单页面,如果config.ini.php文件中配置了默认转向地址,那么将转向该默认地址 例:action=edit&IndexID=7580&con=3&referer= http://www.cmsware.com/edit.php表示当API执行完对ID号为7580的内容编辑完成后浏览器将转向 http://www.cmsware.com/edit.php

FiledName_ImgAutoLocalize Filed字段是否需要图片本地化

只有当您想提交的字段,在CMSware后台内容模型中字段输入类型设置为RichEditor时,该操作变量才有效。 例:默认的新闻模型中,Content字段的输入类型为RichEditor,我们此时可以把Content_ImgAutoLocalize设为1一起提交到API,那么Content字段中的图片将会被自动本地化,设为其它任何值,都将不会进行图片本地化操作

B、 自定义变量

自定义变量指的是在CMSware后台里的系统设置里的内容模型设置里定义的变量(通俗一点讲在内容模型里看得到的字段就属于自定义变量)

例如:默认新闻模型中的Title,Author,Content之类的,在表单构造时只需要简单的向以下这样构造表单元素

<input name="Title" type="text" value="技术幻想AT在深夜为PublishAPI写帮助文件" />

<input name="Author" type="text" value="技术幻想" />

<textarea name="Content">今天真是不幸,因为天气太热了,所以睡不着,于是乎来写帮助文件</textarea>

其实主要的数据也即是在自定义变量中体现的,另外两种类型的数据都只是辅助。

C、系统变量

在表单中除了可以提交操作变量和自定义变量外,还可提交系统变量,比如发布日期,最后修改用户等等,像这样的变量就是非自定义变量,在内容模型中是看不见的!建议一般情况下将这一类型的变量用<input type="hidden" name="PublishDate" value="1125412321" />来提交。

可被提交的系统字段值主要有以下:

变量名 字段意义 是否必需 可选值及说明
PublishDate 内容发布时间

请采用Unix 时间戳格式(自January 1 1970 00:00:00 GMT 起的秒数),应该是一个10位的数字,如果不指定该值,那么API将把内容发布时间设置为API被执行时的当前时间。 重点提示:在编辑操作时,如果更改了该值,可能会造成发布出的静态页面文件不会覆盖掉编辑前的静态页面,因为有些结点发布出的静态页面可能保存在以时间为划分规则的目录中

CreationDate 内容创建时间

请采用Unix 时间戳(自January 1 1970 00:00:00 GMT 起的秒数)格式,如果不指定该值,那么API将把内容创建时间设置为API被执行时的当前时间

ModifiedDate 内容修改时间

请采用Unix 时间戳(自January 1 1970 00:00:00 GMT 起的秒数)格式,如果不指定该值,那么API将把内容修改时间设置为API被执行时的当前时间

CreationUserID 建立内容的用户ID

使用的是CMSWARE后台中的用户uId,各用户的uId可在CMSware数据库中的cmsware_user表里查询,如果未指定,API将会默认采用config.ini.php文件中定义的默认用户ID

LastModifiedUserID 最后修改内容的用户ID

使用的是CMSWARE后台中的用户uId,各用户的uId可在CMSware数据库中的cmsware_user表里查询,如果未指定,API将会默认采用config.ini.php文件中定义的默认用户ID

Top 置顶权重 请使用纯数字,不指定时默认为0
Pink 精华权重 请使用纯数字,不指定时默认为0
SelfTemplate 自定义套用模板

相对于 CMSware模板目录的路径 例如:/default/index.html 具体参照http://www.cmsware.com/cmsware/manual/

SelfPublishFileName 自定义发布文件名 具体参照http://www.cmsware.com/cmsware/manual/
SelfPSN 自定义发布点(PSN) 具体参照http://www.cmsware.com/cmsware/manual/
SelfPSNURL 自定义发布URL 具体参照http://www.cmsware.com/cmsware/manual/
SelfURL 自定义外部URL 具体参照http://www.cmsware.com/cmsware/manual/

注意:系统变量值可以在扩展配置文件中统一定义,例如:在PostBlogk号扩展配置中设置了$var[PublishDate]=1164070110,那么任何采用了PostBlog扩展配置的API操作都将把发布时间设置为2006年11月21日08点48分30秒,并且在扩展配置文件中的变量定义权重大于外部表单中提交的变量,也就是说如果外部表单中和扩展配置文件中同时都定义了某一个相同的值,API将以扩展配置文件中的为准,这样在设计时,管理员可以将一些用户不可提交或者不可修改的字段全部写死在扩展配置文件中。

  • 提交数据:
当外部表单中的数据已被填写,准备提交时,建议根据上面的介绍,使用JS首先作一些初步的数据判断,以免增加不必要的误操作。比如:IndexID和NodeID的取值范围,不能同时为空,action的值不同时对于二者的是否必需填写的要求也不同等等
对于默认的新闻模型的Title字段,应该使得Title的value的length不大于250等等
诸如此类的,建议在外部表单页面中就判断,因为每一个用户的需求不同,在此就不一一举例了。但有一点需要说明:在PublishAPI里只是作了一些必要的、可能会影响程序正常运行的数据判断,其它的都请管理员自行在扩展配置文件中处理判断。

PublishAPI接收表单值

该步骤主要为API自身完成,不需要人为干预。

判断传入的各值的合法性

此处API本身也会作一些必要的数据合法性检查,比如是否传入了正确的扩展配置文件名,并且相对应的扩展配置文件存在并且定义正确(扩展配置在后面详细说明),在API本身数据检查完成后,还将执行扩展配置文件中定义的数据检测或是其它功能流程

根据传入的操作命令值执行不同的操作

根据传入的action值不同,API将执行不同的操作,该步骤不须干预,在API的操作执行完后,流程将会执行最后一个步骤

完成操作跳转到指定页面

在API即将完成历史使命并跳转页面前,将会执行扩展配置文件中的$action_end过程。
执行完扩展配置里定义的功能流程后,浏览器将会根据$referer的值跳转,至此,整个PublishAPI流程结束。

三、安装方法

  1. 在CMSware系统的根目录(必须)中新建一个目录,目录名自由设定,比如publishapi,将本目录中的所有文件上传至该目录,如果是非Win系统主机,请注意使用二进制上传。
  2. 现在应该可以通过 http://你的后台目录/publishapi/ 访问该目录,如果你需要将PublishAPI应用到前台去,建议重新绑定个域名到publishapi目录,以免暴露你的CMSware后台URL。
  3. 打开全局配置文件config.ini.php,根据注释修改配置文件.

四、使用方法

任何的表单想要执行API中提供的操作,都必须要告知其所要使用的扩展配置名称,并且该扩展配置文件必须存在

所有的扩展配置文件都必须存放于config目录中,比如con=PostNews,那么在config目录中就必须有一个PostNews.php的文件存在,否则将会出错,至于在PostNews.php中该写什么东西,后面介绍

我们先来看一下PublishAPI最简单的应用(扩展配置文件中什么也不做、不定义$referer,不提交任何的系统变量):

我们从外部页面中新增一篇文章到后台中的1号结点里,1号结点采用了默认的新闻模型,并且设置了自动发布,我们假设PublishAPI的地址为:http://www.cmsware.com/publishapi/,接下来我们随便弄个表单页:

<form action="http://www.cmsware.com/publishapi/index.php?NodeID=1&action=add&con=PostNews" method="post" enctype="multipart/form-data"
 name="form1" target="_self">

标题:<input name="Title" type="text" size="50" maxlength="250" /><br />

标题颜色:<input name="TitleColor" type="text" size="10" maxlength="7" /><br />

作者:<input name="Author" type="text" size="20" maxlength="20" /><br />

新闻图片:<input name="Photo" type="text" size="50" maxlength="250" /><br />

新闻内容:<textarea name="Content" cols="50" rows="10"></textarea><br />

关键字:<input name="Keywords" type="text" size="50" maxlength="250" /><br />

副标题:<input name="SubTitle" type="text" size="50" maxlength="250" /><br />

来源网站:<input name="FromSite" type="text" size="50" maxlength="250" /><br />

责任编辑:<input name="Editor" type="text" size="20" maxlength="20" /><br />

简介:<textarea name="Intro" cols="50" rows="7"></textarea>

<br />

<br />

<input type="submit" name="Submit" value="提交" />

</form>

这样我们的表单已经构造完成,现在只需要在PublishAPI的config目录中,新建一个名称为PostNews.php的空文件即可。

以上是PublishAPI最简单的应用,下面我们用另一张表单来删除我们刚刚发布的这篇文章,并且我们需要让API删除后会自动跳转到http://www.cmsware.com/bbs:(这里我们假设刚刚新增的文章的IndexID号为9527):

<form action="http://www.cmsware.com/publishapi/index.php?action=del&referer=http://www.cmsware.com/bbs&con=PostNews" method="post"

enctype="multipart/form-data" name="form1" target="_self">

是否删除:<input name="IndexID" type="radio" value="9527" />

<br />

<br />

<input type="submit" name="Submit" value="删除" />

</form>

当然我们也可以使用更简单的办法:

<a href="http://www.cmsware.com/publishapi/index.php?IndexID=9527&action=del&referer=http://www.cmsware.com/bbs&con=PostNews">删除IndexID=9527的文章
</a>

(因为PostNews.php在上面我们已经建立了,这儿继续使用)

以上是最简单的添加和删除,我们看一下编辑:

因为很多人对于编辑这一步骤非常迷惑,不明白怎么来生成这个表单,在此我们通过一个简单的例子来介绍编辑的应用,按理说来,这是在CMSWARE手册中有详细介绍的,但是为了消除大家的迷惑,我举下面这个简单的例子来让大家明白怎么让CMSWRAE发布出一个适时生成的符合PublishAPI规则的编辑表单。

比如我现在希望在前台中列出刚刚我们新增的1号结点的文章,并且使得前台用户可以编辑这些文章,这里我们假设我的网站域名为http://www.cmsware.com,PublishAPI的URL为http://www.cmsware.com/publishapi/? ,CMSware的Publish目录的URL为http://www.cmsware.com/publish/

1 、我们新建一个结点(假设这个结点的ID为2),结点名称为:列出文章,发布模式设置为“动态发布”,结点首页入口URL设置为http://www.cmsware.com/publish/index_nc.php/{NodeID},{Page}.html (index_nc.php是无缓存的动态发布) ,内容页入口URL随便填,无所谓, 首页模板使用/cmsware/index_2.html

2、我们再新建一个结点(假设这个结点的ID为3),结点名称为:编辑文章,发布模式设置为“动态发布”,结点首页入口URL设置为http://www.cmsware.com/publish/index_nc.php/{NodeID},{Page}.html,内容页入口URL随便填,无所谓, 首页模板使用/cmsware/index_3.html

3、编辑index_2.html,代码如下(单纯的CMSWARE语法)

<CMS action="List" return="list" NodeID="1" num="" />

<LOOP name="list" var="var" key="key">

<a href="[$var.URL]" target="_blank">[$var.Title]</a>  

<a href="http://www.cmsware.com/publish/index_nc.php/3,0,[$var.IndexID].html" target="_blank">编辑该文章</a><br />

</LOOP>

这样发布出一个每篇文章后面都会有一个“编辑该文章”的文章列表页,我们可以通过

http://www.cmsware.com/publish/index_nc.php/2,0.html

访问该列表页,而该列表页的所有“编辑”的链接都指向了3号结点的首页,也就是结点名称为“编辑文章”的这个结点的首页,而我们为什么可以指向同一个页面呢?这里就是动态发布的自定义字段在发挥优势了,我们在每一个 “编辑”的链接里多加了一个[$var.IndexID]的值,而这个值是可以在3号结点的模板中引用的,对于这个地方有任何不懂的,请参照:http://www.cmsware.com/cmsware/manual/source/Manual/part_2/part_2_dongtai.html

OK,接下来我们看我们怎么编辑3号结点的模板:

4、编辑index_3.html,代码如下(同样是单纯的CMSWARE语法,不过多了一个自定义值而已):

<if test="empty($Custom1)">

IndexID为空,请正确传入文章ID

<else>

<CMS action="CONTENT" return="var" IndexID="{$Custom1}" />

<form action="http://www.cmsware.com/publishapi/index.php?IndexID=[$var.IndexID]&action=edit&referer=http://www.cmsware.com/publish/index_nc.php
/2,0.html&con=PostNews" method="post" enctype="multipart/form-data" name="form1" target="_self">

标题:<input name="Title" type="text" size="50" maxlength="250" value="[$var.Title]" /><br />

标题颜色:<input name="TitleColor" type="text" size="10" maxlength="7" value="[$var.TitleColor]" /><br />

作者:<input name="Author" type="text" size="20" maxlength="20" value="[$var.Author]" /><br />

新闻图片:<input name="Photo" type="text" size="50" maxlength="250" value="[$var.Photo]" /><br />

新闻内容:<textarea name="Content" cols="50" rows="10">[$var.Content]</textarea><br />

关键字:<input name="Keywords" type="text" size="50" maxlength="250" value="[$var.Keywords]" /><br />

副标题:<input name="SubTitle" type="text" size="50" maxlength="250" value="[$var.SubTitle]" /><br />

来源网站:<input name="FromSite" type="text" size="50" maxlength="250" value="[$var.FormSite]" /><br />

责任编辑:<input name="Editor" type="text" size="20" maxlength="20" value="[$var.Editor]" /><br />

简介:<textarea name="Intro" cols="50" rows="7">[$var.Intro]</textarea>

<br />

置顶:<input name="Top" type="text" size="20" maxlength="20" value="[$var.Top]" /><br />

精华:<input name="Pink" type="text" size="20" maxlength="20" value="[$var.Pink]" /><br />

自定义发布文件名:<input name="SelfPublishFileName" type="text" size="20" maxlength="20" value="[$var.SelfPublishFileName]" /><br />

<br />

<input type="submit" name="Submit" value="提交" />

</form>

</if>

在3号结点首页里,将会首先判断是否有$Custom1值传入,我们这个例子中的$Custom1就是index_2.html中的[$var.IndexID],如果没有Custom1传入,则输出“IndexID为空,请正确传入文章ID”,如果有,则调用IndexID为$Custom1的值的文章数据生成一个编辑的表单,这个表单是按照本文档上面部份说明的规则而设计的,并且以紫色显示的代码表示了还可以让用户更改文章的置顶和精华,和自定义发布文件名这些系统变量。最后如果用户编辑好后,提交,API处理成功后,还会自动跳转到http://www.cmsware.com/publish/index_nc.php/2,0.html,因为我们定义了referer的值,这样,一个简单的外部编辑就实现了。

通过以上例子,相信大家明白了,构造表单这个步骤跟PublishAPI其实是没有多少关联的,只需要按照规则去做就可以,至于你是怎么生成的表单,PublishAPI并不关心。

五、高级应用(扩展配置文件使用)

前四部份主要说明了PublishAPI的一般运用,虽然已经可以用来让前台用户发表内容或删除内容等功能,但是毫无规则可言,比如现在我希望发布日期小于2007年3月1日的所有文章都不允许编辑和删除,那么我们又该怎么办?于是PublishAPI另外附加了扩展配置文件功能,使得这样的规则可以自行设计.

在了解本部份之前,请打开config目录中的example.php文件查看示例:

在文件中,开始部份定义了应用该扩展配置文件必须执行的代码,另外还有六个函数,分别为:add_start、add_end、edit_start、edit_end、del_start和del_end,大家可以从前面的介绍中了解到PublishAPI其实只实现了三个主要功能:添加、编辑、删除,这六个函数分别对应了添编删这三个功能,start类代表了该类操作前的预处理,end类代表了该类操作完成后的后续处理。

如果你希望新增一个配置文件,请按照以下规则制定:

1、将文件保存在config目录中,配置文件名可自行定义,可以为数字也可以为字符,以下为正确的配置文件名,注意大小写敏感:

PostNews.php

139.php

Cmspub123.php

在外部表单中可分别使用con= PostNews,con=139,con= Cmspub123来引用该配置。

所有的配置文件必须保存在config目录,配置文件数量没有限制,你可以随意新增和删除。

每个配置文件中都可以包括六个函数,函数名以及函数的定义方式应该跟示例文件完全相同:

add_start(&$var),add_end(&$var),edit_start(&$var),edit_end(&$var),del_start(&$var),del_end(&$var),

在函数中,$var是一个包含了所有从外部表单中传入的值的大数组,比如$var[‘Title’]就是外部表单中提交过来的Title,$var[‘IndexID’]就是外部表单中传入的IndexID等等。

任何写在函数外的代码,不管是执行添加,还是编辑,也或者删除操作,都会被执行,并且函数外的代码将会优先执行。

在函数外的代码中,所有传入的变量是保存在$IN这个大数组中,这一点请千万要谨记。

2、数据库的操作,可以用global声明直接将$db类作用于函数内部:

global $db;

$db类的方法函数主要有:

$db->getRow("MySql Query");?? //查询返回一行

$db->query("MySql Query");? //执行查询,返回查询资源ID

3、start类的函数主要用来实现数据判断等附属功能,而end类的函数主要用来刷新首页以及输出提交信息并跳转等功能。

4、如果要刷新结点首页,则像以下这样使用:

refresh_index($NodeID); //刷新结点ID号为$NodeID的值的结点首页

refresh_index(1); //刷新结点ID为1的首页

refresh_index(122);//刷新结点ID为122的首页

5、使用扩展配置文件:

只需要在外部表单中提交con的配置名称就可以非常方便的应用你所定义好的配置文件函数,系统会自动执行相应操作

例如:

<form action="http://www.cmsware.com/publishapi/index.php?IndexID=9527&action=add&con=PostNews&referer=http://www.cmsware.com/bbs"method="post"
 enctype="multipart/form-data">

或者

<form action="http://www.cmsware.com/publishapi/index.php?IndexID=9527&action=edit&con=139&referer=http://www.cmsware.com/bbs"method="post" 
enctype="multipart/form-data">

或者

<form action="http://www.cmsware.com/publishapi/index.php?IndexID=9527&action=del&referer=http://www.cmsware.com/bbs"method="post" 
enctype="multipart/form-data">

<input type="hidden" name="con" value="Cmspub123" />

</form>

三个表单就可分别应用PostNews.php,139.php,Cmspub123.php的扩展。

6、结束执行、显示提示信息并跳转

在扩展配置中,我们通常会对数据作出分析,以判断是否继续往下执行,如果遇到不符合条件的过程,我们希望立即结束API执行并显示提示信息,这时我们只需要一个简单的php函数即可完成:

smsg("删除失败,您并无删除权限", "http://www.cmsware.com");

这个函数,将会立即显示"删除失败,您并无删除权限"的提示信息,并结束API执行,最后跳转到http://www.cmsware.com;

提示信息页面样式也可自行制作,打开smsg.php可以自行修改。

还有另外一个函数:

gback("您填写的信息不正确,请返回重填!");

这个函数可以直接弹出一个警告窗口,输出函数内的字符串信息,结束执行,并返回表单提交页面。

该函数也可以打开smsg.php自行修改.

7、PublishAPI的权限判断:

在新版的OAS中,已提供了一个getuserinfo.php的文件,这是专门用来检测当前登陆用户信息的,如果你需要决定哪些用户能干某些事不能干某些事,登陆过的和未登陆过的又能做些什么,那么可以include该文件后,在PublishAPI的扩展配置文件中来操作,可以打开PublishAPI的config目录中的AccessCtrl.php文件查看示例!

六、附录

错误代码翻译(Error Code)::

1001:扩展配置文件名未传入,意思是con值没有被传入或者为空

1002:扩展配置文件不存在,意思是con值不正确,或者是该扩展配置在config目录中找不到

1003:结点ID号NodeID和索引ID号IndexID号不能同时为空

1004:索引ID号IndexID号错误

/*结束*/



参考来源

留言