Изменение раскрывающегося списка публикации Трясогузки (для каждого приложения)

Я хотел бы перенастроить меню "Опубликовать" по умолчанию. Конфигурация по умолчанию такова:

Меню публикации по умолчанию

Я хотел бы сделать Publish действием по умолчанию и переместить его вверх. Я также хотел бы удалить функцию «Отправить на модерацию», так как в настоящее время нашему сайту эта функция не нужна.

В идеале я хотел бы иметь возможность переопределять конфигурацию меню для каждого приложения — скорее всего, в будущем у нас будут другие разделы нашего сайта, где нам нужна другая конфигурация.

Это возможно?


person shacker    schedule 06.01.2017    source источник


Ответы (4)


Боюсь, в настоящее время это невозможно — пункты меню исправлены в wagtailadmin/pages/create.html и edit.html.

Это возможно, начиная с трясогузки 2.4, используя хук register_page_action_menu_item, согласно ответу Янника Хаманна. Кроме того, трясогузка 2.7 (не выпущенная на момент написания статьи) предоставляет хук construct_page_listing_buttons для изменения существующих параметров.

person gasman    schedule 06.01.2017
comment
предположительно, вы могли бы скопировать и переопределить эти шаблоны? как в docs.wagtail.io/en/v1.11.1/ advanced_topics/настройка/ - person hwjp; 22.07.2017

Вы можете добавить новый пункт в меню действий, зарегистрировав пользовательский пункт меню с помощью крючков трясогузки. Для этого создайте файл с именем wagtail_hooks.py в любом из ваших существующих приложений Django.

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 по-прежнему жестко закодирована и поэтому не может быть так легко настроена. См. здесь.

person Yannic Hamann    schedule 18.03.2019

Кажется, это невозможно сделать на стороне сервера без исправления обезьяны.

Однако, если вы хотите это для себя (или имеете доступ к компьютерам тех, кто будет публиковать), вы можете вместо этого изменить свой браузер.

  1. Установите надстройку для браузера Tampermonkey.
  2. Создайте новый скрипт с содержимым ниже
  3. Измените http://127.0.0.1:8000/admin/* на шаблон URL панели администратора вашей трясогузки
  4. Сохраните скрипт и проверьте панель администратора

Результат должен выглядеть:

введите здесь описание изображения


// ==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);
});
person Mikhail Gerasimov    schedule 31.03.2019
comment
вы также можете поместить свой скрипт в файл и позволить ему загружаться через хук insert_editor_js. Таким образом, все пользователи, даже те, у кого не установлен Tampermonkey, могут получить прибыль. - person Hopiu; 18.06.2019

Изменив приведенный выше код, эти селекторы работают для каждого языка администрирования:

let draft = $("button.button-longrunning.action-save");
let publish = $("button.button-longrunning[name='action-publish']");
person remort    schedule 11.04.2019