Como posso enviar e-mails do novo pedido usando:
$order->sendNewOrderEmail();
somente de um cronjob usado em Meu módulo personalizado.
Obrigado pela ajuda.
Eu desabilitaria System > Configuration > Sales Email > Order > Enabled
isso garante que durante a execução normal não seja enviado
public function sendNewOrderEmail()
{
$storeId = $this->getStore()->getId();
if (!Mage::helper('sales')->canSendNewOrderEmail($storeId)) {
return $this;
}
Em seguida, no seu módulo personalizado, inclua algo como
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();
}
A idéia principal é substituir o valor da configuração desabilitada no tempo de execução. O código não foi testado, mas deve fornecer um ponto de partida. Leitura adicional recomendada no blog de Alan: http://alanstorm.com/magento_loading_config_variables http://alanstorm.com/magento_config_a_critique_and_caching
Um problema que você pode encontrar é um valor em cache para o acima.
A segunda opção seria duplicar o código de sendNewOrderEmail ().
A essência de fazer esse tipo de mudança (radical) é a seguinte:
Algum código de amostra para o modelo de pedido de venda reescrito:
O código a seguir dependerá da presença de uma tabela chamada
yourmodule_sales_email_queue
e eu estarei referenciando algumas colunas com getters mágicos. Não vou fornecer um esquema, pois esse código não é totalmente funcional e é uma espécie de prova de conceito; não é um módulo de trabalho.Adicione isso ao arquivo etc / config.xml do seu módulo :
app / code / local / YourCompany / YourModule / Model / Order.php
A partir daí, você precisa definir um modelo de recursos, uma coleção e um trabalhador cron.
A definição do cron no etc / config.xml seria algo como isto:
O que invoca um método da classe
YourCompany_YourModule_Model_Observer
. Carregaremos as últimas 24 horas de emails da fila, carregaremos o pedido associado e definiremos o sinalizador para permitir o envio de emails. Em seguida, chamaremos o método de envio de email:Aviso Legal:
Observe que o código acima não foi testado e não funcionará por si próprio. Ele espera que muitas funcionalidades (como coleções) existam. Eu também escrevi sobre isso e pode haver inconsistências , pois mudei de idéia sobre como lidaria com isso uma ou duas vezes desde o início desta resposta.
Isso significa que você deve começar e pensar em como conseguir isso. Estou disposto a responder a quaisquer perguntas que você possa ter. Também estou disposto a contribuir no Github para uma versão de código aberto desse tipo de módulo.
Boa sorte!
fonte