以下のようなプラグインを作成しようとしています。
composer-fieldsの隣に「検索」という新しいボタンが表示される。
ボタンをクリックすると、検索フォームが表示されるオーバーレイがポップアップ表示される。
検索フォームでユーザーは検索語(例えば都市名)を入力でき、独自の画像検索エンジン(APIキーが必要な私のURLで実行される)でその都市の画像を検索する。
上位5枚の画像が表示される。ユーザーが1枚の画像を選択すると、オーバーレイが消え、画像と検索文字列がコンポーザー内にドラフトとして追加される。ユーザーはその後、投稿の続きを書くことができる。
実際のユースケースはもう少し複雑ですが、大まかにはこのようなことを達成したいと考えています。目標は、検索エンジンに手動で行き、画像をコピーしてドラフトを作成するよりも、ユーザーが画像付きの投稿ドラフトをより便利に作成できるようにすることです。
すでに、composer-fieldをコネクタとして使用して新しいボタンを作成することには成功しています。ボタンはクリックでき、アクションをトリガーします。しかし、ここで行き詰まっています。
質問:
私の作業を楽にしてくれるプラグインはありますか? Pavilion wizard pluginを考えていましたが、APIへの呼び出しは有料版のみで提供されていること、そして現時点ではこのプラグインにお金を費やす価値があるかどうかを判断するには時期尚早であることを知りました。
オーバーレイをアクティブ化するためにターゲットにできる適切なCSSクラス/div IDは何ですか?
バックエンド経由でAPI呼び出しを行う方法を理解するための良い例は何ですか?検索エンジンのAPIキーをクライアントに渡したくないので、バックエンド経由で行う必要があります。
プラグインAPIが実際には何であるか、そしてそれが必要かどうかはわかりません。(ドキュメントがあちこちに散らばっていて少し苦労しています。)
その他のヒントやアドバイスも歓迎します。
「いいね!」 1
その間、いくつか有益なリソースを見つけました。これらを「プラグインの書き方」チュートリアルで、より目立つように配置できればと思います。初心者には、それらの存在さえ明らかではありません。
Discourse自身のAPI(プラグイン作成には役立ちませんが、初心者には関連性があります):https://docs.discourse.org/
クライアントプラグインAPI(プラグインのバックエンド作成には役立ちませんが、フロントエンドにとっては間違いなく作業が容易になります):
A versioned API for client side plugins
discourse/app/assets/javascripts/discourse/app/lib/plugin-api.gjs at main · discourse/discourse · GitHub
バックエンドプラグインAPIは基本的にRailsまたはRubyであると理解しましたが、フロントエンドとバックエンドがどのように相互作用するのか、またはバックエンドの最初の「フック」がどこにあるのかは明確ではありません。もちろん、配置するplugin.rbはありますが、このファイルへのエントリポイントに関するドキュメントがあるかどうか疑問に思っています。Ruby on Railsプログラマーにとっては明白かもしれませんが、私はそうではないので、これは急な学習曲線です。
renato
(Renato Atilio)
2025 年 3 月 12 日午後 6:24
3
fabkosta:
(APIキーを必要とする独自のURLで実行中)
バックエンドの変更は必要ないようです。説明されている動作は、当社の「ハイパーリンクの挿入」モーダル の動作と非常によく似ています。トピックを検索し、リンクとして追加するトピックを選択すると、確認時にコンポーザーにリンクが追加されます。
プラグインのアウトレット またはapi.onToolbarCreate をイニシャライザに追加してツールバーに追加し、「ハイパーリンクの挿入」モーダル と同様の方法でモーダルを開くことができます。ツールバーアクションからのtoolbarEvent オブジェクト を活用してコンポーザーにaddText を追加できます(アウトレットが必要な場合は、appEvents トリガー を介してコンポーザーと対話することもできます)。
「いいね!」 4
ありがとうございます。大変参考になります。モーダルはまさに私が探していたものです。ユーザーのフローを中断させ、ユーザーがモーダルを完了したときにのみ、元の状態に戻ります。ハイパーリンク挿入モーダルがどのように機能するか見てみます。
質問: DModal、DButton、その他のDiscourse固有のオブジェクトのドキュメントはどこで見つけられますか?
こちらです:
Discourse 3.1.0.beta6 ships with a brand new <DModal> component-based API.
This supersedes the old controller-based API, which is now deprecated. If you have existing modals using the old APIs, check out the migration guide here .
Rendering a Modal
Modals are rendered by including the <DModal> component in a handlebars template. If you don’t already have a suitable template, check out Using Plugin Outlet Connectors from a Theme or Plugin .
A simple modal would look someth…
こちらも注目に値します:
Basic Usage
FormKit exposes a single component as its public API: <Form />. All other elements are yielded as contextual components, modifiers, or plain data.
Every form is composed of one or multiple fields, representing the value, validation, and metadata of a control. Each field encapsulates a control, which is the form element the user interacts with to enter data, such as an input or select. Other utilities, like submit or alert, are also provided.
Here is the most basic example of a fo…
例については、Discourse/plugins/theme components を参照してください。
「いいね!」 4
フロントエンドとバックエンドがルーティングによってどのように連携されているかを説明している、こちらも非常に重要な記事です。
Over time Discourse has grown in complexity and it can be daunting for beginners to understand how data gets all the way from the back end Ruby on Rails application to the Ember.js application in front.
This tutorial is meant to show the full lifecycle of a request in Discourse and explain the steps necessary if you want to build a new page with its own URL in our application.
URLs First
I always prefer to start thinking of features in terms of the URLs to access them. For example let’s say we…
「いいね!」 1
さらにパズルピースです。
API キーは、/admin/api/keys で安全に保存できます。
「いいね!」 1
ついに、プラグインの作成方法に関する素晴らしいチュートリアルを見つけました。
「いいね!」 1