テーマとプラグインの違い、また私が挙げた具体的な例についても、とても参考になりました。ありがとうございます。
これまでの私のアプローチは、Discourse のコードの詳細(このオブジェクトはどこで定義されているか、どのテンプレートが制御されているか、このアクションを処理するロジックはどこにあるかなど)を一つずつ確認するものでした。しかし、それは非常に時間がかかる作業でした。
より効率的な方法として、API に焦点を当てるべきだと考えています。そうすれば、成熟した Discourse コードの詳細をすべて確認する必要もなくなりますし、プラグインではなくテーマの構築、あるいは「カスタマイズ」ダッシュボードへの直接の変更入力に集中することもできます。
要するに、Discourse のコードベース全体を理解しようとするよりも、API の仕組みを理解する方がずっと現実的だと感じています。
私が挙げた例で考えると:カテゴリのモデレーターであるユーザーが、カテゴリページでトピックをピン留めできるようにする。
これをプラグインなしで実現できるでしょうか?以下のように考えてみました。
1. ユーザーがカテゴリのモデレーターかどうか?
現在、API を見ても、ユーザーがカテゴリのモデレーターかどうかを示すものが何も見つかりません。カテゴリを取得する GET リクエストに含まれているはずだと思われますが、そのような呼び出しは見当たりません。あるいはユーザーを取得する GET リクエストにあるかもしれませんが、そこにはユーザーがモデレーターを務めるカテゴリの一覧もありません。
これらを追加することは可能でしょうか?
あるいは、ユーザーまたはカテゴリにカスタムフィールドを作成してモデレーターであることを識別し、カテゴリページが読み込まれた際にそのカスタムフィールドを API で呼び出す方法もあるかもしれません。
2. ユーザーがモデレーターの場合、ピン留めボタンを表示する。
(1) が解決できれば、フロントエンドの JavaScript と CSS を使って、ユーザーがモデレーターである場合にのみこのボタンを表示すればよいと考えられます。
3. ユーザー(モデレーター)がボタンをクリックし、トピックをピン留めする。
API 上、トピックには「pinned」という属性(ブール値)があるようです。これはカテゴリ内でのピン留め状態に対応していると思われます(各トピックは通常 1 つのカテゴリに属しているため)。
したがって、モデレーターが「ピン留め」ボタンを押した際に、トピックの「pinned」ステータスを True に更新すればよいでしょう。もしそれが機能しない場合、カスタムフィールドを使う方法もあります(ただし、トピックにカスタムフィールドを追加する方法は現時点では見つかっていません)。
このように、あるいはこれに似た方法で、API を活用すれば、プラグインを使って実装する場合に必要となる Discourse コードベースの膨大なファイル確認を避けつつ、このタスクを達成できそうです。
この考え方で合っていますでしょうか?**