Конфигурируемые продукты и набор атрибутов

18

TL; Д.Р . : Есть ли причина, по которой простые продукты, связанные с настраиваемым продуктом, должны быть в том же наборе атрибутов, что и сам настраиваемый продукт? Я имею в виду, есть ли техническая причина? Я знаю причину "здравого смысла". Если вы продаете пару обуви, то все версии, в зависимости от цвета и размера, также должны быть обувью .
Длинная версия : у меня была задача «объединить» некоторые настраиваемые продукты. Я имею в виду от 2 или более, чтобы сделать только один. Я не хотел делать их вручную из-за количества продуктов, и я не хотел проходить через$product->load(..)->set...()->save()из-за количества времени, необходимого для запуска сценария. Поэтому я замкнул процесс, потому что был уверен, что ни один из простых продуктов не перекрывается. Было уникальное сочетание размера и цвета. Я сделал это:

Mage::getResourceSingleton('catalog/product_type_configurable')
    ->saveProducts($mainConfigrableProduct, $simpleProductIds);

где $simpleProductIds- массив всех простых идентификаторов продуктов, связанных с настраиваемыми продуктами, которые необходимо объединить.
Это прекрасно работало для большинства продуктов, но у некоторых были проблемы.
Если бы я позвонил

$productIds = $product->getTypeInstance()->getUsedProductIds() 

Я бы получил все простые идентификаторы продуктов, но в бэкэнде появились только некоторые из них. Покопавшись в течение некоторого времени, я обнаружил, что были показаны только те, которые имеют тот же набор атрибутов, что и настраиваемый продукт. Другой набор атрибутов очень похож на первый, только некоторые незначительные отличия, но он содержит настраиваемые атрибуты (размер и цвет).
А теперь странная вещь. В интерфейсе я ожидал увидеть либо все продукты ($ productIds в приведенном выше коде), либо только продукты в одном наборе атрибутов. Ну, было что-то среднее.

  • 20 идентификаторов сопутствующих товаров - 5 размеров, 4 цвета
  • 10 связанных продуктов в бэкэнде - 5 размеров, 2 цвета - остальные 2 цвета (10 продуктов) были в другом наборе атрибутов
  • 15 комбинаций в интерфейсе - 5 размеров 3 цвета (???)

Я смог решить проблему, изменив набор атрибутов для продуктов, которые не появлялись, но я все еще озадачен.

Примечание : не пытайтесь делать это дома. Или вы можете попробовать это дома, но не на живом сервере.

Мариус
источник

Ответы:

13

После расспросов об этом у меня есть причины. Надеюсь, это удовлетворительно для вас, даже если это, вероятно, то, что вы ожидали.

  1. Интерфейс adminhtml был сделан с намерением затруднить полный провал для продавцов.

По этой причине многие функции, предоставляемые Magento в качестве платформы, недоступны через пользовательский интерфейс.
Причина, по которой только продукты в одном наборе атрибутов можно выбрать в качестве связанных простых продуктов для конфигурируемых, заключается в том, что это то, что было в спецификациях.
Как вы сказали, это как бы имеет смысл.

  1. Другой причиной является размышление о назначении наборов атрибутов. Одна из причин, по которой они существуют, заключается в уменьшении количества атрибутов и параметров, которые должны быть загружены и обработаны во время запроса. Применение этого подхода к конфигурируемым имеет смысл, поскольку это относительно дорогой тип продукта.

Поскольку бэкэнд был построен таким образом, никогда не ожидалось, что логика внешнего интерфейса для настраиваемых продуктов будет иметь дело с простыми продуктами из разных наборов атрибутов.
Вот почему ограничения не реализованы полностью там.

Вероятно, было бы легко заставить настраиваемые работать с простыми из разных наборов атрибутов. Просто так не задумывалось.

Я не спрашивал дальше и не смотрел сам, чтобы увидеть, какое именно взаимодействие кода привело к странному результату на веб-интерфейсе. Вероятно, это не важно, поскольку, если я правильно понял, вы спрашиваете причину решения об исключении простых продуктов из наборов атрибутов, отличающихся от настраиваемых, а не объяснения кода.

Vinai
источник
Спасибо Винай. В глубине души я надеялся, что это будет просто умопомрачительная причина. Было бы весело :). Это удовлетворительное объяснение. Что касается «странного результата», то не нужно копаться в коде. Я сделаю это, когда мне станет скучно. У меня все еще есть дамп БД и способ воспроизвести тот же результат. Скорее всего, потому, что я ввинчивался прямо в базу данных. Я опубликую результат, когда / если найду его.
Мариус
2
Tsk tsk, @Marius - не трогай дБ;)
philwinkle
4
@philwinkle. Я знаю, я знаю, вселенная взорвется, если сделаешь это. Что я могу сказать? Мне нравится жить опасно. В свою защиту я сказал: «Не пытайтесь делать это на живом сервере».
Мариус
1
Все еще в ожидании, чтобы взорвать мой разум тоже ... :)
Vinai
2

Мы используем расширение RapidFlow от Unirgy (которое я не могу рекомендовать достаточно) для импорта и экспорта. Одна из функций в версии Pro позволяет изменять наборы атрибутов. Другой - создание продуктов через импорт CSV. Иногда мы создаем новые простые продукты для конфигурируемых, и иногда эти простые продукты имеют случайно наборы атрибутов, отличные от их родителей.

Rapidflow с удовольствием импортирует эти продукты и меняет наборы атрибутов. Мы, как правило, недовольны результатами. Настраиваемые продукты, настроенные с помощью атрибутов вне их набора атрибутов, не отображаются в администраторе продукта и должны быть исправлены. Если мы не изменим набор атрибутов родителя, как вы заметили, дочерние элементы просто не смогут быть правильно связаны с их родителем. Они существуют как сущности Magento, могут быть отредактированы, но не будут отображаться как дочерние на странице продукта переднего плана или в списке продуктов, связанных с настраиваемым родителем.

Таким образом, с чисто технической точки зрения простые продукты могут быть в другом наборе атрибутов, чем их родитель. Но так как это поведение не поддерживается, даже в EE, и поэтому Бритва Оккама говорит, что когда они разрабатывали Magento, разработчики Varien не видели в этом необходимости.

RegularlyScheduledProgramming
источник
1
Спасибо за ответ (и рекомендацию по расширению), но это не отвечает на мой вопрос. Я сказал, что мне удалось решить мою проблему, изменив базу данных напрямую. Я знаю, что не должен этого делать, но у меня было хорошее представление о том, что я делал, - и о резервном копировании базы данных :). Мне было просто любопытно, почему существует это ограничение. Насколько "разработчики Varien не видели необходимости", я чувствую, что вы не правы. Если вы вводите ограничение, это должно быть причиной для этого.
Мариус