Мгновенное обновление акций по электронной почте в magento


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

Возможно ли, что электронное письмо будет отправлено всем подписанным пользователям, как только акции будут обновлены с серверной части?

 3
Author: tanay jha, 2013-11-12

2 answers

Я думаю, что лучший способ решить вашу проблему - это установить более высокую частоту отправки. Частоту отправки можно установить из серверной части (в разделе Система |Конфигурация |Каталог |Каталог | Параметры запуска оповещений о продуктах ), но только один раз в день, раз в неделю или раз в месяц.

Теперь, если вы посмотрите в Mage_Adminhtml_Model_System_Config_Backend_Product_Alert_Cron, вы увидите, что именно там выражение cron создается и сохраняется в базе данных в core_config_data.

Вы можете изменить это поведение и создать расширение это изменяет доступные значения раскрывающегося списка в бэкэнде. Вы должны добавить перезаписи для Mage_Adminhtml_Model_System_Config_Source_Cron_Frequency, чтобы добавить параметры и Mage_Adminhtml_Model_System_Config_Backend_Product_Alert_Cron, чтобы построить соответствующие выражения cron.

Быстрый способ изменить поведение - отредактировать запись с помощью пути crontab/jobs/catalog_product_alert/schedule/cron_expr в таблице core_config_data. Скорее всего, вы найдете запись в таблице со значением 0 1 * * * (нет, включите оповещения о продукте в бэкэнде, измените время выполнения и сохраните раздел). Вы можете отредактировать его в соответствии с вашими потребностями, например0 * * * * отправлять оповещения каждый час. Остерегайтесь, что если вы снова сохраните настройки для раздела Каталог |Каталог в серверной части, пользовательские настройки, сохраненные в базе данных, будут потеряны, поэтому вы должны использовать это только как временное решение.

 4
Author: Mark van der Sanden, 2013-11-12 09:07:30

Прежде чем предложить возможное решение, я хочу сказать: "НЕ ДЕЛАЙ ЭТОГО". Если вы применяете этот подход и у вас есть n-сто пользователей, подписанных на продукт, то процесс сохранения продукта должен ждать отправки n-ста электронных писем. Это превратит управление продуктами в сущий ад. Кроме того, если вы решите разместить на складе X продуктов (X > 1) за короткий промежуток времени, и клиент подпишется на оповещение обо всех этих продуктах, он получит X электронных писем через несколько минут. Это становится раздражает, и он больше никогда не подпишется.
Я думаю, что лучший подход здесь, если вы хотите отправлять электронные письма более одного раза в день, - это запускать cron каждый час или каждые X часов. (не тот же X, что и выше).
Но вот возможное решение того, что вы хотите. Вам нужно создать наблюдателя для события catalog_product_save_after.
Добавьте это в config.xml вашего модуля

<adminhtml>
    <events>
        <catalog_product_save_after>
            <observers>
                <[moudle]>
                    <class>[module]/observer</class>
                     <method>checkStockChange</method>
                </[module]>
            </observers>
        </catalog_product_save_after>
    </events>
</adminhtml>

Теперь создайте наблюдателя: app/code/local/[Namespace]/[Module]/Model/Observer.php

<?php 
class [Namespace]_[Module]_Model_Observer extends Mage_ProductAlert_Model_Observer{
//it must extend Mage_ProductAlert_Model_Observer so you won't duplicate code
    public function checkStockChange($observer){
        $product = $observer->getEvent()->getProduct();
        $stock = $product->getStockItem();
        if ($stock->getIsInStock() == 1 && $stock->getOrigData('is_in_stock') == 0){
            $this->_processStock( Mage::getModel('productalert/email'));
        }
    }
}

Это отправит все электронные письма для всех продуктов, которые приходят снова на складе, но так как вы вызываете это, когда каждый продукт, который возвращается на складе, должен обрабатываться только этот продукт.
И на случай, если вы пропустили это в начале этого ответа, вот оно снова: НЕ ДЕЛАЙТЕ ЭТОГО

 1
Author: Marius, 2013-11-12 07:59:23