2011-06-01 87 views
3

我有一個Plone插件(通過Zope創建),其中包含Javascript和頁面模板文件。一些Javascript函數需要調用Python腳本(通過AJAX調用) - 如何在不通過ZMI的情況下將這些Python腳本包含在我的插件中?包含Python腳本和Plone插件

我有一個「瀏覽器」文件夾,其中包含一個「configure.zcml」文件 - 註冊資源目錄和我的模板文件。我會假設註冊python文件會類似於這個,或類似於JavaScript文件註冊的方式,但可能不是?

回答

6

您註冊Python作爲內容對象的意見:

<browser:page 
for="**INTERFACE**" 
name="**name**" 
class="**class**" 
attribute="**method**" 
permission="zope2.View" 
/> 

接口是你想擁有的視圖對象的接口, 是視圖名稱(即,http://path-to-object/@@name), 是您的腳本定義的Python類,屬性是類的可選方法(它默認爲__ 致電 __)。嚴格地說,我認爲是任何可調用的,不一定是一個類的方法。

這是一個腳本,我用了一個KSS動作(幾乎爲編寫自己的AJAX腳本,同樣的事情) - 類可能需要從BrowserView中繼承(PloneKSSView是,對於KSS視圖的專業化):

<browser:page 
for="Products.VirtualDataCentre.interfaces.IDDCode" 
name="getTableColumns" 
class="Products.VirtualDataCentre.browser.DDActions.DDActions" 
attribute="getTableColumns" 
permission="zope2.View" 
/> 

其中IDDCode是我所需要的視圖中的內容類型,並DDActions.py有:

from Products.Five import BrowserView 
from plone.app.kss.plonekssview import PloneKSSView 
class DDActions(PloneKSSView): 
    def getTableColumns(self, table, currValue, currLabel): 
     columns = self.context.getColumnNames(table) 
     for (field, curr) in [('valueColumn', currValue), ('labelColumn',currLabel)]: 
      self.replaceSelect(field, columns, (curr or self.context[field])) 
+0

@blacksheep看到修改後的答案 – Auspex 2011-06-01 20:00:05

+0

正是我在找什麼!謝謝! – lightningmanic 2011-06-01 20:12:42