Objekttyp für Theme-Einstellung

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“