Уведомить пользователя по электронной почте, если заказ находится на рассмотрении в течение 2 дней
Что мне нужно сделать, так это: Мне нужно отправить электронное письмо клиенту
if his order has been pending (or some other custom status) for two days and
cancel the order if this time becomes 3 days.
В электронном письме должен быть заказ и пользовательское сообщение.
Я нашел это http://inchoo.net/magento/cancel-pending-orders / но нужна помощь с отправкой электронной почты.
Любая помощь приветствуется.
3 answers
Привет вам работа в cron сервис, где вы можете отправить электронное письмо клиенту на ежедневной основе.
Необходимость создания расширения приведет к отправке всех заказов с текущим статусом в ожидании отправки по электронной почте отмененного заказа трехдневной давности. Я предлагаю. Пожалуйста, добавьте заказ с комментарием, который является двухдневным заказом, и отправьте клиенту по почте, обновив заказ.
Вам нужно изменить расширение inchoo:
public function cancelPendingOrders()
{
// load custom variable for the comment
$msg = Mage::getModel('core/variable')
->setStoreId(Mage::app()->getStore()->getId())
->loadByCode('pending_payment')
->getValue('text');
// echo $msg;
$orders = Mage::getModel('sales/order')->getCollection()
->addFieldToFilter('status', 'pending')
->addFieldToFilter('created_at', array('lt' => new Zend_Db_Expr("DATE_ADD('".now()."', INTERVAL -'48' HOUR)"))) ;
foreach ($orders as $order) {
// Add the comment and save the order
$order->addStatusToHistory($order->getStatus(), $msg , $isCustomerNotified = true);
$order->setStatus('ap');
$order->save();
}
}
Как всегда, все можно найти в блоге Inchoo (Эти ребята отличные). Этот пост о пользовательских электронных письмах должен вам помочь.
- Создайте шаблон электронной почты в формате HTML
- Добавьте его в свой config.xml
- Добавьте обработчик электронной почты в свой скрипт
- ...
- $$$
В вашем config.xml
объявите файл шаблона со следующим:
<?xml version="1.0"?>
<config>
<global>
...
<template>
<email>
<description_of_template translate="label" module="yourmodule">
<label>Template Label</label>
<file>your_template.html</file>
<type>html</type>
</description_of_template>
</email>
</template>
....
</global>
...
</config>
Создайте файл шаблона в расположении app/locale/(en_US)/template/email/your_template.html
. Это, конечно, может содержать все, что вам нравится, и, вероятно, проще всего основывать его на существующем шаблоне, чтобы сохранить согласованное форматирование. Вот простой пример:
<body style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
<div style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="center" valign="top" style="padding:20px 0 20px 0">
<table bgcolor="#FFFFFF" cellspacing="0" cellpadding="10" border="0" width="650" style="border:1px solid #E0E0E0;">
<tr>
<td valign="top"><a href="{{store url=""}}"><img src="{{var logo_url}}" alt="{{var logo_alt}}" style="margin-bottom:10px;" border="0"/></a></td>
</tr>
<tr>
<td valign="top">
<h1 style="font-size:22px; font-weight:normal; line-height:22px; margin:0 0 11px 0;"">Hello {{htmlescape var=$customer.getName()}}</h1>
<p style="font-size:12px; line-height:16px; margin:0;">
Here is the email for {{htmlescape var=$product.getName()}} you recently requested.<br /><br />
If you have any queries or require support contact us at <a href="mailto:{{config path='trans_email/ident_support/email'}}">{{config path='trans_email/ident_support/email'}}</a>.
</p>
</td>
</tr>
<tr>
<td bgcolor="#EAEAEA" align="center" style="background:#EAEAEA; text-align:center;"><center><p style="font-size:12px; margin:0;">Thank you, <strong>{{var store.getFrontendName()}}</strong></p></center></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</body>
Вы заметите разделы электронного письма, такие как {{htmlescape var=$product.getName()}}
- это переменные электронной почты, которые будут заменены до отправки электронного письма в соответствии с переменными, которые вы передаете при вызове send()
к которому мы вскоре перейдем.
Далее код для фактической отправки электронного письма:
$email = Mage::getModel('core/email_template')->loadDefault('description_of_template');
$email->setTemplateSubject('Some Subject');
$email->setSenderName(Mage::getStoreConfig('trans_email/ident_sales/name', 1));
$email->setSenderEmail(Mage::getStoreConfig('trans_email/ident_sales/email', 1));
$product = Mage::getModel('catalog/product')->load($someproductid);
$store = Mage::getModel('core/store')->load($somestoreid);
$customer = Mage::getModel('customer/customer')->load($somecustomerid);
$data = array('product' => $product, 'store' => $store, 'customer' => $customer);
$success = $email->send($customer->getEmail(), $customer->getName(), $data);
if ($success):
Mage::log('Email sent');
else:
Mage::log('Could not send email');
endif;
В приведенном выше массиве $data
содержит переменные, которые используются в качестве источника данных для замены содержимого фигурных скобок, поэтому, например, $customer.getName()
эквивалентно вызову $customer->getName()
для объекта $customer
, переданного шаблону как customer
в массиве $data
.