Resolverá el problema de tener que decirle a mi personal de soporte que primero creen un nuevo tema, luego lo guarden, luego miren la URL y obtengan el ID #, luego vuelvan y editen el tema para poder poner el # en el cuerpo manualmente.
¿A dónde va ese ticket/error? La ID está en la URL; ahí es persistente y nunca está mal. ¿Cómo ayuda tener la ID del tema en el texto del tema? Y, como usted señala, si está en el cuerpo del mensaje, cualquiera puede cambiarlo, eliminarlo o escribirlo mal.
¿Está usando algo la ID del tema? Si es así, ¿qué y cómo?
Será más fácil crear un componente personalizado que agregue esto a las publicaciones correctas en lugar de llenar una plantilla.
Si editas el código de tu tema en admin > temas y componentes… y agregas esto a la pestaña de JS, debería darte lo que buscas con algunos ajustes:
import { apiInitializer } from "discourse/lib/api";
import Component from "@glimmer/component";
class TopicIdentifier extends Component {
get topicId() {
return this.args.post?.topic?.id;
}
get shouldShow() {
const firstPost = this.args.post?.post_number === 1; // primera publicación en el tema
const desiredCategories = [45, 3]; // una lista separada por comas de los IDs de categoría en los que deseas que aparezca
const isInCategory = desiredCategories.includes(
this.args.post?.topic.category.id
);
return firstPost && isInCategory;
}
<template>
{{#if this.shouldShow}}
<!-- puedes editar el contenido a continuación, {{this.topicId}} es donde se llenará el ID del tema -->
El ID de este tema es
{{this.topicId}}
<!-- puedes editar el contenido de arriba -->
{{/if}}
</template>
}
export default apiInitializer((api) => {
api.decorateCookedElement((element, helper) => {
const wrapper = document.createElement("div");
wrapper.className = "custom-topic-id"
helper?.renderGlimmer(
wrapper,
<template><TopicIdentifier @post={{helper.model}} /></template>
);
element.appendChild(wrapper);
});
});
Puedes encontrar el ID de la categoría en su URL para configurar desiredCategories, por ejemplo, la categoría de soporte aquí en Meta tiene el ID 6
Puedes agregar CSS para darle el estilo que desees con la pestaña CSS… por ejemplo
Sí, se puede escribir mal. Por eso, si usas una variable, no tienes que preocuparte de escribirla mal.
Ayuda porque yo soy el usuario y así es como quiero que esté configurado mi flujo de trabajo.
Actualmente no puedes buscar en Discourse por ID de tema. Si el # está en el cuerpo del tema, entonces ahora forma parte de los resultados de la búsqueda.
Así que puedo decirle a un compañero: ‘Oye, busca el error n.º 138 y dime qué opinas’.
Entonces es muy fácil para Nancy ir al sitio y buscar 138 y obtener un resultado.
Pueden simplemente escribir /t/138 y no tener que buscar. Pero si estás hablando con una persona, ¿no tendría más sentido en una conversación decir “busca el error sobre ‘algunas palabras que conocen’” en lugar de un número?
Y esa iba a ser mi otra sugerencia.
Creo que habría usado renderInOutlet en lugar de decorateCookedElement, pero eso es probablemente porque no entiendo completamente decorateCookedElement.
Pero esto no te permitirá buscar un error/tema por topic_id.
Sí, entonces no te molestes, desafortunadamente solo agrega contenido al tema cuando se renderiza… no lo agrega a la base de datos para que sea buscable. Creo que lo que finalmente necesitarías es un plugin personalizado o un script personalizado agregado a Discourse Automation para que sea completamente automático.
Buscar por ID de tema o incluirlo en una plantilla no es una solicitud común, por lo que no es algo que admitamos de fábrica.
Creo que es que los habituales aquí saben que no es una función que tengamos actualmente, por lo que estamos tratando de apoyarte encontrando algunas posibles soluciones alternativas.
Y a menudo, si retrocedes, puedes encontrar una mejor solución.
Si realmente quieres incrustar el ID del tema en el texto para poder encontrarlo en la búsqueda, necesitarías un plugin y este podría añadir ticket123 al texto sin procesar (¿creo que la búsqueda mira el texto sin procesar?). El ID del tema no existe antes de que crees el tema, por lo que no puedes insertarlo cuando lo creas.
¡Oh! Quizás lo que quieres es un plugin que añada una etiqueta bug123 cuando se crea un tema en una categoría de errores. Entonces podrías referirte a él como #bug123 y que se enlace en cualquier lugar donde lo menciones y puedas buscarlo. Si tienes tu propio servidor o estás en la versión empresarial, eso no sería muy difícil. Me imagino que alguien en Marketplace lo haría por entre 250 y 500 dólares.
O, si quieres poder “buscar” un error por número, podrías añadir un componente temático que te permita escribirlo en un “cuadro de errores” e ir directamente allí. Quizás esa sea una solución que funcione y no requiera un plugin.
Terminé con una visualización más discreta del ID del tema. Todavía no se puede buscar, pero me conformaré con eso hasta que lo que realmente necesito se haga realidad.
Es un ejemplo trivial de cómo insertar un componente. Así que agregarías algo de código antes de <template> para obtener el ID del tema y la lógica sobre si mostrarlo.
Creo que podrías querer topic-list-before-link como el outlet del plugin.
Eso solo funciona para este tema, prueba con uno diferente al azar. Intenta buscar “one two four two four zero”, ese es el ID del tema de las etiquetas de banners.
¿Te refieres a topic:124240? La palabra de relleno (‘hola’) era solo un ejemplo. En el caso de las Banners de etiquetas, ‘hola’ funciona. ¿Quizás si tienes una palabra común en los tickets de soporte, o simplemente una palabra común en general, puedes probar eso?
Además, si lo que quieres hacer es “buscar” un ID de tema, entonces probablemente podrías crear un componente que acepte un ID de tema y luego simplemente salte a ese tema.