ID do tópico como uma variável?

Existe uma maneira de obter o ID do tópico como uma variável dentro de um tópico?

Caso de uso, temos categorias para tickets de suporte e rastreamento de bugs. Eu gostaria de configurá-los com modelos como estes.
Isto:

> Não remova esta linha: Solicitação de suporte #$(topicid)

Parece isto:

Não remova esta linha: Solicitação de suporte #246

Aberta a outras maneiras de obter as informações. Só não tenho certeza de como fazer isso.

1 curtida

Você está tentando colocar o ID do tópico na postagem bruta do tópico?

Que problema isso vai resolver?

1 curtida

Resolverá o problema de eu ter que dizer à minha equipe de suporte que eles precisam primeiro criar um novo tópico, depois salvá-lo, depois olhar o URL e obter o ID #, depois voltar e editar o tópico para colocar o # manualmente no corpo.

Para que você está usando o ID# do tópico no corpo do OP em seu caso de uso aqui?

1 curtida

Um ID único # para um ticket/bug.

Para onde vai esse ticket/bug? O ID está na URL; lá ele é persistente e nunca está errado. Como ajuda ter o ID do tópico no texto do tópico? E, como você aponta, se estiver no corpo da mensagem, qualquer um pode mudar, apagar ou digitar errado.

Algo está usando o ID do tópico? Se sim, o quê e como?

1 curtida

Será mais fácil criar um componente personalizado que anexe isso às postagens corretas em vez de preencher um modelo.

Se você editar o código do seu tema em admin > temas e componentes… e adicionar isso à aba JS, isso deve lhe dar o que você procura com alguns 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; // primeira postagem no tópico
    const desiredCategories = [45, 3]; // uma lista separada por vírgulas de IDs de categoria onde você deseja que isso apareça
    const isInCategory = desiredCategories.includes(
      this.args.post?.topic.category.id
    );

    return firstPost && isInCategory;
  }

  <template>
    {{#if this.shouldShow}}
      <!-- você pode editar o conteúdo abaixo, {{this.topicId}} é onde o ID do tópico será preenchido -->
      Este tópico tem o ID
      {{this.topicId}}
      <!-- você pode editar o conteúdo acima -->
    {{/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);
  });
});

Você pode encontrar o ID da categoria a partir de sua URL para configurar desiredCategories, por exemplo, a categoria suporte aqui no Meta tem o ID 6

Você pode adicionar CSS para estilizar isso como desejar com a aba CSS… por exemplo

.custom-topic-id {
  display: inline-block;
  background: yellow;
}

3 curtidas

Sim, pode ser digitado incorretamente. É por isso que, se você usar uma variável, não precisará se preocupar em digitá-la incorretamente.

Ajuda porque sou o usuário e é assim que quero que meu fluxo de trabalho seja configurado.

Atualmente, você não pode pesquisar no Discourse por ID de tópico. Se o # estiver no corpo do tópico, ele agora faz parte dos resultados da pesquisa.

Assim, posso dizer a um colega: ‘Ei, pesquise o bug nº 138 e me diga o que você acha.’"

Então é muito fácil para Nancy ir ao site, fazer uma pesquisa por 138 e obter um resultado.

2 curtidas

Você não precisa pesquisar:

/t/-/id – mas na verdade /t/id funciona.

Eles podem simplesmente digitar /t/138 e não precisar pesquisar. Mas se você estivesse falando com uma pessoa, dizer “procure pelo bug sobre ‘algumas palavras que eles conhecem’” faria mais sentido para usar em uma conversa do que um número?

E essa seria minha outra sugestão.

Acho que eu teria usado renderInOutlet em vez de decorateCookedElement, mas isso é provavelmente porque eu não entendo completamente decorateCookedElement.

Mas isso não permitirá que você pesquise um bug/tópico por topic_id.

1 curtida

Vou testar isso. Obrigado pela informação. Essa é a parte do corpo que se torna pesquisável?

Mas eu quero pesquisar. É mais fácil.
Vá para o site, depois anexe /t/id ao URL no topo da janela VS vá para o site e digite ID no campo de pesquisa que está bem no centro da página.

Se eu estiver falando com uma pessoa, ou digitando uma mensagem, sim, um número é mais conciso e menos propenso a erros do que “Pesquise pelo título exato que pode ter 5 palavras de comprimento”

Vou investigar isso, mas se isso impedir o uso em um campo de pesquisa, então não funcionará para mim.

Eu realmente amo o Discourse, e recebi MUITO feedback e ajuda úteis de todos aqui.
O que eu não entendo é que ocasionalmente as pessoas me dizem que “Você não deveria fazer isso dessa maneira porque esta maneira é melhor.” Bem, não, esta maneira é melhor para você, mas aquela maneira é melhor para mim. E nenhuma delas está errada.

3 curtidas

Sim, então não se incomode, infelizmente ele apenas anexa conteúdo ao tópico quando é renderizado… ele não o adiciona ao banco de dados para torná-lo pesquisável. Acho que, no final, você precisaria de um plugin personalizado ou um script personalizado adicionado a Discourse Automation para que seja totalmente automático.

Pesquisar por ID de tópico ou incluí-lo em um modelo não é uma solicitação comum, portanto, não é algo que suportamos nativamente.

Acho que é que os usuários regulares aqui sabem que não é um recurso que temos atualmente, então estamos tentando apoiá-lo descobrindo algumas soluções alternativas potenciais.

2 curtidas

E muitas vezes, se você voltar, pode encontrar uma solução melhor.

Se você realmente quiser incorporar o ID do tópico no texto para poder encontrá-lo na pesquisa, você precisaria de um plugin e ele poderia adicionar ticket123 ao texto bruto (acho que a pesquisa verifica o texto bruto?). O ID do tópico não existe antes de você criar o tópico, então você não pode inseri-lo quando o cria.

Ah! Talvez o que você queira seja um plugin que adicione uma tag bug123 quando um tópico em uma categoria de bug for criado. Então você poderia se referir a ele como #bug123 e ele seria vinculado em qualquer lugar que você o mencionasse e seria possível pesquisar. Se você estiver auto-hospedado ou na versão enterprise, isso não seria muito difícil. Imagino que alguém no Marketplace faria isso por US$ 250 a US$ 500.

Ou, se você quiser poder “pesquisar” um bug por número, você poderia adicionar um componente de tema que permitisse digitá-lo em uma “caixa de bug” e ir direto para lá. Talvez essa seja uma solução que funcione e não exija um plugin.

1 curtida

O que eu acabei obtendo foi uma exibição mais discreta do ID do tópico. Ele ainda não é pesquisável, mas vou me contentar com isso até que o que eu realmente preciso se torne realidade.


<script type="text/discourse-plugin" version="0.5">
api.decorateWidget('post-meta-data:after', dec => {
  if (dec.attrs.post_number === 1) {
    const topic = dec.getModel().get('topic');
    return dec.rawHtml(`<div class="post-info topic-id"><b>&nbsp#${topic.get('id')}</b></div>`);
  }
});
</script>

O problema é que este código agora está desatualizado e eu não sei como consertá-lo.
Para que ele seja compatível, para o que ele deve ser atualizado?

Criei GitHub - literatecomputing/discourse-custom-components como um exemplo de como fazer isso.

É um exemplo trivial de inserção de um componente. Assim, você adicionaria algum código antes de <template> para obter o ID do tópico e a lógica para exibir ou não.

Acho que você pode querer topic-list-before-link como o plugin outlet.

Não entendo nada disso. Eu não sou programador.
O código que postei faz isto:


Como eu faria isso com o seu código?

Se não me engano, inserir topic:id na barra de pesquisa mostrará o tópico nos resultados.

Por exemplo, pesquisar topic:374168 this exibe apenas postagens deste tópico.

Eu me pergunto… um TC que envia uma solicitação ajax para atualizar o texto bruto do tópico seria suficiente?

1 curtida

Isso só funciona para este tópico, tente um aleatório diferente. Tente pesquisar por “one two four two four zero”, esse é o ID do tópico de banners de tag.

Você quer dizer topic:124240? A palavra de preenchimento (‘olá’) foi apenas um exemplo. No caso de Banners de Tag, ‘oi’ funciona. Talvez se você tiver uma palavra comum em tickets de suporte, ou apenas uma palavra comum em geral, você possa tentar isso?

Você tentou o código em Topic ID as a variable? - #7 by awesomerobot

Além disso, se o que você quer fazer é “procurar” um ID de tópico, então você poderia provavelmente criar um componente que aceitasse um ID de tópico e então apenas pulasse para esse tópico.

1 curtida