Wagtail MultiSite - 交叉发布内容

Wagtail MultiSite - Cross posting content

我目前正在使用单个 Wagtail 安装构建两个站点。这些网站是为一家公司及其姊妹公司设计的,内容有些重叠。理想情况下,我们不想 post 相同的内容两次。特别是我们在两个网站上都有一个活动页面,可能会有与两家公司相关的活动。

问题是 Wagtail 页面一次只能存在于树中的一个位置。我考虑过为原始 EventPage 模型创建一个只有一个外键字段的 "MirroredEventPage" 模型,尽管这种方法在编写 EventIndex 页面和重用模板时存在问题。

我还考虑过将 Events 创建为普通 Django 模型,这也不理想。

有没有人遇到过类似的问题并找到好的解决方案?

一个想法是在您的活动索引页面上混合使用 Wagtail 代码段和 RoutablePageMixin

1.制作一个活动片段

将您的活动页面的共享内容制作成 Wagtail 代码段。您将失去访问更改版本的能力,但获得跨站点共享的能力。

http://docs.wagtail.io/en/v1.13/topics/snippets.html

2。更新您的事件索引页面模型以使用 RoutablePageMixin

http://docs.wagtail.io/en/v1.13/reference/contrib/routablepage.html

然后,如果事件索引页面有类似 mydomain.com/events/123-event-name-as-slug 的内容,您可以挂接到 URL 调用。这可以加载自定义模板(可以共享或不共享,具体取决于站点),其中包含通过上下文发送的事件索引和事件片段。

这些 URL 将是它们自己独特的 URL,但它们后面实际上没有页面。请记住考虑您的 SEO 影响,确保管理员编辑可以管理片段上的元描述等内容(或研究如何自动传播)。

你也可以hook到Wagtail按钮(叫做Wagtail Userbar),这样当编辑们点击前端的Wagtail按钮并点击'edit Event'时,它可以直接将他们带到管理中的Snippet编辑页面。

http://docs.wagtail.io/en/v1.13/reference/hooks.html#construct-wagtail-userbar

3。更新事件索引列表

如果在两个站点上都有一些您不想要的事件,您可以为您操作的两个站点添加复选框(默认情况下都勾选)。这意味着活动索引页面将只显示与该站点相关的活动。

您可以通过重写页面模型上的 serve 方法来做到这一点。

注意:在此示例中,您并未将每个事件明确链接到每个站点的事件索引页面。您只需加载相关事件的查询并将其传递给事件索引模板。

4.更复杂的集成

如果您真的想要每个站点下的每个 'Event' 单独的页面,您可以在代码段 create/edit/delete.

上创建自定义信号

Wagtail 信号简介: http://docs.wagtail.io/en/v1.13/reference/signals.html

您可能希望确保这些字段在页面编辑中不可编辑,但在片段下可编辑。然后你只需让事情与你的信号同步,有点乱,但在管理员中给你一个实际的 'Page'。