Objekttyp für Themeneinstellung

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“