Magento: создать заказ программно: настраиваемая проблема с продуктом

#magento #configuration #magento-1.8

#magento #конфигурация #magento-1.8

Вопрос:

Я пытаюсь создать заказ программно.

Существуют настраиваемые продукты, имеющие один базовый атрибут, т.Е. Размер. и некоторые из настраиваемых продуктов имеют несколько (более одного) связанных продуктов с одинаковым значением размера.

Теперь, пытаясь добавить такой настраиваемый продукт с определенным размером. Но magento назначает родственный / дочерний / связанный продукт, который будет обнаружен первым! и, следовательно, для создания заказа был удален соответствующий SKU / sibling.

Я следовал коду из приведенных ниже ссылок:

http://www.blog.plazathemes.com/archives/2149

http://pravams.com/2011/11/11/magento-create-order-programmatically/

Есть ли какой-либо способ добавить продукт конфигурации с определенным артикулом? (что-то вроде приемлемых параметров в методе «addProduct» и т. Д.).

Ответ №1:

Я сталкиваюсь с аналогичной проблемой при добавлении настраиваемого продукта для создания заказа / предложения программно. При добавлении продукта необходимо указать super_attribute в массиве параметров. Значение должно содержать атрибут, который различает связанные продукты (например, цвет, размер). Итак, это будет что-то вроде этого:

 $buyOptions = array(
    'qty' => 1,
    'super_attribute' => array($attributeId => $attributeValue) //ex: array(131 => 53)
);
$quote->addProduct($product, new Varien_Object($buyOptions));
  

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

ps: Я отвечаю на это здесь, потому что в magento stackexchange он помечен как дубликат (я думаю, ошибочно).

Ответ №2:

Если у вас есть артикул дочернего элемента, вы можете сделать :

 $_product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'mysku-123');  
  

Если у вас есть размер :

 $childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null,$product);
foreach ($childProducts as $child) {
    if ($child->getSize()==$size){
       //add the product to the order
    }
}
  

а затем вы вводите дочерние элементы, чтобы найти размер.

Комментарии:

1. Спасибо за ответ, но, к сожалению, то, что вы рассмотрели, не является решением, которое я ищу. : ( Подробнее см.: magento.stackexchange.com/questions/24593 /…