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'。
我目前正在使用单个 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'。