我正在尝试在 Plone 3 中自定义“事件”portlet,以显示即将发生的事件。该 portlet 页脚中的“查看”链接转到 /events URL。但我的网站是多语言的,因此 URL 并不总是正确的。例如,荷兰活动的正确 URL 应为 /evenementen。

在我的设置中,我对每种语言使用一个文件夹。/en 包含所有英语内容,/nl 包含所有荷兰语内容,等等。plone 根没有 portlet,因此我将“Event”portlet 分别添加到 /nl 和 /en 文件夹中。我在 ZMI 的 events.pt 模板中查找,它似乎从属性中获取 URL,但是该属性定义在哪里以及如何更改它?我在 ZMI 中找不到 portlet 配置。以下是来自 plone.app.portlets.portlets/events.pt 的片段:

<dd class="portletFooter">
    <a href=""
       class="tile"
       tal:attributes="href view/all_events_link"
       i18n:translate="box_upcoming_events">
            Upcoming events&hellip;
    </a>
    <span class="portletBottomLeft"></span>
    <span class="portletBottomRight"></span>
</dd>

那么,我可以在 ZMI 中更改 all_events_link 属性吗?如果是的话,在哪里?

作为替代方案,我还尝试添加一个“Collection”portlet,其中包含列出所有事件的集合。但问题是集合 portlet 不想显示事件的开始日期和结束日期。

有帮助吗?

解决方案

事件 portlet 使用视图为其提供数据,并且表达式“view/all_events_link”调用 该视图上的方法 为其提供链接。您有 2 个选项来替换该链接:

  1. 注册您自己的事件 portlet,该事件 portlet 是旧事件 portlet 的子类,并替换 all_events_link 方法。这是重度定制选项,并且需要 Python 编码。看 这个邮件线程 关于如何实现这一目标的一些一般性指导。

  2. 仅用 portlet 渲染器替换模板。马丁·阿斯佩利有 在 Plone.org 上记录了此方法;这仅需要一些 ZCML 配置即可开始工作。然后,您可以复制 events.pt 模板,并将 portlet 页脚替换为链接到正确位置的模板。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top