-2

ファイルシステムにあるメソッドを TAL ポートレット (によって利用可能collective.portlet.tal) から呼び出すにはどうすればよいですか?

これが私が行った方法です: 新しい BrowserView (createPictMenu.py私の場合) を定義し、それを新しいポートレット コンポーネントのレンダラーとして登録しました。

class AddressTAL(BrowserView)

    def my_address()
        address_bar = ViewTemplatePageFile('templates/address_left.pt') # this 
         is the page template I want for my new portlet.

そしてでconfigure.zcml

<plone:portlet
    name="collective.portlet.tal.TALPortlet"
    interface="collective.portlet.tal.talportlet.ITALPortlet"
    assignment="collective.portlet.tal.talportlet.Assignment"
    view_permission="zope2.View"
    edit_permission="cmf.ManagePortal"
    renderer=".browser.createPictMenu.AddressTAL"
    addview="collective.portlet.tal.talportlet.AddForm"
    editview="collective.portlet.tal.talportlet.EditForm"
    />

次に、localhost:8080/myproject/@@manage-portlets に移動し、TAL Portlet option[ポートレットの追加] ドロップダウン リストから を選択しました。タイトルを住所として通知し、説明のために以下のスニペットを挿入して呼び出しますaddress_tal()

<span tal:define="global li view/myaddress">
    <span tal:replace="structure li" /> 
</span> 

残念ながら、うまくいきませんでした。助けてください。

4

2 に答える 2

0

クラス AddressTAL を plone:portlet ディレクティブではなく、browser:view ディレクティブで登録する必要があります。このような:

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:browser="http://namespaces.zope.org/browser">

  <browser:page
      name="address-view"
      class=".browser.createPictMenu.AddressTAL"
      for="*"
      permission="zope2.View"
      />

</configure>

そして、次のように呼び出します。

<div tal:define="my_address python:context.restrictedTraverse('@@address-view').my_address()" >
    Your method returns <span tal:content="my_address" />
</div>

または:

<div tal:define="address_view context/@@address-view" >
    Your method returns <span tal:content="address_view/my_address" />
</div>
于 2013-08-29T09:20:17.540 に答える