Entwicklung von Discourse-Plugins – Teil 3 – Benutzerdefinierte Site-Einstellungen hinzufügen

You simply need to add a

config/locales/server.zh_CN.yml

file (and similar for any other locales you want to support) with the same English tokens but with language specific values and the plugin will use that instead of falling back to the English.

2 „Gefällt mir“

Thanks for helping! have a nice day!

3 „Gefällt mir“

I was looking how to create a site setting that validates a username, but found there’s a username type to do this. Here the list of site setting types we have today:

  • email
  • username
  • integer
  • regex
  • string
  • list
  • enum

Also, you can do custom validations for your plugin settings, it accepts a validator field that expects a Ruby class. You use it like this.

plugins:
  my_custom_username_validation:
    default: 'system'
    validator: 'UsernameSettingValidator'

You can check the UsernameSettingValidator class to see the interface of validators.

Cheers!

10 „Gefällt mir“

not working (

<a id="forgot-password-link" class="forgot-password" href="{{Discourse.SiteSettings.myplugin_link_forgot_password}}" target="_blank">Forgot password?</a>

settings.yml

plugins:
  myplugin_enabled:
    default: true
    client: true
  myplugin_link_forgot_password:
    default: ''
    client: true

upd:
working!!!
href="{{unbound siteSettings.myplugin_link_forgot_password}}"

how to display text html ?
not working {{unbound siteSettings.forum_text_for_admin}}

upd:
working in *.hbs {{{unbound siteSettings.forum_text_for_admin}}}

Again you need to use a Computed Property and format as safe html. This is EmberJS not vanilla JavaScript. You can’t put ‘code’ directly into templates. Read the ember guides.

1 „Gefällt mir“

already working with EmberJS

Ich habe das in meiner settings.yml:

plugins:
  county_fence_enabled:
    default: false
    client: true
  county_fence_latrine_category:
    default: -1
    client: true

Das wird auf meiner /admin/plugins-Seite angezeigt:

Ich verstehe nicht, warum es keinen Einstellungsknopf gibt?

Ich denke, anstatt plugins zu verwenden, sollst du den Plugin-Namen county_fence schreiben.

2 „Gefällt mir“

Ich habe das auch versucht, ohne Unterschied.

Diese Dokumentation (sowie OP) verwendet den Schlüssel plugins. An anderen Stellen habe ich, wie Sie sagten, den Plugin-Namen gesehen.

1 „Gefällt mir“

@bitmage tatsächlich, ich könnte den Grund kennen.

Hast du # name: County Fence in plugin.rb geschrieben?
Wenn ja, muss der Name mit deinem Verzeichnisnamen übereinstimmen.

Der Plugin-Name kann anhand der Lokalisierung überschrieben werden:

Angenommen, du hast dieses Einstellungsformat:

county_fence:
  county_fence_enabled: true
  ...

in client.en.yml:

en:
  admin_js:
    admin:
      site_settings:
        categories:
          county_fence: "County Fence"

Das Festlegen des Standardwerts auf 0 statt auf -1 führte dazu, dass es angezeigt wurde.

Gibt es eine Möglichkeit zu erkennen, dass ein Typ nicht richtig erkannt wird?

  1. YamlLoader lädt die Datei.
  2. SiteSettingExtension ruft setting() auf mit den von YamlLoader generierten Parametern
  3. …was defaults.load_setting und später type_supervisor.load_setting aufruft
  4. Obwohl type_supervisor.load_setting nicht direkt den Wert übergeben bekommt, hat es Zugriff auf die Standardwerte, da diese bei der Initialisierung des TypeSupervisor über DefaultsProvider übergeben werden.
  5. type_supervisor.load_setting ruft dann get_data_type auf, was parse_value_type() aufruft, was einen ArgumentError auslösen sollte, wenn der Typ nicht erkannt werden kann.

Ich glaube, diese gesamte Sequenz wird von load_settings im SiteSetting-Modell aufgerufen, und ich sehe nirgendwo im Stack eine Ausnahmebehandlung. Aber ich sehe keine Fehlerausgabe im Serverprotokoll oder anderswo.

Es scheint, als ob es irgendeine Art von Benutzerfeedback oder Fehlerprotokoll geben sollte, das besagt, dass eine Einstellung nicht geparst werden konnte.

Wenn ich Sie richtig verstehe, sagen Sie, dass die Verwendung von -1 als Standardwert für eine Einstellung dazu führt, dass die Schaltfläche „Einstellungen“ nicht angezeigt wird. Können Sie dieses Verhalten jedes Mal reproduzieren?

Das ist seltsam. Ich sehe nichts Falsches an Ihren Einstellungen, ich bin mir nicht sicher, wie es zu einem Fehler beim Parsen kommen kann. :thinking:

Jetzt, da es funktioniert, kann ich es wieder auf -1 zurückstellen und es funktioniert weiterhin.

Ich habe die Datenbank gelöscht, neu initialisiert und kann es immer noch nicht reproduzieren. :person_shrugging:

1 „Gefällt mir“

Ich habe das Plugin vorsichtshalber mit dem Standardwert 0 auf meiner Live-Website bereitgestellt. Die Schaltfläche “Einstellungen” wird angezeigt:

image

Aber wenn ich darauf klicke, werden keine Einstellungen angezeigt:

Ich werde das Plugin deaktivieren, während ich dies weiter untersuche.

Ok, ich denke, in beiden Fällen (Entwicklung und Produktion) lag es daran, dass der Ordner im Plugins-Verzeichnis nicht mit county-fence übereinstimmte. Deshalb wurde die Einstellung nicht angezeigt und verursachte möglicherweise auch andere Probleme.

Danke Leute!

1 „Gefällt mir“

Mir ist das unklar. Die meisten Plugins, die ich installiert habe, verwenden nicht plugins:, einschließlich offizieller und neuerer Plugins (auch die Skeleton-Vorlage).

Ich dachte, dieser Teil würde für die Filterung der Einstellungen verwendet, aber ich könnte mich irren.

1 „Gefällt mir“

Oh interessant! Entschuldigung dann.

Was ich sagen werde, ist, dass es anscheinend nicht notwendig ist.

Ich habe die Anzahl der Plugins, die ich mit plugins: verfasst habe, nicht mehr gezählt.

1 „Gefällt mir“

Um die Dokumentation zu erweitern:

Eine vollständige Liste der Site Settings-Typen finden Sie im Code von type_supervisor.rb. Direkt darüber sehen Sie auch die gültigen Kindschlüssel, die ein Site Setting akzeptiert.

Ein fortgeschritteneres Beispiel, das mehr dieser Optionen verwendet, finden Sie in der Discourse-Welcome-Link-Theme-Komponente. Dieselben Werte sollten auch innerhalb eines Plugins funktionieren, aber die Datei wäre stattdessen unter config/settings.yml zu finden.

3 „Gefällt mir“

Es gibt Unterschiede zwischen den Plugin- und Theme-Komponententypen.

Ich habe versucht, eine Tabelle zu erstellen (kleinere Fehler oder Gruppierungen erwartet)

Kategorie Funktionalität Plugin-Syntax TC-Syntax
Basistypen String type: string
min: ..
max: ..
regex: ..
secret: true/false
global
validator: Klassenname
type: string
min: ..
max: ..
-
-
-
-
Mehrzeiliger Text type: string
textarea: true
type: string
textarea: true
Ganzzahl type: integer
min: ..
max: ..
type: integer
min: ..
max: ..
Gleitkommazahl type: float
min: ..
max: ..
type: float
min: ..
max: ..
Boolean type: bool type: bool
Zeit type: time -
Null type: null -
Auswahltypen Enum (Dropdown) type: enum
choices: [option1, option2]
enum: ..
type: enum
choices: [option1, option2]
Kategorie type: category -
Farbe type: color -
Gruppe type: group -
E-Mail type: email -
Benutzername type: username -
Listentypen Generische Liste type: list
allow_any: true/false
type: list
Einfache/Kompakte Liste type: simple_list
Oder
type: list
list_type: compact
list_type: simple
type: list
list_type: compact
list_type: simple
Kategorieliste type: category_list type: list
list_type: category
Gruppenliste type: group_list type: list
list_type: group
Tagliste type: tag_list type: list
list_type: tag
Tag-Gruppenliste type: tag_group_list -
URL-Liste type: url_list -
Hostliste type: host_list -
Werteliste type: value_list -
Emoji-Liste type: emoji_list -
Dateitypen Upload type: upload type: upload
Hochgeladene Bildliste type: uploaded_image_list -
Dateigrößenbeschränkung type: file_size_restriction
min: ..
max: ..
-
Spezialtypen HTML (veraltet) type: html_deprecated -
JSON-Objekte veraltet veraltet
Objekte - type: objects
5 „Gefällt mir“