Objekttyp für Themeneinstellung

Erzähler: „Es wurde diese Woche nicht gelandet.“ :upside_down_face:

2 „Gefällt mir“

Gibt es eine Änderung hierzu? Ich habe gerade eine Komponente für jemanden neu geschrieben, der Objekttypen verwendet, und er ist unzufrieden, dass er sie nicht neu anordnen kann.

4 „Gefällt mir“

Wird das bald auf jemandes Liste landen?

Außerdem ist es ziemlich schlimm, dass sie alle „field_name-X“ heißen. Wäre es möglich, einen Feldnamen zu haben, der dort verwendet werden könnte? Jedes einzelne anklicken zu müssen, um zu sehen, was da ist, ist ein Albtraum, wenn man mehr als ein paar Objekte hat.

Wenn wir die Elemente nicht neu anordnen können und man nicht erkennen kann, was sie sind, ohne sie anzuklicken, werde ich wahrscheinlich wieder zu einer einzelnen Zeichenfolgeneinstellung mit mehreren Werten zurückkehren müssen, die mit einem Zeichen zur Trennung der verschiedenen Felder getrennt sind. Und ich glaube, bei den alten Arrays konnte man die Dinge neu anordnen, oder? Dieses Objekttyp scheint also ein Rückschritt für alle außer Programmierern zu sein.

2 „Gefällt mir“

Ich glaube nicht, dass im Moment etwas zur Neuordnung ansteht, obwohl wir das immer noch gerne einbeziehen würden. Umbenennung ist bereits mit der identifier-Eigenschaft möglich. Zum Beispiel aus der Theme-Komponente für benutzerdefinierte Header-Links

Das Namensfeld wird als Bezeichner für jeden Link festgelegt, sodass Sie sehen können, welcher Link welcher ist

2 „Gefällt mir“

Hurra. Ich dachte, ich hätte das übersehen, konnte es aber vorher nicht finden. Danke!

EDIT: Und jetzt habe ich die identifier-Eigenschaft verwendet und ein ‘order’-Feld hinzugefügt, also ist es nicht so schlimm. Ich denke immer noch, dass es schön wäre, Einstellungen neu anordnen zu können, und das ist mit Arrays möglich. . .

Nochmals vielen Dank für Ihre Hilfe

1 „Gefällt mir“

[quote=„pfaffman, Beitrag:28, Thema:305009″]
EDIT: Und jetzt habe ich die identifier-Eigenschaft verwendet und ein ‚order‘-Feld hinzugefügt, also ist es nicht so schlimm. Ich denke immer noch, dass es schön wäre, Einstellungen neu anordnen zu können, und das ist mit Arrays möglich. . .
[/quote]

Ich habe vor einiger Zeit einen Commit gemacht, der das Neuordnen von Objekten hinzufügt. Hier ist eine kleine Testeinstellung, um die Schaltflächen anzuzeigen:

10 „Gefällt mir“

Ich denke, es lohnt sich bekannt zu geben, dass wir jetzt uploads als Feldtyp-Option haben, und ich glaube, es wurde irgendwo erwähnt, aber es ist schön, noch einmal zu erwähnen, dass type: objects sowohl bei den Theme-Einstellungen als auch bei den Site-Einstellungen (Plugins) funktioniert.

10 „Gefällt mir“

Richtig wäre upload

1 „Gefällt mir“

Danke! Wird behoben in

1 „Gefällt mir“

Unterstützt der Typ objects eine max-Einschränkung? Ich habe es versucht, aber es scheint nicht zu funktionieren.

Meinst du das für ein string-Typ-Feld in einem Objektbaum?
Versuche es mit max_length

Siehe dazu #Validierungen für string-Typen oder ein funktionierendes Beispiel:

Ich denke, er bezieht sich auf:

1 „Gefällt mir“

Ja, ich meinte die Begrenzung der maximalen Anzahl von Objekten im Array.

Derzeit wird dies offiziell nicht unterstützt, daher habe ich diese Funktion in einer benutzerdefinierten privaten Theme-Komponente erweitert. Die Konfiguration sieht wie folgt aus (nur als Referenz):

Konfiguration zur Begrenzung der maximalen Array-Anzahl:

themes/quectel-custom-homepage/settings.yml

banner_images:
  type: objects
  default: []
  schema:
    name: "Karussellbilder"
    max: 9 // Neue Erweiterung: Begrenzung der maximalen Array-Anzahl
    identifier: image_url
    properties:
      image_url:
        type: upload
        required: true
      link_url:
        type: string
        min: 0
        max: 1023

Der konkrete Erweiterungscode:

themes/quectel-custom-homepage/javascripts/discourse/api-initializers/quectel-custom-homepage.gjs

import { action } from "@ember/object";
import { apiInitializer } from "discourse/lib/api";
import classPrepend from "discourse/lib/class-prepend";
import { i18n } from "discourse-i18n";

export default apiInitializer(() => {
  // Erweiterung des SchemaSettingNewEditor-Komponente mittels classPrepend, um die max-Begrenzung für den objects-Typ zu unterstützen
  // Diese Komponente wird nur im Administrationskontext geladen
  let SchemaSettingNewEditor;
  try {
    SchemaSettingNewEditor =
      require("discourse/admin/components/schema-setting/editor").default;
  } catch {
    // Nicht-Administratoren können diese Komponente nicht laden, Erweiterung überspringen
    return;
  }

  classPrepend(SchemaSettingNewEditor, (Superclass) => {
    return class extends Superclass {
      @action
      addItem() {
        // Prüfen, ob die max-Begrenzung erreicht ist
        const maxLimit = this.args.setting.max || this.activeSchema?.max;

        if (maxLimit && this.activeData.length >= maxLimit) {
          this.validationErrorMessage = i18n(
            themePrefix("theme_settings.errors.objects_value_not_valid_max"),
            {
              count: maxLimit,
            }
          );
          return;
        }

        return super.addItem(...arguments);
      }

      @action
      addChildItem(propertyName, parentNodeIndex) {
        const propertySchema = this.activeSchema.properties[propertyName];

        // Prüfen, ob die max-Begrenzung erreicht ist
        if (
          propertySchema?.max &&
          this.activeData[parentNodeIndex][propertyName].length >=
            propertySchema.max
        ) {
          this.validationErrorMessage = i18n(
            themePrefix("theme_settings.errors.objects_value_not_valid_max"),
            {
              count: propertySchema.max,
            }
          );
          return;
        }

        return super.addChildItem(...arguments);
      }
    };
  });
});

Theme-Übersetzungskonfiguration:

themes/quectel-custom-homepage/locales/zh_CN.yml

zh_CN:
  theme_settings:
    errors:
      objects_value_not_valid_max: "Die Anzahl darf %{count} nicht überschreiten"

Konkrete Auswirkungen:

  1. Fehlermeldung
  2. Keine weiteren Elemente hinzufügbar
1 „Gefällt mir“