You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Plone 6插件的控制台脚本中访问站点?

在Plone 6控制台脚本中访问Plone站点

在Plone 6中,你可以通过Zope 5的API初始化应用环境并获取Plone站点,替代Plone 4中的get_plone_site功能。以下是完整实现方案:

完整脚本示例 (my/addon/scripts/do_something.py)

from zope.app.appsetup.bootstrap import ensureRootFolder
from zope.app.wsgi import WSGIPublisherApplication
from Products.CMFPlone.Portal import PloneSite
import transaction
import argparse
import os

def get_plone_site(app, site_id='Plone'):
    """获取指定ID的Plone站点,未指定则返回第一个找到的Plone站点"""
    # 优先查找指定ID的站点
    if site_id in app:
        site = app[site_id]
        if isinstance(site, PloneSite):
            return site
    # 遍历根目录查找第一个Plone站点
    for obj in app.values():
        if isinstance(obj, PloneSite):
            return obj
    raise ValueError("未找到可用的Plone站点")

def main():
    parser = argparse.ArgumentParser(description="Plone控制台脚本示例")
    parser.add_argument('--site-id', default='Plone', help='目标Plone站点的ID')
    parser.add_argument('--zodb-path', default='var/filestorage/Data.fs', help='ZODB文件路径或ZEO连接字符串')
    parser.add_argument('--zope-config', default='etc/zope.ini', help='Zope配置文件路径')
    args = parser.parse_args()

    # 设置环境变量,让Zope应用加载正确配置
    os.environ['ZEO_CLIENT'] = args.zodb_path
    os.environ['ZAPP_CONFIG'] = args.zope_config

    # 初始化Zope应用实例
    app = WSGIPublisherApplication()
    ensureRootFolder(app)

    try:
        # 获取Plone站点
        site = get_plone_site(app, args.site_id)
        print(f"成功连接到Plone站点: {site.id}")

        # --------------------------
        # 在这里编写你的业务逻辑
        # 示例:获取站点标题
        print(f"当前站点标题: {site.title}")
        # 示例:创建新文档
        # doc = site.invokeFactory('Document', id='new-doc', title='新文档')
        # transaction.commit()  # 有数据修改时需提交事务
        # --------------------------

    finally:
        # 关闭ZODB连接,避免资源泄漏
        app._p_jar.close()

if __name__ == '__main__':
    main()

关键说明

  1. 环境初始化:

    • 通过WSGIPublisherApplication()初始化Zope应用,这是Plone 6推荐的WSGI兼容方式
    • ensureRootFolder(app)确保Zope根目录存在,避免初始化错误
  2. 站点查找逻辑:

    • 优先按指定site_id查找站点,适配多站点部署场景
    • 未找到指定ID时,自动遍历根目录返回第一个Plone站点实例
  3. 事务与资源管理:

    • 若脚本修改了Plone数据,必须调用transaction.commit()提交更改
    • 最终通过app._p_jar.close()关闭ZODB连接,防止资源泄漏
  4. 运行注意事项:

    • 优先在Plone实例根目录下运行脚本,或通过--zodb-path和--zope-config指定正确路径
    • 若使用ZEO集群,将--zodb-path设为ZEO连接字符串(如zeo://localhost:8100)

内容的提问来源于stack exchange,提问作者GhitaB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:04:50