Какова правильная процедура - вместо удаления продукта и повторного запуска, чтобы добавить или удалить атрибуты к существующим настраиваемым продуктам.
При создании настраиваемого продукта вам предлагается выбрать, какие атрибуты использовать для продукта.
У меня есть много продуктов, которые мне теперь нужно удалить некоторые атрибуты, которые были выбраны изначально, и некоторые, которые также нуждаются в добавлении атрибутов, которые не были выбраны изначально.
Любая помощь с этим приветствуется - поскольку удаление продуктов не кажется лучшим подходом к этому. Тем более, что с продукцией связано много других вещей.
Ответы:
Вот что мне нужно для удаления атрибута из настраиваемого продукта.
Это сценарий.
Все настраиваемые продукты были созданы неправильно с атрибутом
brand
в качестве настраиваемого атрибута для примерно 50 настраиваемых продуктов, имеющих около 200 простых связанных продуктов.Все простые продукты, связанные с настраиваемым атрибутом, имеют одну и ту же марку. Идея состоит в том, чтобы удалить
brand
из настраиваемых атрибутов и назначить его в качестве простого атрибута для настраиваемого продукта со значением одного из простых продуктов.Вот код, который делает это. Код запускается только один раз. Его можно добавить в сценарии обновления или в простом php-файле.
Для чисел, перечисленных выше, это заняло около 15 секунд для запуска на моем локальном компьютере (не мощный). Я уверен, что это можно оптимизировать. Скорее всего, нет необходимости получать все простые продукты настраиваемого продукта, чтобы получить
brand
значение, но я не стал беспокоиться.источник
catalog_product_super_attribute
будет работать? Или мне нужно изменить другие таблицы? Как в stackoverflow.com/a/13381381/1749007Это требует прямого редактирования базы данных, и первый закон Magento - не редактировать базу данных напрямую .
Но если вы достаточно сумасшедший, чтобы продолжить, это было описано в StackOverflow несколько месяцев назад:
дуктов. Я протестировал приведенный ниже способ обхода БД на CE 1.6.2, и, похоже, он работает:
Кредит: /programming/5658197/add-new-attribute-to-existing-configurable-product-magento
Не проверено - YMMV.
источник
Чтобы удалить один атрибут супер-продукта (как он называется) из всех настраиваемых продуктов, вы можете выполнить этот SQL-запрос в базе данных:
Здесь идентификатор атрибута, хранящийся в таблице eav_attribute относительно атрибута_кода. Таблица catalog_product_super_attribute связывает продукты с атрибутами супер продукта. Вы можете добавлять и удалять атрибуты для создания настраиваемых продуктов там.
источник
DELETE FROM catalog_product_super_attribute WHERE attribute_id = <attribute_id> AND product_id = <product_id>;
Существует грязный взлом, чтобы открыть настраиваемый продукт, затем выбрать дубликат, выбрать старый и новый атрибут, дубликат создается без SKU, затем удалить оригинальный настраиваемый продукт и простые продукты. После этого вы можете дать тот же SKU для дублирования. Тогда вам просто нужно сделать новые простые продукты.
Это быстрый обходной путь, если не так много простых продуктов.
источник
Мне только что удалось сделать это более аккуратно, используя инструмент экспорта-импорта Free Magmi в режиме обновления. (версия для понимания)
Экспортируйте ключевые поля, измените настройки столбца configurable_attributes, чтобы указать настраиваемые атрибуты в простом и настраиваемом SKUS, затем повторно импортируйте с помощью Magmi
Как бывший консультант Oracle, я бы согласился не связываться с базой данных, особенно такой сложной, как структура данных Magento, - лучше использовать инструмент, который был хорошо протестирован для этого.
источник
Мне нужно было удалить Атрибут из одного из «Настраиваемых» атрибутов для Настраиваемого продукта.
Приведенные выше ссылки на catalog_product_super_attribute были правильными. Используя инструмент базы данных Navicat, я последовательно сделал несколько вещей.
Для тестирования изменил Attribute_Id, который изменил его на другое поле, используемое в других продуктах. (Подтверждено, что это была запись в вопросе). Записал, на всякий случай, полный набор данных записи (product_super_attribute_id, product_id, attribute_id, position)
Наконец-то удалили запись все вместе.
Это добилось цели. Я также вел записку о том, что сделал, предполагая, что мне нужно будет сделать это снова.
Опять же: удаление записи в "catalog_product_super_attribute" решило мою проблему, которая, казалось, была связана с другими выше.
Дополнительная информация: чтобы соотнести «attribute_id» с правильным именованным списком, важно взглянуть на: catalog_super_attribute_label -> и сопоставить через product_super_attribute_id.
Я искал связанное поле "attribute_id" (пока не нашел).
«product_super_attribute_id» позволяет вам узнать, что на самом деле представляет собой «attribute_id». (Я хотел бы все еще найти набор данных «по умолчанию» для «attribute_id», чтобы увидеть, как атрибут впервые определяется в базе данных).
источник