아니, 나도 지난주에 비슷한 걸 해봤는데…
테마(theme)에서 javascripts/discourse/components/new-topic-dropdown.js 파일에 아래 코드를 추가할 수 있습니다.
import { action } from "@ember/object";
import { getOwner } from "discourse-common/lib/get-owner";
import Composer from "discourse/models/composer";
import DropdownSelectBoxComponent from "select-kit/components/dropdown-select-box";
import { computed } from "@ember/object";
export default DropdownSelectBoxComponent.extend({
classNames: ["new-topic-dropdown"],
selectKitOptions: {
icons: ["plus"],
showFullTitle: true,
autoFilterable: false,
filterable: false,
showCaret: true,
none: "topic.create",
},
content: computed(function () {
const items = [
{
id: "new_discussion",
name: "New Topic",
description: "Start a new discussion",
icon: "comment",
},
];
items.push({
id: "new_ticket",
name: "Support ticket",
description: "Start a support request",
icon: "tag",
});
return items;
}),
@action
onChange(selectedAction) {
const composerController = getOwner(this).lookup("controller:composer");
let tags = null;
let categoryId = this.category ? this.category.id : null;
if (selectedAction === "new_ticket") {
tags = "ticket";
}
composerController.open({
action: Composer.CREATE_TOPIC,
draftKey: Composer.DRAFT,
categoryId: categoryId,
tags: tags,
});
},
});
이 코드는 드롭다운 버튼에 “새 주제”(new topic)와 “지원 티켓”(support ticket) 옵션을 추가합니다. "새 주제"를 선택하면 평소처럼 컴포저(composer)가 열리고, "지원 티켓"을 선택하면 “ticket” 태그가 이미 추가된 상태로 컴포저가 열립니다.
…그리고 javascripts/discourse/connectors/after-create-topic-button/new-topic-dropdown.hbs 파일에는 다음과 같이 추가합니다.
{{#if currentUser}}
{{new-topic-dropdown category=category}}
{{/if}}
…그 다음 CSS를 사용하여 기본 버튼을 숨기고 싶을 것입니다:
.navigation-controls {
#create-topic {
display: none;
}
}
