Estoy tratando de entender cómo agregar un campo personalizado a los temas y estoy trabajando con un ejemplo muy básico. Objetivo: Agregar un campo personalizado llamado “sample_field” a cada tema creado, con un valor de cadena simple.
He revisado varios ejemplos, como el plugin de encuestas y el plugin de resuelto y esta discusión, pero estos plugins hacen mucho más con sus campos personalizados, por lo que aún no he descifrado el código básico que se necesita.
Así que aún no lo tengo del todo: creo que me falta algo en mi archivo plugin.rb, y aún no he descubierto cómo vincular el valor de la cadena al campo personalizado en el momento en que se crea el tema.
¿Qué necesito para que esto funcione?
Agradezco cualquier ayuda. ¡Gracias!
Esto es lo que tengo hasta ahora:
plugin.rb:
//crear el campo personalizado:\n
after_initialize do
Topic.register_custom_field_type('sample_field', :string)
add_to_serializer(:topic_view, :custom_fields) { object.custom_fields } //si quiero mostrar el campo personalizado en el lado del cliente
end
assets/javascripts/initializers/topic-custom-field.js.es6:
//inicializar el objeto de campos personalizados y permitir que se envíe al servidor:\n
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
});
}
})
})
}
}
Entonces, ¿cómo agrego el valor del campo personalizado al tema en el momento en que se guarda?
Creo que la acción clave “save” para un tema ocurre aquí en la base de código:
app/templates/composer.hbs:
<div class="save-or-cancel">
{{#unless model.viewFullscreen}}
{{composer-save-button action=(action "save")
icon=saveIcon
label=saveLabel
disableSubmit=disableSubmit}}
...
¿Cómo hago algo (en este caso, agregar un valor al campo personalizado) cuando ocurre esa acción “save”?
He intentado crear un archivo js bajo initializers, donde podría hacer algo como:
api.modifyClass('component:composer-save-button', {
actions: {
topic.set('custom_fields.sample_field', 'aquí hay un valor para el sample_field')
}
}
Pero necesito poder vincular ese “topic.set” a la acción “save” en composer.hbs, y no sé cómo hacerlo.
Y si hay una forma más sencilla de hacerlo, ¡estaré encantado de escucharla!