api.decorateWidget - wie finde ich die Namen der Vorlagen?

Wie finde ich die Discourse-Template-Standorte, um sie im Code festzulegen?
Besonders interessiert mich der korrekte Name der Benutzerkarte

Es gibt eine sehr praktische Theme-Komponente, mit der Sie die Plugin-Öffnungen unserer verschiedenen Handlebars-Templates nachverfolgen können: (deprecated) Plugin outlet locations theme component. Am Ende des ersten Beitrags finden Sie einen Link zu einer Vorschau der Komponente auf unserer Theme-Erstellungsseite. Damit können Sie die meisten Plugin-Öffnungen finden, ohne sie auf Ihrer eigenen Seite installieren zu müssen.

Etwas, das Sie beachten sollten, ist, dass Templates und Widgets zwei separate Konzepte sind. Das bedeutet nicht, dass sie nicht zusammenarbeiten können, falls erforderlich, indem ein Widget an einer Plugin-Öffnung eines Templates montiert wird. Es ist jedoch üblicher, Connector-Komponenten oder Controller zu verwenden, um mit Plugin-Öffnungen zu arbeiten, ähnlich wie bei einem Plugin.

Dieser Abschnitt des Entwicklerhandbuchs behandelt viele der Punkte, die Sie suchen. Ich empfehle außerdem, die GitHub-Repositories von Theme-Komponenten in unserer #theme-Kategorie durchzugehen, um einige gute Beispiele zu sehen.

5 „Gefällt mir“

Vielen Dank für den Hinweis! Ich habe den erforderlichen Teil user-card-post-names:after gefunden.

Ich habe versucht, ihn im ursprünglichen Code zu verwenden, aber es hat nicht funktioniert.

Ich habe poster-name:after zu user-card-post-names:after geändert, aber es hat nicht funktioniert und das benutzerdefinierte Feld ist auf der Benutzerkarte nicht sichtbar. Hast du eine Idee, woran das liegen könnte?

Sie können decorateWidget() nicht auf einem Plugin-Outlet verwenden. Versuchen Sie stattdessen etwas wie folgt:

<script type="text/discourse-plugin" version="0.8.42">
    const h = require("virtual-dom").h;
    api.createWidget("user-card-custom-field", {
      html(attrs) {
        const userCustomFields = attrs.user.custom_fields;
        if (userCustomFields.user_field_4) {
            return h('span.poster-user-field', userCustomFields.user_field_4);
        }
      }
    });
</script>

<script type="text/x-handlebars" data-template-name="/connectors/user-card-post-names/user-card-custom-field">
    {{mount-widget widget="user-card-custom-field" args=(hash user=user)}}
</script>

mount-widget übergibt das Benutzerobjekt, das wir aus dem Plugin-Outlet im Kern verfügbar haben, und macht es in den Attributen des von uns erstellten user-card-custom-field-Widgets verfügbar.

Stellen Sie sicher, dass Sie user_field_4 nach Bedarf zu Ihren Einstellungen für „öffentliche Benutzerbenutzerfelder

8 „Gefällt mir“

Vielen Dank! Alles funktioniert.

1 „Gefällt mir“

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