修改 Wagtail 发布下拉列表(每个应用程序)
Modifying the Wagtail publish dropdown (per app)
我想重新配置默认 "Publish" 菜单。默认配置是这样的:
我想让发布成为默认操作,并将其移至顶部。我还想删除“提交审核”,因为我们的网站目前不需要该功能。
理想情况下,我希望能够在每个应用程序的基础上覆盖菜单配置 - 将来我们可能会在网站的其他部分设置不同的配置。
这可能吗?
恐怕目前不可能 - 菜单项已固定在 wagtailadmin/pages/create.html and edit.html。
根据 ,从 Wagtail 2.4 开始,使用 register_page_action_menu_item
钩子是可能的。此外,Wagtail 2.7(在撰写本文时未发布)提供了一个 construct_page_listing_buttons
钩子来修改现有选项。
您可以通过在 wagtail 钩子的帮助下注册自定义菜单项来向操作菜单添加新项。
为此,请在您现有的任何 Django 应用程序中创建一个名为 wagtail_hooks.py
的文件。
from wagtail.core import hooks
from wagtail.admin.action_menu import ActionMenuItem
class GuacamoleMenuItem(ActionMenuItem):
label = "Guacamole"
def get_url(self, request, context):
return "https://www.youtube.com/watch?v=dNJdJIwCF_Y"
@hooks.register('register_page_action_menu_item')
def register_guacamole_menu_item():
return GuacamoleMenuItem(order=10)
如果您想删除现有的菜单项:
@hooks.register('construct_page_action_menu')
def remove_submit_to_moderator_option(menu_items, request, context):
menu_items[:] = [item for item in menu_items if item.name != 'action-submit']
默认按钮 SAVE DRAFT
仍然是硬编码的,因此无法轻松配置。参见 here。
如果不进行一些猴子修补,似乎无法在服务器端完成。
但是,如果您自己想要它(或者可以访问那些将要发布的人的计算机),您可以改为修改您的浏览器。
- 安装Tampermonkey浏览器插件
- 使用以下内容创建新脚本
- 将
http://127.0.0.1:8000/admin/*
更改为您的 wagtail 管理面板 url 模式
- 保存脚本并检查管理面板
结果应如下所示:
// ==UserScript==
// @name Wagtail: replace "Save draft" with "Publish"
// @match *://127.0.0.1:8000/admin/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
// ==/UserScript==
let $ = window.jQuery;
function modify() {
let draft = $("button.button-longrunning:contains('Save draft')");
let publish = $("button.button-longrunning:contains('Publish')");
if (draft.length && publish.length) {
swap(publish, draft);
}
};
function swap(a, b) {
a = $(a); b = $(b);
var tmp = $('<span>').hide();
a.before(tmp);
b.before(a);
tmp.replaceWith(b);
};
$(document).ready(function() {
setTimeout(function() {
try {
modify();
}
catch (e) {
console.error(e, e.stack);
}
}, 100);
});
修改上面的代码,这些选择器适用于所有管理语言:
let draft = $("button.button-longrunning.action-save");
let publish = $("button.button-longrunning[name='action-publish']");
我想重新配置默认 "Publish" 菜单。默认配置是这样的:
我想让发布成为默认操作,并将其移至顶部。我还想删除“提交审核”,因为我们的网站目前不需要该功能。
理想情况下,我希望能够在每个应用程序的基础上覆盖菜单配置 - 将来我们可能会在网站的其他部分设置不同的配置。
这可能吗?
恐怕目前不可能 - 菜单项已固定在 wagtailadmin/pages/create.html and edit.html。
根据 register_page_action_menu_item
钩子是可能的。此外,Wagtail 2.7(在撰写本文时未发布)提供了一个 construct_page_listing_buttons
钩子来修改现有选项。
您可以通过在 wagtail 钩子的帮助下注册自定义菜单项来向操作菜单添加新项。
为此,请在您现有的任何 Django 应用程序中创建一个名为 wagtail_hooks.py
的文件。
from wagtail.core import hooks
from wagtail.admin.action_menu import ActionMenuItem
class GuacamoleMenuItem(ActionMenuItem):
label = "Guacamole"
def get_url(self, request, context):
return "https://www.youtube.com/watch?v=dNJdJIwCF_Y"
@hooks.register('register_page_action_menu_item')
def register_guacamole_menu_item():
return GuacamoleMenuItem(order=10)
如果您想删除现有的菜单项:
@hooks.register('construct_page_action_menu')
def remove_submit_to_moderator_option(menu_items, request, context):
menu_items[:] = [item for item in menu_items if item.name != 'action-submit']
默认按钮 SAVE DRAFT
仍然是硬编码的,因此无法轻松配置。参见 here。
如果不进行一些猴子修补,似乎无法在服务器端完成。
但是,如果您自己想要它(或者可以访问那些将要发布的人的计算机),您可以改为修改您的浏览器。
- 安装Tampermonkey浏览器插件
- 使用以下内容创建新脚本
- 将
http://127.0.0.1:8000/admin/*
更改为您的 wagtail 管理面板 url 模式 - 保存脚本并检查管理面板
结果应如下所示:
// ==UserScript==
// @name Wagtail: replace "Save draft" with "Publish"
// @match *://127.0.0.1:8000/admin/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
// ==/UserScript==
let $ = window.jQuery;
function modify() {
let draft = $("button.button-longrunning:contains('Save draft')");
let publish = $("button.button-longrunning:contains('Publish')");
if (draft.length && publish.length) {
swap(publish, draft);
}
};
function swap(a, b) {
a = $(a); b = $(b);
var tmp = $('<span>').hide();
a.before(tmp);
b.before(a);
tmp.replaceWith(b);
};
$(document).ready(function() {
setTimeout(function() {
try {
modify();
}
catch (e) {
console.error(e, e.stack);
}
}, 100);
});
修改上面的代码,这些选择器适用于所有管理语言:
let draft = $("button.button-longrunning.action-save");
let publish = $("button.button-longrunning[name='action-publish']");