Jak mogę wysłać wiadomość e-mail z nowym zamówieniem, używając:
$order->sendNewOrderEmail();
tylko z cronjobu używanego w Moim niestandardowym module.
Dzięki za pomoc.
Chciałbym wyłączyć System > Configuration > Sales Email > Order > Enabled
zapewnia to, że podczas normalnego wykonania nie zostanie wysłane
public function sendNewOrderEmail()
{
$storeId = $this->getStore()->getId();
if (!Mage::helper('sales')->canSendNewOrderEmail($storeId)) {
return $this;
}
Następnie w niestandardowym module dołącz coś podobnego
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();
}
Główną ideą jest zastąpienie wyłączonej wartości konfiguracji w czasie wykonywania. Kod nie jest testowany, ale powinien dać ci punkt wyjścia. Dalsze zalecane czytanie z bloga Alana: http://alanstorm.com/magento_loading_config_variables http://alanstorm.com/magento_config_a_critique_and_caching
Jednym z problemów, które możesz napotkać, jest buforowana wartość powyższego.
Drugą opcją byłoby skopiowanie kodu z sendNewOrderEmail ().
Istota dokonania tego rodzaju (radykalnej) zmiany jest następująca:
Przykładowy kod do przepisania modelu zamówienia sprzedaży:
Poniższy kod będzie zależał od obecności tabeli o nazwie
yourmodule_sales_email_queue
i będę odwoływał się do niektórych kolumn za pomocą magicznych programów pobierających. Nie zamierzam przedstawiać schematu, ponieważ nie jest to w pełni funkcjonalny kod i jest swego rodzaju dowodem koncepcji; nie działający moduł.Dodaj to do pliku etc / config.xml modułu :
app / code / local / YourCompany / YourModule / Model / Order.php
Następnie musisz zdefiniować model zasobów, kolekcję i proces roboczy cron.
Definicja crona w pliku etc / config.xml wyglądałaby mniej więcej tak:
Który wywołuje metodę z klasy
YourCompany_YourModule_Model_Observer
. Załadujemy ostatnie 24 godziny wiadomości e-mail z kolejki, załadujemy powiązane zamówienie i ustawimy flagę, aby umożliwić wysyłanie wiadomości e-mail. Następnie wywołamy metodę wysyłania wiadomości e-mail:Zrzeczenie się:
Pamiętaj, że powyższy kod nie jest testowany i nie będzie działał samodzielnie. Oczekuje, że istnieje wiele funkcji (takich jak kolekcje). Napisałem to również w myślach i mogą wystąpić niekonsekwencje , ponieważ zmieniłem zdanie na temat tego, jak poradzę sobie z tym raz lub dwa razy od momentu rozpoczęcia tej odpowiedzi.
Ma to na celu pomóc Ci zacząć i zastanowić się, jak to osiągnąć. Jestem gotów odpowiedzieć na wszelkie pytania. Jestem również gotów przyczynić się na Github do wersji tego typu modułu typu open source.
Powodzenia!
źródło