토픽에 커스텀 필드를 추가하는 방법을 이해하려고 하고 있으며, 매우 기본적인 예제를 다루고 있습니다. 목표: 생성되는 각 토픽에 "sample_field"라는 이름의 커스텀 필드를 추가하고, 간단한 문자열 값을 부여하는 것입니다.
투표 플러그인, 해결됨 플러그인, 그리고 이 토론 등 다양한 예제를 살펴봤지만, 이 플러그인들은 커스텀 필드를 이용해 훨씬 더 많은 일을 수행하고 있어 아직 필요한 기본 코드를 파악하지 못했습니다.
그래서 아직 목표에 도달하지 못했는데, plugin.rb 파일에 뭔가 빠져 있는 것 같고(제 생각에는), 토픽이 생성될 시점에 문자열 값을 custom_field에 바인딩하는 방법도 아직 찾지 못했습니다.
이것이 작동하려면 무엇이 필요할까요?
도움 주시면 감사하겠습니다. 감사합니다!
현재까지 작성한 내용은 다음과 같습니다.
plugin.rb:
// 커스텀 필드 생성:
after_initialize do
Topic.register_custom_field_type('sample_field', :string)
add_to_serializer(:topic_view, :custom_fields) { object.custom_fields } // 클라이언트 측에서 커스텀 필드를 표시하려면
end
assets/javascripts/initializers/topic-custom-field.js.es6:
// 커스텀 필드 객체를 초기화하고 서버로 전송할 수 있도록 설정:
import { withPluginApi } from 'discourse/lib/plugin-api';
export default {
name: 'topic-custom-field',
initialize() {
withPluginApi('0.8.31', api => {
api.modifyClass('model:topic', {
custom_fields: {},
asJSON() {
return Object.assign(this._super(), {
custom_fields: this.custom_fields
});
}
})
})
}
}
그렇다면, 토픽이 저장될 시점에 커스텀 필드의 값을 토픽에 추가하는 방법은 무엇일까요?
토픽의 핵심 “저장” 동작은 코드베이스의 다음 위치에 있다고 생각합니다:
app/templates/composer.hbs:
<div class="save-or-cancel">
{{#unless model.viewFullscreen}}
{{composer-save-button action=(action "save")
icon=saveIcon
label=saveLabel
disableSubmit=disableSubmit}}
...
그 “저장” 동작이 발생할 때 무언가(이 경우 커스텀 필드에 값을 추가하는 것)를 수행하는 방법은 무엇일까요?
initializers 아래에 js 파일을 만들어서 다음과 같은 작업을 수행할 수 있을 것 같다고 시도해 봤습니다:
api.modifyClass('component:composer-save-button', {
actions: {
topic.set('custom_fields.sample_field', 'here's a value for the sample_field')
}
}
하지만 composer.hbs의 “저장” 동작과 해당 "topic.set"을 연결하는 방법을 모릅니다.
더 간단한 방법이 있다면 기꺼이 듣고 싶습니다!