Wie kann ich die neue Bestellung senden? E-Mails mit:
$order->sendNewOrderEmail();
Nur von einem Cronjob, der in Mein benutzerdefiniertes Modul verwendet wird.
Danke für die Hilfe.
Ich würde deaktivieren System > Configuration > Sales Email > Order > Enabled
Dies stellt sicher, dass es während der normalen Ausführung nicht gesendet wird
public function sendNewOrderEmail()
{
$storeId = $this->getStore()->getId();
if (!Mage::helper('sales')->canSendNewOrderEmail($storeId)) {
return $this;
}
Dann fügen Sie in Ihrem benutzerdefinierten Modul so etwas wie
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();
}
Die Hauptidee besteht darin, den deaktivierten Konfigurationswert zur Laufzeit zu überschreiben. Der Code wird nicht getestet, sollte Ihnen aber einen Ausgangspunkt geben. Weitere empfohlene Lektüre aus Alans Blog: http://alanstorm.com/magento_loading_config_variables http://alanstorm.com/magento_config_a_critique_and_caching
Ein Problem, auf das Sie möglicherweise stoßen, ist ein zwischengespeicherter Wert für die oben genannten.
Die zweite Möglichkeit wäre, den Code von sendNewOrderEmail () zu duplizieren.
Das Wesentliche für diese Art von (radikalen) Veränderungen ist das Folgende:
Einige Beispielcodes für das Umschreiben des Kundenauftragsmodells:
Der folgende Code hängt vom Vorhandensein einer aufgerufenen Tabelle ab,
yourmodule_sales_email_queue
und ich verweise auf einige Spalten mit Magic Getter. Ich werde kein Schema bereitstellen, da dies kein voll funktionsfähiger Code ist und eine Art Proof of Concept darstellt. kein Arbeitsmodul.Fügen Sie dies der Datei etc / config.xml Ihres Moduls hinzu :
app / code / local / YourCompany / YourModule / Model / Order.php
Von dort aus müssen Sie ein Ressourcenmodell, eine Sammlung und einen Cron-Worker definieren.
Die Cron-Definition in etc / config.xml würde ungefähr so aussehen:
Was eine Methode aus der Klasse aufruft
YourCompany_YourModule_Model_Observer
. Wir laden die letzten 24 Stunden von E-Mails aus der Warteschlange, laden die zugehörige Bestellung hoch und setzen das Flag, damit E-Mails gesendet werden können. Dann rufen wir die E-Mail-Versandmethode auf:Haftungsausschluss:
Beachten Sie, dass der obige Code nicht getestet wird und nicht alleine funktioniert . Es wird erwartet, dass viele Funktionen (wie Sammlungen) vorhanden sind. Ich habe es auch top-of-mind geschrieben und es kann zu Inkonsistenzen kommen , da ich meine Meinung geändert habe, wie ich ein- oder zweimal damit umgehen würde, seit ich mit dieser Antwort angefangen habe.
Dies soll Ihnen den Einstieg erleichtern und darüber nachdenken, wie Sie dies erreichen würden. Ich bin bereit, Ihre Fragen zu beantworten. Ich bin auch bereit, auf Github zu einer Open-Source-Version dieses Modultyps beizutragen.
Viel Glück!
quelle