Un mot commun est le contraire de ce que je veux. Je ne veux pas que mes résultats de recherche contiennent TOUS les tickets, je veux un moyen de rechercher un ticket spécifique. C’est pourquoi l’ID de sujet serait idéal. Ils sont générés automatiquement et uniques.
Non, je pense que le code que j’utilise était aussi à l’origine d’awesomerobot, mais je ne trouve plus sa source.
Je préfère le placement de ce que j’utilise actuellement à ce bloc sous le texte.
Eh bien, je ne peux pas faire ça. Peut-être que vous le pouvez. « J'ai un certain ensemble de compétences. Le codage n'en fait pas partie. »
Tu me comprends mal. Je voulais dire avoir un mot courant incluant le paramètre topic:id, de sorte que seuls les résultats de ce sujet s’affichent. Le mot courant élimine le besoin de changer des mots comme ‘salut’ et ‘bonjour’.
Le bouton Submit sert à aller au sujet[2]; il n’affecte pas les résultats de recherche.
J’espère que cela vous aidera !
C’est la première fois que j’utilise FormKit, c’est vraiment cool ! ↩︎
Je n’ai pas pu changer le texte du bouton, car cela nécessiterait des locales… ce qui nécessiterait un dépôt TC complet, ce qui serait peut-être excessif . ↩︎
Merci @NateDhaliwal, j’apprécie l’effort.
J’ai créé le composant, collé le code sous l’onglet JS. Je me suis assuré qu’il était actif sur mon thème, mais sans succès.
Voici à quoi ressemble ma page de recherche :
Et je pense que c’est pour que le JS affiche l’ID du sujet, pas la recherche. Il n’apparaît pas sauf sur les pages que j’ai réservées pour cet élément.
Bien, voici un résumé de la situation telle qu’elle se présente actuellement :
Nous avons une solution fonctionnelle. Bien qu’elle soit légèrement peu élégante, elle conviendra à mes besoins jusqu’à ce que nous puissions rechercher l’ID du sujet directement dans la boîte de recherche standard.
Le code actuel suggéré par @awesomerobot semble fonctionner, mais déclenche l’avertissement que j’ai posté ci-dessus.
2a. Lorsque j’ai supprimé le code original que j’utilisais pour afficher l’ID du sujet, cet avertissement a disparu…
Lorsque vous choisissez une solution, le code pour afficher l’ID du sujet apparaît à la fois dans le message original et dans la solution. Y a-t-il un moyen d’en tenir compte et de l’empêcher de s’y afficher ?
J’ai un peu plus peaufiné le CSS, maintenant j’ai une pilule sur chaque réponse dans chaque fil de discussion dans les catégories spécifiées où je l’utilise. Je suppose que la réponse sera de la dé-peaufiner, mais si quelqu’un connaît une autre façon, je préférerais la conserver, je pense qu’elle est jolie telle quelle.
@awesomerobot
Votre code fonctionne à merveille, mais il semble que toutes les décorations CSS autres que le texte apparaissent sur chaque publication après la première comme un espace vide formaté comme le dit le CSS.
Désactivez le bloc inline et vous obtenez une barre de couleur pleine largeur.
Changez la couleur d’arrière-plan et la pilule change de couleur
etc…
D’après ce que vous avez écrit, il semble que vous lui ayez dit de n’apparaître que dans la première publication, mais cela n’affecte que le texte. Y a-t-il autre chose que nous puissions faire pour supprimer l’élément de toutes les publications supplémentaires ?
D’accord, comme je l’ai dit, je ne suis pas un codeur, mais je suis très doué pour poser des questions à Grok. Voici un code qui résout les deux problèmes.
Fini les bulles CSS vides dans les réponses 2 à X.
Fini la duplication de l’ID de sujet dans les solutions citées.
Peut-être que personne d’autre sur la planète ne s’en soucie, mais cela semble être un bon moyen de suivre les sujets pour ceux d’entre nous qui utilisent Discourse comme système de billetterie.
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; // premier message du sujet
const desiredCategories = [9, 23]; // une liste d'ID de catégories séparés par des virgules où vous voulez que cela apparaisse
const isInCategory = desiredCategories.includes(
this.args.post?.topic.category.id
);
return firstPost && isInCategory;
}
<template>
{{#if this.shouldShow}}
<!-- vous pouvez modifier le contenu ci-dessous, {{this.topicId}} est là où l'ID du sujet sera rempli -->
Issue Tracking # is
{{this.topicId}}
<!-- vous pouvez modifier le contenu ci-dessus -->
{{/if}}
</template>
}
export default apiInitializer("0.8.40", (api) => {
api.decorateCookedElement((element, helper) => {
```gjs
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; // premier message du sujet
const desiredCategories = [9, 23]; // une liste d'ID de catégories séparés par des virgules où vous voulez que cela apparaisse
const isInCategory = desiredCategories.includes(
this.args.post?.topic.category.id
);
return firstPost && isInCategory;
}
<template>
{{#if this.shouldShow}}
<!-- vous pouvez modifier le contenu ci-dessous, {{this.topicId}} est là où l'ID du sujet sera rempli -->
Issue Tracking # is
{{this.topicId}}
<!-- vous pouvez modifier le contenu ci-dessus -->
{{/if}}
</template>
}
export default apiInitializer("0.8.40", (api) => {
api.decorateCookedElement((element, helper) => {
// Continuer uniquement si c'est le premier message et non à l'intérieur d'une citation de solution
// Continuer uniquement si c'est le premier message, pas dans une citation, et dans la catégorie souhaitée
const post = helper?.model;
const desiredCategories = [9, 23]; // Correspond aux catégories de TopicIdentifier
if (
if (
helper?.model?.post_number !== 1 ||
!post ||
post.post_number !== 1 ||
!desiredCategories.includes(post.topic?.category?.id) || // Vérifier la catégorie
element.classList.contains("post__contents-cooked-quote") || // Vérifier si l'élément lui-même est le contenu de la citation
element.closest("aside.accepted-answer") || // Vérifier le wrapper de solution/citation
element.closest(".quote") // Vérification supplémentaire pour les citations génériques
) {
return;
}
const wrapper = document.createElement("div");
wrapper.className = "tracking-id";
helper?.renderGlimmer(
wrapper,
<template><TopicIdentifier @post={{helper.model}} /></template>
);
element.appendChild(wrapper);
});
});
Je sais que je peux facilement le tester, mais savez-vous d’emblée si cela fonctionnerait si je mettais ce JS et ce CSS dans leur propre composant, ou si cela devait être dans le thème lui-même ?
J’ai trouvé une autre petite anomalie. Je voyais les bulles de classe vides dans le premier message des sujets en dehors des 2 dans lesquels je les voulais, j’ai donc dû mettre à jour le code un peu. Voici le produit final.
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; // premier message du sujet
const desiredCategories = [9, 23]; // une liste d'ID de catégories séparés par des virgules où vous voulez que cela apparaisse
const isInCategory = desiredCategories.includes(
this.args.post?.topic.category.id
);
return firstPost && isInCategory;
}
<template>
{{#if this.shouldShow}}
<!-- vous pouvez modifier le contenu ci-dessous, {{this.topicId}} est l'endroit où l'ID du sujet sera rempli -->
Le numéro de suivi du problème est
{{this.topicId}}
<!-- vous pouvez modifier le contenu ci-dessus -->
{{/if}}
</template>
}
export default apiInitializer("0.8.40", (api) => {
api.decorateCookedElement((element, helper) => {
// Only proceed if this is the first post and not inside a solution quote
// Only proceed if this is the first post, not in a quote, and in the desired category
const post = helper?.model;
const desiredCategories = [9, 23]; // Match the categories from TopicIdentifier
if (
if (
helper?.model?.post_number !== 1 ||
!post ||
post.post_number !== 1 ||
!desiredCategories.includes(post.topic?.category?.id) || // Check category
element.classList.contains("post__contents-cooked-quote") || // Check if the element itself is the quote content
element.closest("aside.accepted-answer") || // Check for solution/quote wrapper
element.closest(".quote") // Additional check for generic quotes
) {
return;
}
const wrapper = document.createElement("div");
wrapper.className = "tracking-id";
helper?.renderGlimmer(
wrapper,
<template><TopicIdentifier @post={{helper.model}} /></template>
);
element.appendChild(wrapper);
});
});
element.classList.contains("post__contents-cooked-quote") || // Check if the element itself is the quote content
element.closest("aside.accepted-answer") || // Check for solution/quote wrapper
element.closest(".quote") // Additional check for generic quotes
) {
return;
}
const wrapper = document.createElement("div");
wrapper.className = "tracking-id";
helper?.renderGlimmer(
wrapper,
<template><TopicIdentifier @post={{helper.model}} /></template>
);
element.appendChild(wrapper);
});
});
Et pour répondre à ma propre question, j’ai déplacé tout le code vers un nouveau composant de thème et tout fonctionne toujours bien.