我在"sales_flat_order"表中创建了一个名为"gc_sent"的新列,默认值为0。
从这里开始,我尝试在代码中执行下面的 if 语句,说明如果卡的gc_sent为 0,然后向客户发送一封包含礼品卡的电子邮件。然后将card_status设置为 1,将gc_sent设置为 1。
但是,我在开发环境中遇到的问题是,我收到一封又一封电子邮件,每分钟 1 封,其中包含我的礼品卡信息。这不应该发生。这就是我试图阻止的。这就是为什么我做的条件包括curDate(当前日期)和MailDeliveryDate。确保一切都抖动。
那么,我做错了什么?我需要更改什么?顺便说一下,我对Magento相对较新,现在只做了几个月。
最相关的部分是:
$curDate = date('Y-m-d');
$cards = Mage::getModel('giftcards/giftcards')->getCollection()
->addFieldToFilter('order_id', $order->getId())
->addFieldToFilter('gc_sent', 0);
foreach($cards as $card) {
if (($card->getGcSent() == 0) && ($curDate == $card->getMailDeliveryDate())) {
if ((($card->getMailDeliveryDate() == null) || ($curDate == $card->getMailDeliveryDate())) && $card->getCardType() != 'offline') {
$this->_send($post, 'giftcards/email/email_template', $mail, $storeId);
$card->setCardStatus(1)->save();
$order->setGcSent(1)->save();
}
}
}
但这是完整的代码:
<?php
class Sportys_Giftcardoverride_Model_Giftcards extends Webtex_Giftcards_Model_Giftcards
{
protected function _sendEmailCard($storeId = 0)
{
if($order = Mage::getModel('sales/order')->load($this->getOrderId())){
$storeId = $order->getStoreId();
} else {
$storeId = 1;
}
$amount = number_format(Mage::app()->getStore($storeId)->convertPrice($this->getCardAmount(), false, false),2);
if(Mage::helper('giftcards')->isUseDefaultPicture() || !$this->getProductId()) {
$picture = Mage::getDesign()->getSkinUrl('images/giftcard.png',array('_area'=>'frontend'));
} else {
$product = Mage::getModel('catalog/product')->load($this->getProductId());
if (!$product->getId() || $product->getImage() != 'no_selection') {
$picture = Mage::helper('catalog/image')->init($product, 'image');
} else {
$picture = Mage::getDesign()->getSkinUrl('images/giftcard.png',array('_area'=>'frontend'));
}
}
//Change picture if one is found in picture array
$cardDesigns = __DIR__ . '/../../../../../../sportysadmin/giftcarddesigns.php';
if(file_exists($cardDesigns)){
include $cardDesigns;
}
$post = array(
'amount' => $this->_addCurrencySymbol($amount,$this->getCardCurrency()),
'code' => $this->getCardCode(),
'email-to' => $this->getMailTo(),
'email-from' => $this->getMailFrom(),
'recipient' => $this->getMailToEmail(),
'email-message' => nl2br($this->getMailMessage()),
'store-phone' => Mage::getStoreConfig('general/store_information/phone'),
'picture' => $picture,
);
$mail = trim($this->getMailToEmail()) ;
if(empty($mail)) {
$mail = $order->getCustomerEmail() ;
}
$curDate = date('Y-m-d');
$cards = Mage::getModel('giftcards/giftcards')->getCollection()
->addFieldToFilter('order_id', $order->getId())
->addFieldToFilter('gc_sent', 0);
foreach($cards as $card) {
if (($card->getGcSent() == 0) && ($curDate == $card->getMailDeliveryDate())) {
if ((($card->getMailDeliveryDate() == null) || ($curDate == $card->getMailDeliveryDate())) && $card->getCardType() != 'offline') {
$this->_send($post, 'giftcards/email/email_template', $mail, $storeId);
$card->setCardStatus(1)->save();
$order->setGcSent(1)->save();
}
}
}
}
protected function _send($post, $template, $email, $storeId)
{
if ($email) {
$translate = Mage::getSingleton('core/translate');
$translate->setTranslateInline(false);
$postObject = new Varien_Object();
$postObject->setData($post);
$postObject->setStoreId($storeId);
$mailTemplate = Mage::getModel('core/email_template');
$pdfGenerator = new Webtex_Giftcards_Model_Email_Pdf();
//$this->_addAttachment($mailTemplate, $pdfGenerator->getPdf($postObject), 'giftcard.pdf');
$mailTemplate->setDesignConfig(array('area' => 'frontend', 'store' => $storeId))
->sendTransactional(
Mage::getStoreConfig($template, $storeId),
'general',
$email,
null,
array('data' => $postObject)
);
$translate->setTranslateInline(true);
} else {
throw new Exception('Invalid recipient email address.');
}
}
}
?>
问题出在下面的代码中
if ((($card->getMailDeliveryDate() == null) || ($curDate == $card->getMailDeliveryDate())) && $card->getCardType() != 'offline') {
$this->_send($post, 'giftcards/email/email_template', $mail, $storeId);
$card->setCardStatus(1)->save();
$order->setGcSent(1)->save();
}
您正在$order上设置setGcSent(1)
而不是尝试将该代码更改为$card
$card->setCardStatus(1)
->setGcSent(1)
->save();