發佈管理APIPublishAPI)文檔

PublishAPI是完全基於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,在其中手工輸入表單的源代碼,最終只需要將formaction按照規則指向PublishAPIindex.php文檔就行,當然也可以通過CMSware的發佈功能,直接在模板中採用普通的CMSWARE模板語法發佈出一個具有表單的頁面,這兒一般要用到CMSWARE動態發佈來發佈表單,至於動態發佈怎麼使用,詳情請查看:
http://www.lonmo.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=editdel時,該值不可省略,因為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 1121084830秒,並且在擴展配置文檔中的變量定義權重大於外部表單中提交的變量,也就是說如果外部表單中和擴展配置文檔中同時都定義了某一個相同的值,API將以擴展配置文檔中的為準,這樣在設計時,管理員可以將一些用戶不可提交或者不可修改的字段全部寫死在擴展配置文檔中。

 

提交數據:

       當外部表單中的數據已被填寫,準備提交時,建議根據上面的介紹,使用JS首先作一些初步的數據判斷,以免增加不必要的誤操作。

       比如:IndexIDNodeID的取值範圍,不能同時為空,action的值不同時對於二者的是否必需填寫的要求也不同等等

       對於默認的新聞模型的Title字段,應該使得Titlevaluelength不大於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>

這樣我們的表單已經構造完成,現在只需要在PublishAPIconfig目錄中,新建一個名稱為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.comPublishAPIURLhttp://www.cmsware.com/publishapi/  ,CMSwarePublish目錄的URLhttp://www.cmsware.com/publish/
1
、我們新建一個結點(假設這個結點的ID2),結點名稱為:列出文章,發佈模式設置為「動態發佈」,結點首頁入口URL設置為http://www.cmsware.com/publish/index_nc.php/{NodeID},{Page}.html (index_nc.php是無緩存的動態發佈) ,內容頁入口URL隨便填,無所謂, 首頁模板使用/cmsware/index_2.html

2、我們再新建一個結點(假設這個結點的ID3,結點名稱為:編輯文章,發佈模式設置為「動態發佈」,結點首頁入口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>&nbsp;&nbsp;

<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.lonmo.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的一般運用,雖然已經可以用來讓前台用戶發表內容或刪除內容等功能,但是毫無規則可言,比如現在我希望發佈日期小於200731的所有文章都不允許編輯和刪除,那麼我們又該怎麼辦?於是PublishAPI另外附加了擴展配置文檔功能,使得這樣的規則可以自行設計.

在瞭解本部份之前,請打開config目錄中的example.php文檔查看示例:

在文檔中,開始部份定義了應用該擴展配置文檔必須執行的代碼,另外還有六個函數,分別為:add_startadd_endedit_startedit_enddel_startdel_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);  //刷新結點ID1的首頁

refresh_index(122);  //刷新結點ID122的首頁

 

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.php139.phpCmspub123.php的擴展。

      

6、  結束執行、顯示提示資訊並跳轉

在擴展配置中,我們通常會對數據作出分析,以判斷是否繼續往下執行,如果遇到不符合條件的過程,我們希望立即結束API執行並顯示提示資訊,這時我們只需要一個簡單的php函數即可完成:

smsg("刪除失敗,您並無刪除權限", "http://www.cmsware.com");

這個函數,將會立即顯示"刪除失敗,您並無刪除權限"的提示資訊,並結束API執行,最後跳轉到http://www.cmsware.com;

提示資訊頁面樣式也可自行製作,打開smsg.php可以自行修改。

 

              還有另外一個函數:

              gback("您填寫的資訊不正確,請返回重填!");

              這個函數可以直接彈出一個警告窗口,輸出函數內的字符串資訊,結束執行,並返回表單提交頁面。

              該函數也可以打開smsg.php自行修改.

       7PublishAPI的權限判斷:

              在新版的OAS中,已提供了一個getuserinfo.php的文檔,這是專門用來檢測當前登陸用戶資訊的,如果你需要決定哪些用戶能幹某些事不能幹某些事,登陸過的和未登陸過的又能做些什麼,那麼可以include該文檔後,在PublishAPI的擴展配置文檔中來操作,可以打開PublishAPIconfig目錄中的AccessCtrl.php文檔查看示例!

 

五、附錄

       錯誤代碼翻譯(Error Code):

              1001:擴展配置文檔名未傳入,意思是con值沒有被傳入或者為空

              1002:擴展配置文檔不存在,意思是con值不正確,或者是該擴展配置在config目錄中找不到

              1003:結點IDNodeID和索引IDIndexID號不能同時為空

              1004:索引IDIndexID號錯誤

             

 

 

 

/*結束*/

最後修改於2007-7-10 13:04

最後修改:技術幻想(AT)