Я разрабатываю плагин для Shopware 6, который расширяет вкладку «Спецификации продукта» дополнительными полями. Данные загружаются правильно, если данные вручную вставляются в таблицы базы данных (entity_extension иentity_extension_translation). Однако, когда существующих данных нет, интерфейс администрирования не позволяет мне вводить и сохранять новые данные. Данные инициализируются правильно, но они не сохраняются в базе данных, когда я нажимаю кнопку сохранения по умолчанию в редакторе продуктов в администрировании sw6.
Шаги, которые я предпринял:
Вот мой Component.override:
const {Component} = Shopware;
const {Criteria} = Shopware.Data;
const Context = Shopware.Context;
import template from "./sw-product-extension-detail-specifications.html.twig";
Component.override('sw-product-detail-specifications', {
template,
inject: ['repositoryFactory'],
data() {
return {
productId: null,
startingAidData: null
};
},
created() {
this.productId = this.$route.params.id;
this.loadExtension();
},
computed: {
wucPluginStartingAidExtensionCriteria() {
const criteria = new Criteria();
criteria.addFilter(Criteria.equals('productId', this.productId));
return criteria;
},
wucPluginStartingAidExtensionRepository() {
return this.repositoryFactory.create('wuc_plugin_starting_aid_extension');
}
},
methods: {
loadExtension() {
this.wucPluginStartingAidExtensionRepository
.search(this.wucPluginStartingAidExtensionCriteria, Context.api)
.then(startingAidData => {
if (startingAidData.last()) {
console.info('Data found', startingAidData.last());
this.product.extensions.startingAidData = startingAidData.last();
} else {
console.info('Create and Set New Entity');
this.startingAidData = this.wucPluginStartingAidExtensionRepository.create(Shopware.Context.api);
this.startingAidData.productId = this.productId;
this.startingAidData.headline = 'Test!'
this.product.extensions.startingAidData = this.startingAidData;
}
})
.catch(error => {
console.error('Error loading extension:', error);
});
}
}
});
Это соответствующий шаблон:
{% block sw_product_detail_specifications_measures_packaging %}
<sw-card v-if = "product.extensions.startingAidData" title = "Starting Aid Test"
position-identifier = "sw-product-detail-specifications-starting-aid"
>
<sw-text-field
v-model:value = "product.extensions.startingAidData.headline"
class = "sw-product-starting-aid__headline-field"
label = "Starting Aid Test"
placeholder = "Enter headline"
></sw-text-field>
</sw-card>
{% parent %}
{% endblock %}
Как я могу гарантировать, что расширение startAid корректно сохраняется в базе данных, когда я сохраняю продукт в администрировании? Что может отсутствовать или быть неправильно реализовано в моем нынешнем подходе?
Заранее спасибо, Никлас
Описание проблемы:





Решение:
Основной причиной проблемы было неправильное назначение данных расширения. Чтобы решить эту проблему, необходимо было использовать точное имя объекта пользовательского расширения продукта при обновлении данных о продукте.
Вместо
this.product.extensions.startingAidData = this.startingAidData;
Правильный подход был:
this.product.extensions.wucPluginStartingAidExtension = this.startingAidData;
Ссылаясь на расширение, используя определенное имя объекта (wucPluginStartingAidExtension), система может точно связать и сохранить пользовательские данные в структуре расширения продукта.