Narrador: “No se implementó esa semana”. ![]()
¿Hay algún cambio en esto? Acabo de reescribir un componente para alguien que usa tipos de objetos y no está contento porque no puede reordenar.
¿Va a entrar esto en la lista de alguien pronto?
Además, es bastante terrible que todas se llamen “field_name-X”. ¿Sería posible tener un nombre de campo que se pudiera usar allí? Tener que hacer clic en cada una para ver qué hay es una pesadilla si tienes más de un par de objetos.
Si no podemos reordenar los elementos y no puedes saber qué son sin hacer clic en ellos, probablemente tendré que volver a usar una configuración de cadena única con varios valores separados por, eh, algún carácter para separar los diferentes campos. Y creo que con los arrays del estilo antiguo podías reordenar cosas, ¿verdad? Así que este tipo de objetos parece un paso atrás para todos excepto para los programadores.
No creo que haya nada en proceso para reordenar en este momento, aunque todavía es algo que nos gustaría incluir. El cambio de nombre ya es posible con la propiedad identifier. Por ejemplo, desde el componente temático de enlaces de encabezado personalizados
El campo de nombre se establece como el identificador de cada enlace, por lo que puedes ver cuál es cuál
¡Hurra! Pensé que debía haber pasado por alto eso, pero no lo había encontrado antes. ¡Gracias!
EDITAR: Y ahora usé la propiedad identifier y agregué un campo ‘order’, así que no está tan mal. Todavía creo que poder reordenar la configuración sería bueno, y está disponible con arrays. . .
Gracias de nuevo por tu ayuda.
Hace poco hice un commit que agrega la capacidad de reordenar objetos. Aquí hay una pequeña configuración de prueba para mostrar los botones:
Creo que vale la pena anunciar que ahora tenemos uploads como opción de tipo de campo, y creo que se mencionó en algún lugar, pero es bueno mencionar de nuevo que type: objects funciona tanto en la configuración del tema como en la configuración del sitio (plugins).
¡Gracias! Se solucionará en
¿El tipo objects admite el límite max? Lo intenté, pero parece que no funciona.
¿Te refieres a un campo de tipo string en un árbol de objetos?
Prueba con max_length…
Consulta #Validaciones para tipos string sobre este tema; o un ejemplo funcional:
Creo que se refiere a:
Sí, me refiero a limitar la cantidad máxima de elementos en el array de objetos.
Actualmente, la versión oficial no lo soporta, por lo que he extendido esta funcionalidad en un componente de tema privado personalizado. La configuración es la siguiente (solo como referencia):
Configuración para limitar el número máximo de elementos en el array:
themes/quectel-custom-homepage/settings.yml
banner_images:
type: objects
default: []
schema:
name: "Imagen de carrusel"
max: 9 // Nueva configuración extendida para limitar la cantidad máxima de elementos en el array
identifier: image_url
properties:
image_url:
type: upload
required: true
link_url:
type: string
min: 0
max: 1023
Código específico de la extensión:
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(() => {
// Utilizar classPrepend para extender el componente SchemaSettingNewEditor y soportar la limitación max para el tipo objects
// Cargar este componente solo en el contexto de administrador
let SchemaSettingNewEditor;
try {
SchemaSettingNewEditor =
require("discourse/admin/components/schema-setting/editor").default;
} catch {
// Los usuarios que no son administradores no pueden cargar este componente, omitir la extensión
return;
}
classPrepend(SchemaSettingNewEditor, (Superclass) => {
return class extends Superclass {
@action
addItem() {
// Verificar si se ha alcanzado el límite 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];
// Verificar si se ha alcanzado el límite 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);
}
};
});
});
Configuración de traducción del tema:
themes/quectel-custom-homepage/locales/zh_CN.yml
zh_CN:
theme_settings:
errors:
objects_value_not_valid_max: "La cantidad no puede superar %{count}"
Efecto concreto:
- Mensaje de error
- No se pueden añadir más elementos



