Narrador: “Não foi implementada naquela semana.” ![]()
Houve alguma mudança nisso? Acabei de reescrever um componente para alguém usando o tipo de objeto e eles estão insatisfeitos por não poderem reordenar.
Isso vai entrar na lista de alguém tão cedo?
Além disso, é muito ruim que todos se chamem “field_name-X”. Seria possível ter um nome de campo que pudesse ser usado ali? Ter que clicar em cada um para ver o que há é um pesadelo se você tiver mais do que alguns objetos.
Se não pudermos reordenar os itens e você não puder dizer o que são sem clicar neles, provavelmente terei que voltar a usar uma configuração de string única com vários valores separados por, uh, algum caractere para separar os diferentes campos. E eu acho que com os arrays antigos você podia reordenar as coisas, certo? Então esse tipo de objeto parece um passo para trás para todos, exceto para os programadores.
Não creio que haja nada em andamento para reordenar no momento, embora ainda seja algo que gostaríamos de incluir. A renomeação já é possível com a propriedade identifier. Por exemplo, do componente de tema de links de cabeçalho personalizados
O campo de nome é definido como o identificador para cada link, para que você possa ver qual link é qual
Uhuu. Eu pensei que eu devia ter esquecido disso, mas não consegui encontrar antes. Obrigado!
EDIT: E agora eu usei a propriedade identifier e adicionei um campo ‘order’, então não é tão ruim. Eu ainda acho que ser capaz de reordenar configurações seria bom, e isso está disponível com arrays. . .
Obrigado novamente pela sua ajuda
Fiz um commit há pouco tempo que adiciona a reordenação para objetos. Aqui está uma pequena configuração de teste para mostrar os botões:
Acho que vale a pena anunciar que agora temos uploads como uma opção de tipo de campo, e acho que foi mencionado em algum lugar, mas é bom mencionar novamente que type: objects funciona tanto nas configurações de tema quanto nas configurações do site (plugins)
Obrigado! Será corrigido em
O tipo objects suporta o limite max? Tentei, mas parece que não.
Você quer dizer algo como para um campo de tipo string em uma árvore de objetos?
Tente max_length…
Veja #Validações para tipos string sobre esse tópico; ou um exemplo funcional:
Acho que ele está se referindo a:
Sim, estou me referindo à limitação do número máximo de itens no array objects.
Atualmente, o recurso não é suportado oficialmente, então estendi essa funcionalidade em um componente de tema privado personalizado. A configuração é a seguinte (apenas para referência):
Configuração de limite máximo de itens no array:
themes/quectel-custom-homepage/settings.yml
banner_images:
type: objects
default: []
schema:
name: "Imagens de banner"
max: 9 // Configuração estendida adicionada, limita o número máximo de itens no array
identifier: image_url
properties:
image_url:
type: upload
required: true
link_url:
type: string
min: 0
max: 1023
Código específico da extensão:
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(() => {
// Usa classPrepend para estender o componente SchemaSettingNewEditor e suportar o limite max para o tipo objects
// Carrega o componente apenas no contexto de administrador
let SchemaSettingNewEditor;
try {
SchemaSettingNewEditor =
require("discourse/admin/components/schema-setting/editor").default;
} catch {
// Usuários não administradores não podem carregar este componente, pula a extensão
return;
}
classPrepend(SchemaSettingNewEditor, (Superclass) => {
return class extends Superclass {
@action
addItem() {
// Verifica se atingiu o 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];
// Verifica se atingiu o 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);
}
};
});
});
Configuração de tradução do tema:
themes/quectel-custom-homepage/locales/zh_CN.yml
zh_CN:
theme_settings:
errors:
objects_value_not_valid_max: "A quantidade não pode exceder %{count} itens"
Efeito específico:
- Mensagem de erro
- Não é possível adicionar mais itens



