mma*_*nez 7 behavior plone adapter dexterity
我正在开发的项目使用了Plone令人敬畏的Dexterity插件.我的一些自定义内容类型具有必须计算的非常具体的名称.我之前完成此操作的方法是将plone.app.content.interfaces.INameFromTitle添加为对象的通用设置条目中的行为,按照手册的说明:
<?xml version="1.0"?>
<object name="avrc.aeh.cycle" meta_type="Dexterity FTI">
...
<property name="schema">myproject.mytype.IMyType</property>
<property name="klass">plone.dexterity.content.Item</property>
...
<property name="behaviors">
<element value="plone.app.content.interfaces.INameFromTitle" />
</property>
...
</object>
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个提供INameFromTitle的适配器:
from five import grok
from zope.interface import Interface
import zope.schema
from plone.app.content.interfaces import INameFromTitle
class IMyType(Interface):
foo = zope.schema.TextLine(
title=u'Foo'
)
class NameForMyType(grok.Adapter):
grok.context(IMyType)
grok.provides(INameFromTitle)
@property
def title(self):
return u'Custom Title %s' % self.context.foo
Run Code Online (Sandbox Code Playgroud)
此方法与此博客文章中建议的方法非常相似:
http://davidjb.com/blog/2010/04/plone-and-dexterity-working-with-computed-fields
不幸的是,这个方法在plone.app.dexterity beta之后停止工作,现在我的内容项没有正确分配它们的名字.
有人会碰巧知道如何为非常具体的命名用例扩展Dexterity的INameFromTitle行为吗?
非常感谢您的帮助,谢谢!
你可以尝试以下方法。
在接口.py
from plone.app.content.interfaces import INameFromTitle
class INameForMyType(INameFromTitle):
def title():
"""Return a custom title"""
Run Code Online (Sandbox Code Playgroud)
在行为.py
from myproject.mytype.interfaces import INameForMyType
class NameForMyType(object):
implements(INameForMyType)
def __init__(self, context):
self.context = context
@property
def title(self):
return u"Custom Title %s" % self.context.foo
Run Code Online (Sandbox Code Playgroud)
我通常更喜欢使用 ZCML 定义我的适配器;在configure.zcml中
<adapter for="myproject.mytype.IMyType"
factory=".behaviors.NameForMyType"
provides=".behaviors.INameForMyType"
/>
Run Code Online (Sandbox Code Playgroud)
但您也可以使用 grok.global_adapter。
| 归档时间: |
|
| 查看次数: |
1532 次 |
| 最近记录: |