敏捷需要Plone4.1才能与原型内容配合使用并拥有所有plone功能(历史,差异,锁定......)
我正在考虑在新网站中使用Dexterity,以及标准的Archetypes对象,如Pages,Files等.但是,我无法找到列出可能引发的问题的页面.
我知道Dexterity/Archetypes在网站上一起玩得很好,例如两种内容类型之间的引用.我想知道这是否还是一个问题(看起来好像已经修好了),以及在与Dexterity潜水之前我应该注意的其他问题.
最初我的想法是使用Dexterity 1.0和Plone 4.1附带的Archetypes版本,但我愿意接受建议(例如,版本1.0-next for Dexterity).
我们正在实施Plone CMS作为ISO9001文档的存储库.
ISO需要一定量的日志记录,因为任何熟悉该标准的人都可能知道:-)
为了灵活性,我们希望不按特定顺序加入:
因此,工作流优化的圣杯应该是(如果我错了,请纠正我):
问题是不同产品的整合:
我搜索了google-realm并且已经找到了这些链接:
我们还检查了:
这些都是安装和配置的......
但是,我的新内容类型不允许结帐/签入(迭代产品),并且历史视图中也没有跟踪此相同内容类型的版本/更改.
他们是一个神奇的序列,或者我错过了什么(或者很多 - 更有可能)?因为如果所有这些产品都是"开箱即用"的,我认为这是所有工作流程的一个解决方案......
另外2012/04/17:正如他们所说,堆栈已经完成
我想列出一个dexterity对象的所有字段(和值).
我可以轻松访问这样的单个字段值 myobject.myfield
但我不知道如何列出对象的所有可用字段.
我希望为我的基于Dexterity的自定义内容类型的属性('sector')启用一个名为Sectors的特殊索引.
在我的架构中,在types/mycontent.py中我有:
class IMyContent(form.Schema):
"""
My Content
"""
sectors = schema.Set(
title=_(u"Sectors"),
description=_(u"Select some sectors"),
value_type=schema.Choice(vocabulary=vocs.sectors),
required=True,
)
(...)
Run Code Online (Sandbox Code Playgroud)
然后我在indexers.py中以这种方式定义索引
from plone.indexer.decorator import indexer
from zr.content.types.mycontent import IMyContent
@indexer(IMyContent)
def Sectors(obj):
"""Indexer for Sectors attribute.
"""
d = getattr(obj, "sectors", u"")
return d if d else None
Run Code Online (Sandbox Code Playgroud)
最后在root包configure.zcml中:
<adapter name="Sectors" factory=".indexers.Sectors"/>
Run Code Online (Sandbox Code Playgroud)
但是,它似乎不起作用.即使重新安装产品后,我也看不到portal_catalog和catalog脑对象中的索引似乎也没有.
我究竟做错了什么?
我正在开发的项目使用了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行为吗?
非常感谢您的帮助,谢谢!
我有点像Plone的新手,我试图将DataGridField与Dexterity一起使用.目标是使用Plone 4.1在我们的Intranet上发布可用性研究的结果.我已经创建了一个自定义文档类型(称为交互),我想在其中一个字段中使用datagrid来建模一个包含两列显示结果摘要的表.
根据collective.z3cform.datagridfield中列出的说明,我已成功将collective.z3cform.datagrid egg添加到我的buildout中的egg列表中,我可以看到新的Add-on在我的附加组件列表中显示为Active对于我的网站.我已经创建了一个简单的模式Python模块,它描述了一个文档,显示了我正在记录的可用性研究的结果:
from five import grok
from zope import schema
from zope import interface
from plone.directives import form
from plonetheme.mytheme import InteractionMessageFactory as _
from plone.app.textfield import RichText
from z3c.form import field, button
from Products.CMFCore.interfaces import IFolderish
from collective.z3cform.datagridfield import DataGridFieldFactory, DictRow
class IFinding(interface.Interface):
summary = schema.TextLine(title=_(u"Summary"))
percentage = schema.TextLine(title=_(u"Percentage"))
class IInteraction(form.Schema):
findings = schema.List(
title=_(u"Overview of findings"),
required=False,
value_type=DictRow(
title=_(u"Finding"),
schema=IFinding
)
)
class EditForm(form.EditForm):
grok.context(IInteraction)
grok.require('zope2.View')
fields = field.Fields(IInteraction)
fields['findings'].widgetFactory = DataGridFieldFactory
Run Code Online (Sandbox Code Playgroud)
我通过在profiles/default/types.xml中添加一行来注册我的新交互内容类型:
<?xml …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Plone插件,需要为Dexterity内容重新设置皮肤替代编辑表单.我需要能够在AJAX覆盖中仅显示编辑表单的一部分(使用JQuery UI,而不是JQuery工具,因此在服务器端执行似乎比在JavaScript中过滤更合理)**.
来自Dexterity Developer's Guide的文档似乎表明我可以使用宏来创建自定义模板.但是,本节中缺少一些东西 - 对于不使用grok来绑定视图的人来说可能是一些关键的上下文,但也许还有其他东西.创建一个仅模板的视图失败(显然无法从视图类中找到名称),并且尝试将ZCML中的自定义模板绑定到stock视图类或它的子类都失败(忽略模板以支持股票模板).
我的目标:
什么行不通:
from plone.dexterity.browser.edit import DefaultEditForm
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
class MyEditForm(DefaultEditForm):
index = ViewPageTemplateFile('my_edit_template.pt')
Run Code Online (Sandbox Code Playgroud)
ZCML等价物(使用运行时魔术定义索引)在这里也不起作用.
如何将自定义模板注入编辑表单?
**我正在研究Solgema.fullcalendar与plone.app.event基于Dexterity的类型的兼容性.Solgema.fullcalendar使用jQuery UI弹出窗口,而不是plone.app.jquerytools叠加助手; 为了保持一致性,有了这个最小视图并且不试图模仿普通Plone叠加的JavaScript中的过滤机制是有意义的.
我一直致力于基于灵巧的plone应用程序.我创建了几种新类型.这就是我激活对名为"activity_report"的特定敏捷内容类型的评论所做的工作:
在Plone控制面板中
在讨论部分,我启用了以下内容:
在类型部分中,我从下拉列表中选择了"活动报告"类型,并启用了"允许评论"选项.
在文件系统上
在FTI文件activityreport.xml中:
<property name="allow_discussion">True</property>
Run Code Online (Sandbox Code Playgroud)
我重新启动了实例,甚至重新安装了产品,但我无法激活dexterity类型的评论部分.
值得一提的是,标准类型(例如Page)可以激活讨论模块.
有什么我想念的吗?
我正在尝试在创建Dexterity内容类型后执行一些任意代码.例如,内容类型可以代表马.
import logging
logger = logging.getLogger("Plone")
class IHorse(form.Schema):
def __init__(self, context):
logger.info('Creating horse')
super(self).init(self, context)
Run Code Online (Sandbox Code Playgroud)
我想在前台运行应用程序时在控制台中打印记录器消息"Creating horse".但马是创造的,我没有得到它的消息.我猜内容类型对象是由它创建的__init__,但也许我错了.
我有一个表单模式,它继承自另一个表单模式.两者都有字段集.但是,字段集按其创建顺序放置.因此,最后一个模式中描述的字段集将是最后一个.我希望它成为第一个.有没有办法做到这一点 ?
例:
from plone.supermodel import model
from zope import schema
class FormSchema(model.Schema):
model.fieldset(
'test',
label='Test',
fields=['field1']
)
field1 = schema.Text(title=u'test')
class FormSchema2(FormSchema):
# Is last but I would like to place it first
model.fieldset(
'test2',
label='Test2',
fields=['field2']
)
field2 = schema.Text(title=u'test2')
Run Code Online (Sandbox Code Playgroud)