Comment puis-je envoyer les nouveaux e-mails de commande en utilisant:
$order->sendNewOrderEmail();
uniquement à partir d'un cronjob utilisé dans Mon module personnalisé.
Merci pour l'aide.
Je désactiverais System > Configuration > Sales Email > Order > Enabled
cela garantit que lors de l'exécution normale, il n'est pas envoyé
public function sendNewOrderEmail()
{
$storeId = $this->getStore()->getId();
if (!Mage::helper('sales')->canSendNewOrderEmail($storeId)) {
return $this;
}
Ensuite, dans votre module personnalisé, incluez quelque chose comme
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();
}
L'idée principale étant de remplacer la valeur de configuration désactivée lors de l'exécution. Le code n'est pas testé mais devrait vous donner un point de départ. Autres lectures recommandées sur le blog d'Alan: http://alanstorm.com/magento_loading_config_variables http://alanstorm.com/magento_config_a_critique_and_caching
Un problème que vous pourriez rencontrer est une valeur mise en cache pour ce qui précède.
La deuxième option serait de dupliquer le code de sendNewOrderEmail ().
L'essence de ce type de changement (radical) est la suivante:
Quelques exemples de code pour la réécriture du modèle de commande client:
Le code suivant dépendra de la présence d'une table appelée
yourmodule_sales_email_queue
et je ferai référence à certaines colonnes avec des getters magiques. Je ne vais pas fournir de schéma car il ne s'agit pas d'un code pleinement fonctionnel et d'une sorte de preuve de concept; pas un module de travail.Ajoutez ceci à etc / config.xml de votre module :
app / code / local / YourCompany / YourModule / Model / Order.php
De là, vous devez définir un modèle de ressource, une collection et un travailleur cron.
La définition de cron dans etc / config.xml ressemblerait à ceci:
Qui invoque une méthode de la classe
YourCompany_YourModule_Model_Observer
. Nous chargerons les dernières 24 heures d'e-mails de la file d'attente, chargerons la commande associée et définirons le drapeau pour lui permettre d'envoyer des e-mails. Ensuite, nous invoquerons la méthode d'envoi d'e-mails:Avertissement:
Notez que le code ci-dessus n'est pas testé et ne fonctionnera pas seul. Il s'attend à ce que beaucoup de fonctionnalités (comme les collections) existent. Je l'ai également écrit en tête et il peut y avoir des incohérences , car j'ai changé d'avis sur la façon dont je gérerais cela une ou deux fois depuis le début de cette réponse.
Ceci est destiné à vous aider à démarrer et à réfléchir à la façon dont vous pourriez y parvenir. Je suis prêt à répondre à toutes vos questions. Je suis également prêt à contribuer sur Github à une version open source de ce type de module.
Bonne chance!
la source