Type d'objets pour le réglage du thème

Narrateur : « Elle n’a pas abouti cette semaine. » :upside_down_face:

2 « J'aime »

Y a-t-il eu un changement à ce sujet ? Je viens de réécrire un composant pour quelqu’un qui utilise le type d’objet et il n’est pas content de ne pas pouvoir réorganiser.

4 « J'aime »

Est-ce que cela va bientôt figurer sur la liste de quelqu’un ?

De plus, il est assez terrible qu’ils soient tous nommés « field_name-X ». Serait-il possible d’avoir un nom de champ qui pourrait être utilisé là ? Il faut cliquer sur chacun pour voir ce qu’il y a, c’est un cauchemar si vous avez plus de quelques objets.

Si nous ne pouvons pas réorganiser les éléments et que vous ne pouvez pas dire ce qu’ils sont sans cliquer dessus, je vais probablement devoir revenir à l’utilisation d’un seul paramètre de chaîne avec plusieurs valeurs séparées par, euh, un caractère pour séparer les différents champs. Et je pense qu’avec les tableaux de l’ancien style, vous pouviez réorganiser les choses, n’est-ce pas ? Donc, ce type d’objets semble être un pas en arrière pour tous sauf pour les programmeurs.

2 « J'aime »

Je ne pense pas qu’il y ait quoi que ce soit en cours pour la réorganisation pour le moment, bien que ce soit toujours quelque chose que nous aimerions inclure. Le renommage est déjà possible avec la propriété identifier. Par exemple, à partir du composant de thème des liens d’en-tête personnalisés

Le champ nom est défini comme identifiant pour chaque lien, vous pouvez donc voir de quel lien il s’agit

2 « J'aime »

Hourra. Je pensais avoir négligé cela, mais je ne l’avais pas trouvé auparavant. Merci !

EDIT : Et maintenant, j’ai utilisé la propriété identifier et ajouté un champ ‘order’, donc ce n’est pas si mal. Je pense toujours qu’il serait agréable de pouvoir réorganiser les paramètres, et c’est disponible avec les tableaux. . .

Merci encore pour votre aide.

1 « J'aime »

J’ai fait un commit il y a un moment qui ajoute la réorganisation pour les objets. Voici un petit paramètre de test pour montrer les boutons :

10 « J'aime »

Je pense qu’il vaut la peine d’annoncer que nous avons maintenant uploads comme option de type de champ, et je pense que cela a été mentionné quelque part, mais il est bon de rappeler que type: objects fonctionne à la fois pour les paramètres de thème et pour les paramètres de site (plugins).

10 « J'aime »

Le correct devrait être upload

1 « J'aime »

Merci ! Sera corrigé dans

1 « J'aime »

Le type objects prend-il en charge la limite max ? J’ai essayé, mais il semble que non.

Voulez-vous dire pour un champ de type string dans un arbre d’objets ?
Essayez max_length

Consultez #Validations pour les types string sur ce sujet ; ou un exemple fonctionnel :

Je pense qu’il fait référence à :

1 « J'aime »

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 :

  1. Message d’erreur
  2. Impossible d’ajouter davantage
1 « J'aime »