我有一个新的 Plone-4.1.5 站点,安装了 Linguaplone-4.1.1,选择了两种语言并将首页翻译成另一种语言。
当通过控制面板将工作流从 simple_workflow 更改为 intranet_workflow 并将旧状态映射到新状态时,只有当前所选语言的对象才能获得新映射。其他语言的对象获得新工作流的初始状态。
是否可以通过编程方式进行映射来克服这个问题?
我有一个新的 Plone-4.1.5 站点,安装了 Linguaplone-4.1.1,选择了两种语言并将首页翻译成另一种语言。
当通过控制面板将工作流从 simple_workflow 更改为 intranet_workflow 并将旧状态映射到新状态时,只有当前所选语言的对象才能获得新映射。其他语言的对象获得新工作流的初始状态。
是否可以通过编程方式进行映射来克服这个问题?
在这种情况下,最简单的方法就是修补重新映射工作流的代码。
打开plone.app.workflow
egg(它的路径将在你的bin/instance
脚本中列出),找到plone/app/workflow/remap.py
文件并编辑它。
大约在中途您会发现以下行(我的副本中的第 79 行):
for brain in portal_catalog(portal_type=type_ids):
并补充Language='all'
:
for brain in portal_catalog(portal_type=type_ids, Language='all'):
另一种方法是将整个文件复制到您自己的项目中,在本地进行更改,然后使用以下命令调用它:
statemap = {
'oldstate1_id': 'newstate1_id',
'oldstate2_id': 'newstate2_id'
}
chain_name = ('workflow_id',) # tuple of wf ids (can be empty), or the string '(Default)'
portal_types = ('sequence', 'of', 'portal_types')
copiedremap.remap_workflow(portal, portal_types, chain_name, state_map)
然后remap_workflow
脚本使用对象的当前状态来查找它在新目标工作流中应该具有的新状态(它将为每个新工作流执行此操作);如果旧状态未在地图中列出,它将使用目标工作流的初始状态。