Narratore: “Non è stata realizzata quella settimana.” ![]()
Ci sono novità a riguardo? Ho appena riscritto un componente per qualcuno che utilizza il tipo di oggetto e non è contento di non poterlo riordinare.
Questa cosa finirà presto nella lista di qualcuno?
Inoltre, è piuttosto terribile che si chiamino tutti “field_name-X”. Sarebbe possibile avere un nome di campo che possa essere utilizzato lì? Dover cliccare su ognuno per vedere cosa c’è è un incubo se hai più di un paio di oggetti.
Se non possiamo riordinare gli elementi e non puoi dire cosa sono senza cliccarci sopra, probabilmente dovrò tornare a usare un’unica impostazione di stringa con più valori separati da, ehm, qualche carattere per separare i diversi campi. E penso che con gli array in stile vecchio si potesse riordinare le cose, giusto? Quindi questo tipo di oggetti sembra un passo indietro per tutti tranne che per i programmatori.
Al momento non credo ci sia nulla in fase di riordino, anche se è ancora qualcosa che vorremmo includere. La ridenominazione è già possibile con la proprietà identifier. Ad esempio, dal componente tema dei collegamenti dell’intestazione personalizzata
Il campo del nome è impostato come identificatore per ciascun collegamento, così puoi vedere di quale collegamento si tratta
Evvai. Pensavo di essermelo perso ma non ero riuscito a trovarlo prima. Grazie!
MODIFICA: E ora ho usato la proprietà identifier e aggiunto un campo ‘order’, quindi non è poi così male. Penso ancora che sarebbe bello poter riordinare le impostazioni, ed è disponibile con gli array. . .
Grazie ancora per il tuo aiuto
Ho creato un commit un po’ di tempo fa che aggiunge il riordino per gli oggetti. Ecco un piccolo esempio di impostazione per mostrare i pulsanti:
Penso che valga la pena annunciare che ora abbiamo uploads come opzione di tipo di campo, e penso che sia stato menzionato da qualche parte, ma è bello menzionare di nuovo che type: objects funziona sia nelle impostazioni del tema che nelle impostazioni del sito (plugin)
Grazie! Sarà risolto in
Il tipo objects supporta il limite max? Ho provato, ma sembra di no.
Intendi come per un campo di tipo string in un albero di oggetti?
Prova max_length…
Consulta #Validazioni per tipi string su questo argomento; oppure un esempio funzionante:
Penso che si stia riferendo a:
Sì, mi riferisco al limite massimo di oggetti nell’array.
Attualmente non è supportato ufficialmente, quindi ho esteso questa funzionalità nel mio componente tema privato personalizzato. La configurazione è la seguente (solo a titolo di riferimento)
Configurazione del limite massimo per gli array:
themes/quectel-custom-homepage/settings.yml
banner_images:
type: objects
default: []
schema:
name: "Immagine carosello"
max: 9 // Configurazione estesa aggiunta: limita il numero massimo di elementi nell'array
identifier: image_url
properties:
image_url:
type: upload
required: true
link_url:
type: string
min: 0
max: 1023
Codice specifico dell’estensione:
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(() => {
// Estende il componente SchemaSettingNewEditor usando classPrepend per supportare il limite max per il tipo objects
// Carica questo componente solo nel contesto amministratore
let SchemaSettingNewEditor;
try {
SchemaSettingNewEditor =
require("discourse/admin/components/schema-setting/editor").default;
} catch {
// Gli utenti non amministratori non possono caricare questo componente, salta l'estensione
return;
}
classPrepend(SchemaSettingNewEditor, (Superclass) => {
return class extends Superclass {
@action
addItem() {
// Controlla se è stato raggiunto il limite max
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];
// Controlla se è stato raggiunto il limite max
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);
}
};
});
});
Configurazione delle traduzioni del tema:
themes/quectel-custom-homepage/locales/zh_CN.yml
zh_CN:
theme_settings:
errors:
objects_value_not_valid_max: "Il numero non può superare %{count}"
Effetto concreto:
- Messaggio di errore
- Impossibile aggiungere altri elementi



