トピック内でトピックIDを変数として取得する方法はありますか?
ユースケースとして、サポートおよびバグ追跡チケットのカテゴリがあります。テンプレートを次のように設定したいと思います。
これ:
> この行を削除しないでください: サポートリクエスト #$(topicid)
このように見えます:
この行を削除しないでください: サポートリクエスト #246
情報を取得する他の方法も検討中です。ただ、どうすればよいかわかりません。
トピック内でトピックIDを変数として取得する方法はありますか?
ユースケースとして、サポートおよびバグ追跡チケットのカテゴリがあります。テンプレートを次のように設定したいと思います。
これ:
> この行を削除しないでください: サポートリクエスト #$(topicid)
このように見えます:
この行を削除しないでください: サポートリクエスト #246
情報を取得する他の方法も検討中です。ただ、どうすればよいかわかりません。
トピックIDをトピックの生投稿に入れようとしていますか?
それはどのような問題を解決するのでしょうか?
サポートスタッフに、まず新しいトピックを作成し、保存してから、URLを見てID#を取得し、トピックに戻って手動で本文に#を入力する必要があることを伝えるという問題を解決します。
このユースケースでは、OPの本文にあるトピックID#を何に使用していますか?
チケット/バグの一意のID番号。
そのチケット/バグはどこにあるのでしょうか?IDはURLにあります。そこでは永続的で、決して間違っていません。トピックのテキストにトピックIDを含めることはどのように役立ちますか?そして、あなたが指摘するように、それがメッセージの本文にある場合、誰でもそれを変更、削除、または間違って入力することができます。
トピックIDを使用しているものはありますか?もしそうなら、何がどのように使用していますか?
テンプレートを埋めるよりも、これを適切な投稿に追加するカスタムコンポーネントを作成する方が簡単です。
テーマのコードを 管理 > テーマとコンポーネント で編集し、JSタブにこれを追加すると、いくつかの調整で目的の結果が得られるはずです。
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; // トピックの最初の投稿
const desiredCategories = [45, 3]; // これを表示したいカテゴリIDのカンマ区切りリスト
const isInCategory = desiredCategories.includes(
this.args.post?.topic.category.id
);
return firstPost && isInCategory;
}
<template>
{{#if this.shouldShow}}
<!-- 下の内容は編集できます。{{this.topicId}} の部分にトピックIDが挿入されます -->
このトピックのIDは
{{this.topicId}}
<!-- 上の内容は編集できます -->
{{/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);
});
});
カテゴリIDはURLから見つけることができます。例えば、MetaのサポートカテゴリのIDは6です。これを desiredCategories で設定してください。
CSSタブで、お好みに合わせてスタイルを追加できます。例えば:
.custom-topic-id {
display: inline-block;
background: yellow;
}
はい、タイプミスをする可能性があります。そのため、変数を使用すればタイプミスを気にする必要がありません。
私がユーザーであり、ワークフローをそのように設定したいので、役立ちます。
現在、DiscourseをトピックIDで検索することはできません。#がトピックの本文に含まれている場合、それは検索結果の一部となります。
そのため、同僚に「ねえ、バグ #138 を検索して、どう思うか教えて」と言うことができます。
そうすれば、ナンシーはサイトにアクセスして138を検索するだけで結果を得ることができます。
検索する必要はありません。
/t/-/id – しかし、実際には/t/idで機能します。
彼らは単に/t/138と入力すればよく、検索する必要はありません。しかし、人と話している場合、「番号よりも会話で使う方が理にかなっている「彼らが知っている単語」についてのバグを検索する」と言う方が良いのではないでしょうか?
そして、それが私のもう一つの提案でした。
decorateCookedElement を完全に理解していないため、decorateCookedElement ではなく renderInOutlet を使用したと思いますが、それはおそらく私が decorateCookedElement を完全に理解していないからです。
しかし、これではトピックIDでバグ/トピックを検索することはできません。
これを試してみます。情報ありがとうございます。それが検索可能になる体の部分ですか?
しかし、私は検索したいのです。それが簡単だからです。
サイトに移動してから、ウィンドウの上部にある URL に /t/id を追加するのと、サイトに移動してページの中央にある検索フィールドに ID を入力するのとでは、後者の方が簡単です。
人と話している場合、またはメッセージを入力している場合、はい、番号の方が「5語になる可能性のある正確なタイトルを検索する」よりも簡潔で間違いが少ないです。
それを調べてみますが、検索フィールドでの使用ができなくなるのであれば、私には機能しません。
Discourse が本当に大好きで、ここでの皆さんからたくさんの役立つフィードバックや助けを得ています。
理解できないのは、時々「そのやり方はやめた方がいい、こっちの方が良い」と言われることです。いや、あなたにとってはそちらの方が良いかもしれませんが、私にとってはこっちの方が良いのです。そして、どちらも間違っていません。
それを調べてみますが、検索フィールドでの使用ができなくなるのであれば、私には使えません。
それなら気にしないでください。残念ながら、トピックはレンダリング時にトピックに追加されるだけで、検索可能なデータベースには追加されません。完全に自動化するには、カスタムプラグインまたはカスタムスクリプトを Discourse Automation に追加する必要があると思います。
トピックIDで検索したり、テンプレートに含めたりすることは一般的なリクエストではないため、標準ではサポートされていません。
私が理解できないのは、時々「そのやり方は良くないので、こうすべきだ」と言われることです。いや、それはあなたにとっては良いやり方かもしれませんが、私にとってはそうではありません。どちらも間違っていません。
ここでは、常連客は、現在そのような機能がないことを知っているため、回避策を検討してサポートしようとしているのだと思います。
ですから、いくつかの潜在的な回避策を見つけることで、あなたをサポートしようとしています。
そして、多くの場合、戻ってみると、より良い解決策を見つけることができます。
トピックIDをテキストに埋め込んで検索で見つけられるようにしたいのであれば、プラグインが必要になります。そのプラグインは、生のテキストにticket123を追加できるでしょう(検索は生のテキストを見ると思いますか?)。トピックIDは、トピックを作成する前に存在しないため、作成時に挿入することはできません。
ああ!おそらくあなたが望んでいるのは、バグカテゴリのトピックが作成されたときに、タグbug123を追加するプラグインでしょう。そうすれば、#bug123として参照でき、言及した場所どこでもリンクされ、検索できるようになります。セルフホストまたはエンタープライズであれば、それほど難しくありません。#marketplaceの誰かが250ドルから500ドルでやってくれると思います。
または、番号でバグを「検索」できるようにしたい場合は、テーマコンポーネントを追加して、「バグボックス」に入力して直接そこへ移動できるようにすることができます。おそらくそれは機能する解決策であり、プラグインは必要ありません。
結果として、トピックIDがより目立たない形で表示されるようになりました。まだ検索はできませんが、本当に必要なものが実現するまでこれで我慢します。
<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> #${topic.get('id')}</b></div>`);
}
});
</script>
問題は、このコードが古くなり、修正方法がわからないことです。
準拠させるためには、何に更新する必要がありますか?
これを実現する方法の例として、GitHub - literatecomputing/discourse-custom-components を作成しました。
- settings.custom_text_block.forEach((component) => {
- api.renderInOutlet(component.outlet, <template>
- <div class={{concatClass "custom-component" component.class}}>
- {{htmlSafe component.text}}
- </div>
- </template>);
は、コンポーネントを挿入する簡単な例です。したがって、トピックIDを取得するために \u003ctemplate\u003e の前にコードを追加し、表示するかどうかのロジックを追加することになります。
topic-list-before-link をプラグインのアウトレットとして使用したいと考えています。
でも検索したいんです。それが簡単だから。
サイトに行って、ウィンドウ上部のURLに /t/id を追加するのと、サイトに行ってページ中央にある検索フィールドにIDを入力するのと、どちらが簡単か。
私の認識が正しければ、検索バーに topic:id と入力すると、結果にトピックが表示されます。
例:topic:374168 this を検索すると、このトピックの投稿のみが表示されます。
プラグインが必要で、チケット123を生のテキストに追加できるかもしれません(検索は生のテキストを見ると思いますか?)。トピックIDはトピックを作成する前に存在しないので、作成時に挿入することはできません。
疑問なのですが…トピックの生データを更新するためにajaxリクエストを送信するTCで十分でしょうか?
例えば、
topic:374168 thisで検索すると、このトピックの投稿のみが表示されます。
これはこのトピックでのみ機能します。別のランダムなトピックを試してください。「one two four two four zero」を検索してみてください。それがタグバナートピックIDです。
topic:124240ということですか? 充填語(「こんにちは」)は単なる例でした。タグバナーの場合は、「こんにちは」でうまくいきます。サポートチケット全体で一般的な単語、または単に一般的な単語がある場合は、それを試すことができますか?
問題はこのコードが古くなっており、修正方法がわからないことです。
Topic ID as a variable? - #7 by awesomerobot のコードを試しましたか?
また、やりたいことがトピックIDを「検索」することであれば、トピックIDを受け入れてそのトピックにジャンプするコンポーネントを作成できるかもしれません。