나레이터: “그 주에는 처리되지 않았습니다.” ![]()
이 부분에 대해 변화가 있나요? 저는 방금 objects 타입을 사용하는 사용자를 위해 컴포넌트를 다시 작성했는데, 재ordering이 불가능하다는 것에 대해 불만이 있습니다.
hey @awesomerobot, 이게 곧 누군가의 목록에 올라갈 것 같아? 팀에서 1년 동안 아무도 이걸 확인하지 않은 것 같아.
또, 모든 필드가 "field_name-X"로 이름이 붙여져 있는 건 정말 최악이야. 해당 위치에 사용할 수 있는 필드 이름을 붙일 수 있는 방법이 있을까? 개수가 두세 개를 넘으면 하나하나 클릭해서 내용을 확인해야 하는 건 지옥이야.
항목 순서를 바꿀 수 없고, 클릭하지 않으면 무엇인지 알 수 없다면, 결국 여러 값을 구분 문자로 나눠서 넣는 단일 문자열 설정으로 돌아가야 할 것 같아. 그리고 옛날 방식의 배열에서는 항목 순서를 바꿀 수 있었지, 그렇지? 그래서 이 객체 타입은 프로그래머를 제외하고는 모두에게 후퇴처럼 느껴져.
현재 순서 변경을 위한 처리 중인 항목은 없는 것 같습니다. 다만, 여전히 포함시키고 싶은 기능입니다. 이름 변경은 이미 identifier 속성을 통해 가능합니다. 예를 들어, 사용자 정의 헤더 링크 테마 컴포넌트에서
이름 필드가 각 링크의 식별자로 설정되어 있어 어떤 링크가 어떤 것인지 확인할 수 있습니다.
좋네요. 제가 그걸 놓쳤을 줄 알았는데, 이전에는 찾지 못했었거든요. 감사합니다!
수정: 그리고 이제 identifier 속성을 사용하고 ‘order’ 필드를 추가했으니, 그렇게 나쁘지는 않습니다. 여전히 설정을 재배열할 수 있으면 좋겠다고 생각하는데, 배열에서는 가능합니다…
다시 한번 도움 주셔서 감사합니다.
얼마 전 객체에 대한 재배열을 추가하는 커밋을 만들었습니다. 버튼을 보여주는 작은 테스트 설정입니다:
uploads가 이제 필드 타입 옵션으로 추가되었다는 점을 공지할 가치가 있다고 생각합니다. 어딘가에서 언급된 적이 있긴 하지만, type: objects가 테마 설정과 사이트 설정(플러그인) 모두에서 작동한다는 점도 다시 한번 짚어주는 것이 좋을 것 같습니다.
감사합니다! 다음 PR에서 수정될 예정입니다:
objects 유형에서 max 제한을 사용할 수 있나요? 시도해 봤는데, 안 되는 것 같습니다.
객체 트리에서 string 타입의 필드를 말씀하시는 건가요?
max_length를 시도해 보세요.
이 주제에 대해 Discourse 메타의 string 타입 검증을 참고하거나, 작동하는 예시를 확인해 보세요:
그가 언급하고 있는 것은 아마도:
네, objects 배열의 최대 개수를 제한하는 것을 말씀하신 것입니다.
현재 공식적으로 지원되지 않으므로, 사용자 정의 프라이빗 테마 컴포넌트에서 해당 기능을 확장했습니다. 설정은 다음과 같습니다(참고용).
최대 배열 개수 제한 설정:
themes/quectel-custom-homepage/settings.yml
banner_images:
type: objects
default: []
schema:
name: "배너 이미지"
max: 9 // 배열의 최대 개수를 제한하는 확장 설정
identifier: image_url
properties:
image_url:
type: upload
required: true
link_url:
type: string
min: 0
max: 1023
확장된 구체적인 코드:
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(() => {
// classPrepend를 사용하여 SchemaSettingNewEditor 컴포넌트를 확장하여 objects 유형의 max 제한을 지원하도록 합니다.
// 관리자 컨텍스트에서만 해당 컴포넌트를 로드합니다.
let SchemaSettingNewEditor;
try {
SchemaSettingNewEditor =
require("discourse/admin/components/schema-setting/editor").default;
} catch {
// 비관리자 사용자는 해당 컴포넌트를 로드할 수 없으므로 확장을 건너뜁니다.
return;
}
classPrepend(SchemaSettingNewEditor, (Superclass) => {
return class extends Superclass {
@action
addItem() {
// 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];
// 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);
}
};
});
});
테마 번역 설정:
themes/quectel-custom-homepage/locales/zh_CN.yml
zh_CN:
theme_settings:
errors:
objects_value_not_valid_max: "개수는 %{count}개를 초과할 수 없습니다"
구체적인 효과:
- 오류 메시지
- 더 이상 추가할 수 없음



