我们有一个包含多个编辑器的Wagtail网站,我想知道如何在Wagtail CMS中防止同一页面编辑冲突?
我知道Wagtail具有内置页面锁定source,但是这会锁定所有人的页面并阻止所有编辑。
锁定或解锁此页面(及其下的任何页面)以进行编辑的功能,从而防止用户对其进行任何进一步的编辑。
我发现https://github.com/wagtail/wagtail/issues/448似乎可以解决我的问题,但尚未解决。
我想知道
- 如何防止两个或多个编辑者使用Wagtail CMS同时编辑同一页面?
或者如果1.太复杂而无法实现
- 如何在Wagtail UI中检测页面编辑冲突并警告编辑器它们可能正在编辑同一页面?
1 个答案:
答案 0 :(得分:0)
为了警告版本之前或完全阻止版本,我认为您最好的选择是before_edit_page挂钩(尽管要小心,它同时在GET和POST请求上运行),因为无法在上使用自定义页面权限时刻。
这仍然给我们提出了一个更大的问题,即如何检测用户正在编辑页面?没有内置的功能,不幸的是,我认为没有简单的解决方案。这里有一些想法:
钩子:使用before_edit_page和after_edit_page钩子设置某种标志,我们称之为软锁定。但是,这种方法很快就无法实现,如果用户在不保存任何更改的情况下关闭页面怎么办(永远不会调用after_edit_page,并且永远不会删除软锁标志)怎么办?可以实施超时,但是在有人编辑页面时(但要花费很长时间)它仍然可能超时,或者由于他们需要等待超时而仍会浪费时间。
Ping:注入一些JavaScript(通过insert_editor_js钩子),以对当前用户和页面ID的自定义端点执行ping操作。这比挂机和超时选项使用的频率要精确得多。
手动创建一些自定义的软锁定/软解锁操作(通过register_page_listing_buttons和register_page_listing_more_buttons挂钩)以手动使用。
编辑:有一个新的有趣的程序包Wagtail-Websockets可能只是解决了这个问题。