Включить скрипты Python с дополнением Plone - PullRequest
3 голосов
/ 01 июня 2011

У меня есть Plone Add-on (созданный с помощью Zope), который включает в себя Javascript и файлы шаблонов страниц. Некоторые функции Javascript должны вызывать скрипты Python (через вызовы AJAX) - как включить эти скрипты Python в мою надстройку, не проходя через ZMI?

У меня есть папка «browser», в которой находится файл «configure.zcml» - для регистрации каталогов ресурсов и файлов моего шаблона. Я хотел бы предположить, что регистрация файлов Python будет похожа на это, или похожа на способ регистрации файлов Javascript, но, возможно, нет?

1 Ответ

7 голосов
/ 01 июня 2011

Вы регистрируете свой питон как Views для объекта содержимого:

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

Где INTERFACE - это интерфейс объекта, вид которого вы хотите видеть, name - это имя представления (т. Е. http://path-to-object/@@name), class - это класс Python, в котором определен ваш скрипт, а attribute - необязательный метод класса (по умолчанию __ вызов __ ).Строго говоря, я думаю, что class - это любой вызываемый объект, не обязательно метод класса.

Это скрипт, который я использую для действия 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]))
...