Электронные уведомления о наличии готовых продуктов

8

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

Прямо сейчас клиенты могут подписаться на рассылку уведомлений об акциях. Задание cron работает нормально, и система логически отправляет их только тогда, когда они на самом деле есть в наличии и не установлены на 0. Однако конфигурируемые продукты всегда имеют значение 0, а простые продукты, принадлежащие этому конфигурируемому, меняют запас. То, что происходит сейчас, это то, что люди могут подписаться на товар только тогда, когда ВСЕ размеры отсутствуют на складе (поэтому даже не могут выбрать размер, о котором они хотят получать информацию), но тогда, когда обувь, например, будет пополнена. они не получают уведомления, потому что конфигурируемый (это продукт, на который они подписаны) по-прежнему равен 0.

Я уверен, что я не первый, кто столкнулся с этой проблемой, поэтому мне было интересно, смог ли кто-нибудь обойти ее или найти решение?

Магин
источник

Ответы:

1

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

В первом случае вы можете разрешить подписку, если какого-либо из дочерних продуктов нет в наличии:

    $allowSubscriptionForProduct = false;
    if ($product->getData('type_id') == 'configurable') {
        $childProductIds = Mage::getModel('catalog/product_type_configurable')
            ->getChildrenIds($product->getId())
        foreach ($childProductIds[0] as $childProductId) {
            $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($childProductId);
            if ($stock->getData('is_in_stock') == 1) {
                $allowSubscriptionForProduct = true;
                break;
            }
        }
    }
    if ($allowSubscriptionForProduct === true) {
        // change a product attribute to let customers subscribe to this product. 
    }

NB: $ childProductIds имеет странную структуру. Я ожидал бы массив идентификаторов, но getChildrenIds () оборачивает этот массив в другой массив. Следовательно, [0] в цикле foreach.

Во втором случае вам нужно перейти от дочернего продукта к родительскому настраиваемому продукту.

    foreach ($simpleProductThatWasOutOfStock as $outOfStockSimpleProduct) {
        $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($outOfStockSimpleProduct->getId());
        if ($stock->getData('is_in_stock') == 1) {
            $configurableProductIds = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($outOfStockSimpleProduct->getId())
            foreach ($configurableProductIds as $configurableProductId) {
                // use the code that schedules/sends the email notifications 
            }
        }
    }

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

Эти записи также могут быть полезны. Чтобы проверить состояние склада:

https://stackoverflow.com/a/2703800

https://stackoverflow.com/a/31612963

Переход от дочернего продукта к настраиваемому родительскому:

https://stackoverflow.com/a/1706297

https://magento.stackexchange.com/a/30245

Vincent_v_E
источник
0

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

MageComp
источник