Что именно вот-вот сломается, кстати? Может, уже есть поддерживаемый компонент темы, который справится с этой задачей.
Речь только о баннере вверху, который ведёт на главный сайт?
Что именно вот-вот сломается, кстати? Может, уже есть поддерживаемый компонент темы, который справится с этой задачей.
Речь только о баннере вверху, который ведёт на главный сайт?
Есть ли замена для:
api.changeWidgetSetting("header-notifications", "avatarSize", "large");
Это вызывает предупреждение об устаревании, которое ведет сюда:
Виджет header-notifications устарел, и changeWidgetSetting больше не поддерживается как переопределение.
Я тоже столкнулся с этой проблемой.
Пытаюсь изменить URL логотипа правильным способом, но следующее больше невозможно:
api.changeWidgetSetting("home-logo", "href", "https://my-other-homepage/");
Какой вызов API теперь следует использовать вместо этого?
Мы работаем над созданием чистого решения для этого, но оно пока не готово. Следите за обновлениями в этой теме.
Привет, @david! Готово ли будет чистое решение к пятнице, 7 июня? Если нет, не могли бы вы предоставить оценку?Извините за спешку, мы начинаем закрытое бета-тестирование 17 июня и нам нужно знать, будет ли это реализовано до начала тестирования или нет.
У меня нет точной даты, но, скорее всего, это произойдёт в течение следующих 1–2 недель. К завтрашнему дню это не будет готово.
Если вам нужно решение, которое будет работать уже завтра, рекомендую использовать старую версию API. Она автоматически переключит ваш сайт на использование устаревшей реализации заголовков.
@kana.tatsuta новый API слит.
Я добавил раздел в первом сообщении с примерами того, как настроить URL логотипа.
Мы включили уведомление администратора для новых развертываний на инстансах, использующих несовместимые плагины или темы.
Я не уверен, как обновить свой код. Я пробовал несколько вариантов, но каждый раз изображения отображаются из светлой темы вместо моей тёмной темы и тех, что были загружены напрямую для этих изображений в компоненте. Есть какие-нибудь предложения, как это следует рефакторить?
<script type="text/discourse-plugin" version="0.8.25">
api.reopenWidget("home-logo", {
logoUrl() {
return (
settings.Alternative_logo_url || ""
);
},
mobileLogoUrl() {
return (
settings.Alternative_mobile_logo_url || ""
);
},
smallLogoUrl() {
return (
settings.Alternative_small_logo_url || ""
);
}
});
</script>
Попробуйте использовать коннектор в плагин-аутлете home-logo-contents. Ваш код будет выглядеть примерно так:
// javascripts/discourse/initializers/customize-logo.gjs
import HomeLogoContents from "discourse/components/header/home-logo-contents";
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: `logo-customizations`,
initialize(container) {
withPluginApi("1.29.0", (api) => {
renderHomeLogo(api);
});
},
};
function renderHomeLogo(api) {
const logoSmallUrl = settings.Alternative_small_logo_url || "";
const logoUrl = settings.Alternative_logo_url || "";
const mobileLogoUrl = settings.Alternative_mobile_logo_url || "";
api.renderInOutlet("home-logo-contents", <template>
<HomeLogoContents
@logoSmallUrl={{logoSmallUrl}}
@logoUrl={{logoUrl}}
@minimized={{@outletArgs.minimized}}
@mobileLogoUrl={{mobileLogoUrl}}
@showMobileLogo={{@outletArgs.showMobileLogo}}
@title={{@outletArgs.title}}
/>
</template>);
}
По поводу reopenWidget (sidebar-toggle), не могли бы вы помочь мне понять, как заменить следующий код? Я не нашел инструкций в этом руководстве.
// /javascripts/discourse/api-initializers/desktop-open-sidebar-always.js
/* кнопка sidebarToggle удалена благодаря "reopenWidget", applicationController принудительно устанавливает showSidebar в true (для desktopView) */
import { withPluginApi } from "discourse/lib/plugin-api";
import { reopenWidget } from "discourse/widgets/widget";
function sidebarToggle(api) {
const applicationController = api.container.lookup("controller:application");
api.reopenWidget("sidebar-toggle", {
html(attrs) {
if (this.site.desktopView == true && attrs.showSidebar == false) {
applicationController.set("showSidebar", true);
}
},
});
}
export default {
name: "desktop-open-sidebar-always",
initialize() {
withPluginApi("0.10.1", sidebarToggle);
},
};
Всем привет
,
Не мог бы кто-нибудь помочь мне с изменениями, которые мне нужны для этого?
<script type="text/discourse-plugin" version="0.4">
const { iconNode } = require("discourse-common/lib/icon-library");
api.decorateWidget('header-icons:before', helper => {
return helper.h('li', [
helper.h('a#graduation-cap.icon', {
href:'https://example.com/',
title: 'Центр обучения'
}, iconNode('graduation-cap')),
]);
});
</script>
Я полагаю, мне нужно переписать это, чтобы использовать api.headerIcons.add("foo", FooIcon, { before: "search" }), но я не на 100% уверен, как это сделать ![]()
Любая помощь здесь будет очень кстати ![]()
Привет @angelinekwan,
Вот наша рекомендация:
Удалите существующий файл javascripts/discourse/api-initializers/desktop-open-sidebar-always.js
Создайте новый файл: javascripts/discourse/pre-initializers/desktop-open-sidebar-always.js и добавьте следующий код:
import { withPluginApi } from "discourse/lib/plugin-api";
const PLUGIN_NAME = "desktop-open-sidebar-always";
export default {
name: PLUGIN_NAME,
initialize() {
withPluginApi("1.34.0", (api) => {
api.modifyClass("controller:application", {
pluginId: PLUGIN_NAME,
calculateShowSidebar() {
if (this.site.desktopView && this.canDisplaySidebar) {
return true;
}
return this._super(...arguments);
},
});
});
},
};
Добавьте следующее в common/common.scss:
html.desktop-view {
.header-sidebar-toggle {
display: none;
}
}
Привет @Danny_Dainton,
Посмотрите на компонент темы по адресу Custom Header Links (icons). Я думаю, он делает то, что вам нужно.
Если вы не можете использовать компонент темы, api.headerIcons.add тоже сработает. ![]()
.gjs// javascripts/discourse/initializers/custom-header-icons.gjs
import { apiInitializer } from "discourse/lib/api";
import dIcon from "discourse-common/helpers/d-icon";
export default apiInitializer("1.34.0", (api) => {
api.headerIcons.add(
"custom-header-home",
<template>
<li>
<a id="graduation-cap" class="icon" href="https://example.com/" title="Learning Center">
{{dIcon "graduation-cap"}}
</a>
</li>
</template>,
{ before: "search" }
);
});
Спасибо, сэр!
Ах, теперь, когда я вижу это перед собой, это стало немного понятнее.
Я очень ценю ваш ответ!! ![]()
Буду признателен за помощь с миграцией этого фрагмента кода — не могу понять, как его перенести:
api.reopenWidget("user-dropdown", {
html(attrs) {
return h(
"a.icon",
{title: I18n.t("custom.string.title")},
[iconNode("bell"), this.attach("header-notifications", attrs)],
);
},
});
Исходная цель этого изменения — сохранить меню user-dropdown без изменений, но заменить изображение профиля на иконку (колокольчик).
Самый простой способ добиться желаемого эффекта — добавить иконку с помощью существующего PluginOutlet и просто скрыть изображение аватара пользователя с помощью CSS.
В файле .gjs:
// javascripts/discourse/initializers/user-dropdown-bell-icon.gjs
import { withPluginApi } from "discourse/lib/plugin-api";
import dIcon from "discourse-common/helpers/d-icon";
export default {
name: "user-dropdown-bell-icon",
initialize(container) {
withPluginApi("1.34.0", (api) => {
api.renderInOutlet("user-dropdown-notifications__before", <template>
{{dIcon "bell"}}
</template>);
});
},
};
Добавьте следующий CSS:
.header-dropdown-toggle.user-menu-panel img {
display: none;
}
Результат:
Старый код виджета был удален.
Не мог бы кто-нибудь помочь мне с обновлением компонента темы, который добавляет текст рядом с логотипом “home-logo”? Заранее спасибо.