4

我想在导入步骤中执行部分代码,前提是产品本身尚未安装。

我尝试使用快速安装工具的“listInstalledProduct”方法。

但是,这将返回所有已安装的产品,但不会返回我自己的产品。

如果我的产品已安装在站点中,如何检查?

4

2 回答 2

5

在 Anne Walther(又名“ahello”)的正确提示下,我可以找到解决方案:

from Products.CMFCore.utils import getToolByName
def myMethod(context):
    qi = getToolByName(context, 'portal_quickinstaller')

    prods = qi.listInstallableProducts(skipInstalled=False)

    for prod in prods:
        if (prod['id'] == 'your.productname') and (prod['status'] == 'new'):
        # further code...

无论出于何种原因,幸运的是,重新安装期间产品的状态将返回“未安装”,尚未安装的产品返回“新”状态,最后已经安装站点的产品大声喊叫:“已安装” .

这样就可以将重新安装与初始安装区分开来。

于 2012-11-07T14:47:38.200 回答
0

在 Plone 5 中做同样的事情,我在以下位置管理 Ida Ebkes 代码:

from plone import api

def myMethod(context):

    portal = api.portal.get()
    qi = api.portal.get_tool('portal_quickinstaller')
    prods = qi.listInstallableProducts(skipInstalled=False)

    IsProductNameInstalled = len([k for k in prods if k['id']=='your.productname' and k['status']=='new']) == 0 and True or None

    if IsProductNameInstalled:
        # further code...

于 2019-11-08T12:00:36.893 回答