Verwendung von Plugin Outlet Connectors aus einem Theme oder Plugin

Discourse umfasst Hunderte von Plugin-Outlets, die verwendet werden können, um neuen Inhalt einzufügen oder bestehenden Inhalt in der Discourse-Benutzeroberfläche zu ersetzen. „Outlet-Argumente

39 „Gefällt mir“
Using discourse's plugin outlets
What is the best way to integrate member applications?
Add HTML (Link) Next To Logo
Group Semantics
Can I put the search form at the top of our 404 page?
How to show user total post count beside name
Developing Discourse Plugins - Part 2 - Connect to a plugin outlet
Native theme support
Feedback on "on-discourse" javascript for setting up custom JS for each page?
Topic-timeline api.decorateWidget call has stopped working
Developing Discourse Plugins - Part 2 - Connect to a plugin outlet
Developing Discourse Themes & Theme Components
How to add btn before "sign in"
Minimizing Maintenance on Theme Customizations
How to add custom fields to models
Tags at the top of the topic list in a Category
I want to insert images (banner) between the topic answers. How do I start?
How to add a link shortcut to the area under the title
Baidu Search
Add Banner/HTML (Widget) before reply button
Upcoming Header Changes - Preparing Themes and Plugins
Upgrading Discourse to Ember 4
Converting modals from legacy controllers to new DModal component API
Need help integrating code wrote on Edittext to the Discourse
Settings not appearing
Add link to external SSO profile to profile page
How to add a custom button in user profile card?
(not recommended) Overriding Discourse templates from a Theme or Plugin
How to override the site-header.hbs file from custom theme?
Upcoming topic-list changes - how to prepare themes and plugins
Working with .erb templates in a plugin
How to Integrate a Custom Plugin in discourse UI
Templating of my "component" broke. How do I fix it?
Templating of my "component" broke. How do I fix it?
Modernizing inline script tags for templates & JS API
Custom Components -- add button or text at any plugin outlet
(not recommended) Overriding Discourse templates from a Theme or Plugin
Adding "latest topics" header in the main interface
Display Tags inline with thread title, instead of being on the bottom line
How to add a custom button in user profile card?
Discourse view file update does not reflect in browser
Discourse view file update does not reflect in browser
Add likes and views to search display
Using template hbs to add HTML content to a plugin outlet
Adding a billing section in the member section
Adding a billing section in the member section
How to modify the header HTML, but still remaining the default founctions
Removing support for "template overrides" and mobile-specific templates
How can i add image in login and register box
Most “traditional” or classic forum Category listing
Newbie help accessing code
How to add custom html next to logo using discourse plugin methods
Using the DModal API to render Modal windows (aka popups/dialogs) in Discourse
Air Theme
How to create a plugin with backend API calls to populate composer while drafting?
How to add a custom url text link on the login page
Add Text In Header Beside Logo
Split up theme Javascript into multiple files

Dies ist jetzt veraltet, richtig?
Deprecation notice: Defining connector classes via registerConnectorClass is deprecated. See https://meta.discourse.org/t/32727 for more modern patterns. [deprecation id: discourse.register-connector-class-legacy]

Das ist richtig; Sie können stattdessen api.renderInOutlet verwenden. :slight_smile:

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/plugin-api.js#L982-L1008

1 „Gefällt mir“

Ich glaube, es ist ein bisschen komplizierter als das :sweat_smile:
https://github.com/Firepup6500/discourse-custom-profile-link/blob/master/common/head_tag.html

Keine Sorge; ich werde sehen, was ich später für Sie tun kann (ich muss jetzt schlafen). :smile:

1 „Gefällt mir“

Danke! (Entschuldigung, dass der Code ein Chaos ist, ich wollte nur, dass er funktioniert, als ich ihn das letzte Mal angefasst habe :sweat_smile:)

1 „Gefällt mir“

Ich stecke hier etwas fest. Ich habe eine Benachrichtigung für meine Komponente erhalten, die in der HEAD-Datei meines Themes verwendet wird. Ich bin mir nicht sicher, wie ich sie mit api.renderInOutlet neu schreiben soll.

  const ajax = require('discourse/lib/ajax').ajax;
  const Topic = require('discourse/models/topic').default;
  // Wir verwenden ajax und das Topic-Modell von Discourse

  api.registerConnectorClass('above-main-container', 'featured-topics', {
    // above-main-container ist der Plugin-Outlet,
    // featured-topics ist der Name Ihrer benutzerdefinierten Komponente

    setupComponent(args, component) {

   // der Rest des Codes folgt

Ich glaube, ich habe versucht, api.registerConnectorClass durch api.renderInOutlet zu ersetzen, aber es hat nicht funktioniert. Ich bin hier kein Experte für Theme-Coding. Danke für jede Hilfe.

Sie können hier ein Beispiel sehen:

StatBanner ist eine native Klasse, die im Verzeichnis components definiert ist:

In Ihrem Fall wäre das api.renderInOutlet("above-main-container", YourClass)

Ich glaube nicht, dass Sie das in der HEAD-Datei tun können. Sie sollten Ihren Code in mehrere Dateien aufteilen.

Ich ermutige Sie, Discourse Theme CLI zu verwenden, da die Entwicklung einer Theme-Komponente damit viel einfacher ist!

Ist Ihre Theme-Komponente öffentlich?

3 „Gefällt mir“

Gibt es eine Möglichkeit, den aktuellen Auslass in meiner .js-Datei zu erhalten?

Ich glaube nicht, dass das möglich ist.

Früher war es möglich, parentView in Classic Components zu inspizieren.

Aber diese Eigenschaft wurde als veraltet markiert.

1 „Gefällt mir“

Was meinen Sie mit „den aktuellen Auslass erhalten“? Meinen Sie den Namen des Auslasses? Oder etwas anderes?

Ich habe eine Lösung für mein Problem gefunden (hier), aber sie sah ungefähr so aus:

  • Erstellen Sie .hbs- und .js-Dateien für 3 verschiedene Auslässe.
  • Überprüfen Sie in jeder JS-Datei, ob der verwendete Auslass dem Wert der Einstellung banner_location entspricht.
  • Wenn ja, zeigen Sie das Banner an. Wenn nicht, blenden Sie das Banner aus.
1 „Gefällt mir“

Cool! Es sieht so aus, als ob Sie sich für die Verwendung von api.renderInOutlet mit einem dynamischen Wert für den Outlet-Namen entschieden haben :chefs_kiss:

1 „Gefällt mir“