Oui, je parle bien de limiter le nombre maximum d’objets dans le tableau.
Actuellement, cette fonctionnalité n’est pas prise en charge officiellement. J’ai donc étendu les capacités correspondantes dans un composant de thème privé personnalisé. Voici la configuration (à titre de référence uniquement) :
Configuration de la limite maximale du tableau :
themes/quectel-custom-homepage/settings.yml
banner_images:
type: objects
default: []
schema:
name: "Diaporama"
max: 9 // Nouvelle configuration étendue pour limiter le nombre maximum d'éléments dans le tableau
identifier: image_url
properties:
image_url:
type: upload
required: true
link_url:
type: string
min: 0
max: 1023
Code d’extension spécifique :
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(() => {
// Utiliser classPrepend pour étendre le composant SchemaSettingNewEditor afin de prendre en charge la limite max pour le type objects
// Ce composant n'est chargé que dans le contexte administrateur
let SchemaSettingNewEditor;
try {
SchemaSettingNewEditor =
require("discourse/admin/components/schema-setting/editor").default;
} catch {
// Les utilisateurs non administrateurs ne peuvent pas charger ce composant, passer l'extension
return;
}
classPrepend(SchemaSettingNewEditor, (Superclass) => {
return class extends Superclass {
@action
addItem() {
// Vérifier si la limite max est atteinte
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];
// Vérifier si la limite max est atteinte
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);
}
};
});
});
Configuration de traduction du thème :
themes/quectel-custom-homepage/locales/zh_CN.yml
zh_CN:
theme_settings:
errors:
objects_value_not_valid_max: "Le nombre ne peut pas dépasser %{count}"
Effet concret :
- Message d’erreur
- Impossible d’ajouter davantage
