Как я могу отправить новый заказ по электронной почте, используя:
$order->sendNewOrderEmail();
только из cronjob, используемого в Моем пользовательском модуле.
Спасибо за помощь.
Я бы отключил System > Configuration > Sales Email > Order > Enabled
это гарантирует, что во время нормального выполнения оно не отправляется
public function sendNewOrderEmail()
{
$storeId = $this->getStore()->getId();
if (!Mage::helper('sales')->canSendNewOrderEmail($storeId)) {
return $this;
}
Тогда в свой пользовательский модуль включите что-то вроде
Mage::getConfig()->setNode(
'default/'.Mage_Sales_Model_Order::XML_PATH_EMAIL_ENABLED, true
);
foreach(Mage::app()->getStores() as $storeCode=>$store){
Mage::getConfig()->setNode(
"stores/{$storeCode}/".Mage_Sales_Model_Order::XML_PATH_EMAIL_ENABLED, true
);
}
$collection = Mage::getModel('sales/order')->getCollection()->addAttributeToFilter('email_sent', 0);
foreach ($collection as $order){
$order->sendNewOrderEmail();
}
Основная идея заключается в переопределении отключенного значения конфигурации во время выполнения. Код не проверен, но должен дать вам отправную точку. Далее рекомендуется чтение из блога Алана: http://alanstorm.com/magento_loading_config_variables http://alanstorm.com/magento_config_a_critique_and_caching
Одна из проблем, с которой вы можете столкнуться - это кэшированное значение для вышеупомянутого.
Второй вариант будет дублировать код из sendNewOrderEmail ().
Суть такого (радикального) изменения заключается в следующем:
Пример кода для модели заказа клиента переписать:
Следующий код будет зависеть от наличия вызываемой таблицы,
yourmodule_sales_email_queue
и я буду ссылаться на некоторые столбцы с помощью магических методов получения. Я не собираюсь предоставлять схему, так как это не полностью функциональный код и своего рода подтверждение концепции; не рабочий модуль.Добавьте это в ваш файл etc / config.xml :
Приложение / код / местные / YourCompany / YourModule / Модель / Order.php
Оттуда вам нужно определить модель ресурса, коллекцию и работника cron.
Определение cron в etc / config.xml будет выглядеть примерно так:
Который вызывает метод из класса
YourCompany_YourModule_Model_Observer
. Мы загрузим последние 24 часа электронных писем из очереди, загрузим соответствующий заказ и установим флаг, чтобы позволить ему отправлять электронные письма. Затем мы вызовем метод отправки электронной почты:Отказ от ответственности:
Обратите внимание, что приведенный выше код не проверен и не будет работать сам по себе. Он ожидает, что существует множество функциональных возможностей (например, коллекций). Я также написал это на высшем уровне, и могут быть несоответствия , поскольку я передумал, как бы я справился с этим один или два раза с момента начала ответа.
Это должно дать вам толчок и подумать о том, как вы этого добьетесь. Я готов ответить на любые ваши вопросы. Я также готов внести свой вклад на Github в версию этого типа модуля с открытым исходным кодом.
Удачи!
источник