도대체 무엇이 깨질 예정인가요? 기존에 지원되는 테마 컴포넌트로 충분할 수도 있습니다.
메인 사이트로 연결되는 상단 배너만 해당되는 건가요?
도대체 무엇이 깨질 예정인가요? 기존에 지원되는 테마 컴포넌트로 충분할 수도 있습니다.
메인 사이트로 연결되는 상단 배너만 해당되는 건가요?
다음에 대한 대체 수단이 있나요?
api.changeWidgetSetting("header-notifications", "avatarSize", "large");
이 코드는 다음과 같은 비추천(deprecation) 경고가 표시되며 해당 문서로 연결됩니다:
The header-notifications widget has been deprecated and changeWidgetSetting is no longer a supported override.
저도 같은 상황입니다.
로고 URL을 제대로 변경하려고 시도하고 있지만, 다음 작업은 더 이상 불가능합니다:
api.changeWidgetSetting("home-logo", "href", "https://my-other-homepage/");
이것을 대체할 API 호출은 무엇인가요?
이에 대한 깔끔한 해결책을 마련하고 있지만, 아직 완전히 준비되지는 않았습니다. 업데이트가 나올 때까지 이 주제를 계속 지켜봐 주세요.
안녕하세요, @david - 6월 7일 금요일까지 깔끔한 해결책이 준비될 수 있을까요? 그렇지 않다면 예상 완료 시점을 알려주실 수 있을까요?
급하게 요청드려 죄송합니다. 6월 17일에 클로즈드 베타를 시작할 예정이라, 테스트 전에 이 기능이 구현될지 여부를 확인해야 합니다.
정확한 날짜는 없지만, 앞으로 1~2주 안에 될 가능성이 높습니다. 내일까지는 준비가 되지 않을 것입니다.
내일까지 작동하는 것이 필요하시다면, 기존 API를 사용하시는 것을 권장합니다. 기존 API는 사이트가 레거시 헤더 구현을 사용하도록 자동으로 전환해 줍니다.
@kana.tatsuta 새 API가 병합되었습니다.
로고 URL을 사용자 지정하는 방법에 대한 예시를 포함하여 OP에 섹션을 추가했습니다.
호환되지 않는 플러그인 또는 테마를 사용하는 인스턴스의 새 배포에 대해 관리자 알림을 활성화했습니다.
코드를 어떻게 업데이트해야 할지 잘 모르겠습니다. 몇 가지 방법을 시도해 봤지만, 항상 라이트 테마의 이미지가 표시되고, 해당 컴포넌트에 직접 업로드한 다크 테마 이미지가 표시되지 않습니다. 이 부분을 어떻게 리팩터링해야 할지 조언을 구합니다.
<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
/* "reopenWidget"으로 sidebarToggle 버튼이 제거됨, 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: 'Learning Center'
}, iconNode('graduation-cap')),
]);
});
</script>
api.headerIcons.add(“foo”, FooIcon, { before: “search” })을 사용하도록 변환해야 하는 것 같지만, 정확히 어떻게 해야 하는지 100% 확신이 서지 않습니다. ![]()
도움 주시면 감사하겠습니다. ![]()
다음과 같이 권장합니다:
1. 기존 javascripts/discourse/api-initializers/desktop-open-sidebar-always.js 파일을 삭제하세요
2. 새 파일 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;
}
}
HI @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” 옆에 텍스트를 추가하는 테마 컴포넌트를 업데이트하는 데 도움을 주실 수 있나요? 미리 감사드립니다.