新しいトピックボタンをサブメニューにする

皆さん、こんにちは。

特定のカテゴリで「新規トピック」ボタンにサブメニューを付ける方法をご存知の方はいらっしゃいますか?

現在は以下のようになっています。

「新規トピック」ボタンをクリックしたときに、以下のような表示になることを期待しています。

これを実現する方法はいくつか考えられますが、考えすぎているかもしれません。標準のボタンを非表示にして、ドロップダウン付きのまったく新しいボタンを追加するというアイデアもありました。

これは現在使用しているコードですが、上記の方法で実装する前に、簡単にメニュー項目を追加する方法はありますか?

<script type="text/x-handlebars" data-template-name="/connectors/before-create-topic-button/syncbutton">
  <button onclick="window.location.href='/w/issue-with-sync3'" class="btn-default btn btn-icon-text ember-view customnewtopicbtn" title="Create a new topic using the SYNC 3 Issue template">
    <svg class="fa d-icon d-icon-plus svg-icon svg-string" xmlns="http://www.w3.org/2000/svg">
      <use xlink:href="#plus"></use>
    </svg>
    <span class="d-button-label">New Sync Issue</span>
  </button>
</script>

また、「トピックを作成」ボタンを非表示にする場合、その「新規トピック」ボタンへのリンクを取得するために使用できる変数や関数はありますか?

編集:むしろ、「新規トピック」セクションはどのように開かれるのですか?IDまたはクラスに一致するボタンをクリックすることで開かれると思っていましたが、そうではないようです。

よろしくお願いします。

「いいね!」 2

このテーマコンポーネントをご覧ください。

ヘッダーにドロップダウンボタンを追加するもので、まだいくつか変更を加えるかもしれませんが、デフォルトのボタンを置き換え、コンポーザーを開いて事前入力する方法のアイデアを得られるはずです。

「いいね!」 3

ありがとうございます。これでうまくいくかもしれません。調べてみます。

Topic List ボタンにそれをどのように配置するかが問題だと思います。プラグインのアウトレットでは DecorateWidget を使用できないようです。

「いいね!」 1

ああ、そうだ、だから公開しなかったんだ。もっと柔軟にして、ボタンを色々な場所に挿入できるようにしたかったんだ。でも、プラグインのアウトレットしかない場合に、ウィジェットをどのように追加すればよいかわからなかった。誰か良い方法を知っているかな?

「いいね!」 1

へへ :slight_smile: これを見つけましたが、私のスキルは実際にはJavaScriptにはないので、役に立つかどうかはわかりません :laughing:

今のところ、素晴らしい仕事です :slight_smile:

「いいね!」 1

先週も似たようなことをしました…

テーマでは、これを javascripts/discourse/components/new-topic-dropdown.js に追加できます。

import { action } from "@ember/object";
import { getOwner } from "discourse-common/lib/get-owner";
import Composer from "discourse/models/composer";
import DropdownSelectBoxComponent from "select-kit/components/dropdown-select-box";
import { computed } from "@ember/object";

export default DropdownSelectBoxComponent.extend({
  classNames: ["new-topic-dropdown"],

  selectKitOptions: {
    icons: ["plus"],
    showFullTitle: true,
    autoFilterable: false,
    filterable: false,
    showCaret: true,
    none: "topic.create",
  },

  content: computed(function () {
    const items = [
      {
        id: "new_discussion",
        name: "New Topic",
        description: "Start a new discussion",
        icon: "comment",
      },
    ];

    items.push({
      id: "new_ticket",
      name: "Support ticket",
      description: "Start a support request",
      icon: "tag",
    });

    return items;
  }),

  @action
  onChange(selectedAction) {
    const composerController = getOwner(this).lookup("controller:composer");

    let tags = null;
    let categoryId = this.category ? this.category.id : null;

    if (selectedAction === "new_ticket") {
      tags = "ticket";
    }

    composerController.open({
      action: Composer.CREATE_TOPIC,
      draftKey: Composer.DRAFT,
      categoryId: categoryId,
      tags: tags,
    });
  },
});

これにより、ドロップダウンボタンに「新しいトピック」と「サポートチケット」のオプションが追加されます。「新しいトピック」は通常どおりコンポーザーを開き、「サポートチケット」はタグ「ticket」が既に追加された状態でコンポーザーを開きます。

…そして javascripts/discourse/connectors/after-create-topic-button/new-topic-dropdown.hbs

{{#if currentUser}}
  {{new-topic-dropdown category=category}}
{{/if}}

…次に、CSSでデフォルトのボタンを非表示にしたい場合があります。

.navigation-controls {
  #create-topic {
    display: none;
  }
}
「いいね!」 19

絶対的なレジェンド :slight_smile: ありがとう

「いいね!」 3

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.