Добрый день! При изменении статуса заказа хочу отправлять письмо контрагенту — сообщать об изменении заказа. Это с вашей помощью мы сделали. Теперь при отправке этого письма хочется заполнить шаблон smarty и отправить его. Для этого надо получить список товара по номеру заказа, чтобы заполнить таблицу в письме. Пытаюсь сделать так: $modx->switchContext('web'); $modx->invokeEvent('OnHandleRequest'); $modx->smarty->assign('order', $object->toArray());
$response = $this->modx->runProcessor('basket/mgr/orders/products/getdata',
array(
"order_id" => $this->object->get('id'),
), array(
'processors_path' => MODX_CORE_PATH.'components/basket/processors/',
)
);
$data = $response->getResponse()
$modx->smarty->assign('order_data', $data);
unset($data);
$message = $modx->smarty->fetch("message/order_submitted/contractor.tpl");
$subject = "Ваш заказ принят";
$object->Contractor->sendEmail($message, array(
"subject" => $subject,
)); Получаю ошибку: [2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php)
Could not load class: OrderProduct from mysql.orderproduct.
[2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php) No class specified for loadClass
[2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php) Could not load class
[2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php) No class specified for loadClass
[2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php) Could not load class !
[2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php) No class specified for loadClass
[2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php) No class specified for loadClass
[2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php) Could not load class: OrderProduct from mysql.orderproduct.
[2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php) OrderProduct::getSelectColumns() is not a valid static method.
[2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php) Could not load class: OrderProduct from mysql.orderproduct.
[2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php) Could not load class OrderProduct
[2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php) modSiteWebGetlistProcessor
[2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php)
Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) FROM WHERE ( .`order_id` = '8' AND
.quantity
> '0' )' at line 1
)
[2016-08-01 09:06:54] (ERROR @ /manager/components/console/connectors/console.php)
SELECT COUNT(DISTINCT *) FROM WHERE ( .`order_id` = '8' AND
.quantity
> '0' )
Array ( [success] => 1 [message] => [count] => 0 [total] => 0 [limit] => 20 [page] => 0 [object] => Array ( )
[sum] => 0
[original_sum] => 0
[discount] => 0
[quantity] => 0
[positions] => 0
) Подскажите, что надо сделать? Заранее спасибо!
Денис, компонент basket более не актуальный, надо использовать процессоры компонента shopmodx. Во-вторых, многие данные заказа уже имеются в объекте. Сделайте в плагине вот так: $modx->log(1, print_r($object->toArray(), 1)); У вас в журнале ошибок будет типа такого: [2016-08-01 17:00:49] (ERROR @ /manager/components/shopmodx/connectors/orders.php) Array ( [id] => 6 [number_history] => 23 [status_id] => 3 [contractor] => 44 [createdby] => 44 [editedby] => 44 [createdon] => 2016-07-27 17:23:46 [editedon] => 2016-08-01 17:00:49 [manager] => [address] => [comments] => [discount] => 0 [_OrderProducts] => Array ( [6] => Array ( [id] => 6 [order_id] => 6 [product_id] => 135 [quantity] => 1 [price] => 10000 [currency_id] => 0 [_Product] => Array ( [id] => 135 [type] => document [contentType] => text/html [pagetitle] => Toshiba Satellite C850-D1R 15,6" - красный [longtitle] => [description] => [alias] => toshiba-satellite-c850-d1r-15,6-krasnyy [link_attributes] => [published] => 1 [pub_date] => 0 [unpub_date] => 0 [parent] => 131 [isfolder] => [introtext] => [content] => <p>Toshiba Satellite C850-D1R оснащен множеством полезных функций, эффективная работа которых базируется на мощной начинке компьютера - процессор третьего поколения Intel® Core™ i3-3110M, оперативная память с возможностью расширения до 16 Гб, дискретная видеокарта 1 Гб и графический адаптер AMD Radeon™ HD 7610M.</p>
<p>Жесткий диск вместителен - 640 Гб, его пространства хватит на долгое время даже интенсивного использования. TFT-дисплей высокой яркости наиболее популярного размера 15,6 дюймов дает возможность и комфортно работать, и отлично отдыхать, и без труда перемещаться с ноутбуком по всему миру.</p> <h3>Ноутбук Toshiba Satellite C850-D1R 15,6" - красный (PSCBYR-023003RU). Характеристики</h3> <ul> <li>Экран: 15,6" LED</li> <li>Разрешение экрана: 1366 х 768</li> <li>Процессор: Intel Core i3-3110M (2400 МГц)</li> <li>Объем оперативной памяти: 4096 Мб</li> <li>Тип оперативной памяти: DDR3-1600 МГц</li> <li>Жесткий диск: 640 Гб (5400 rpm)</li> <li>Графическая карта: AMD Radeon HD 7610M, дискретный</li> <li>Размер видеопамяти: 1 Гб</li> <li>Оптический привод: DVD Super Multi</li> <li>Операционная система: Windows 8</li> </ul> <h3>Ноутбук Toshiba Satellite C850-D1R 15,6" - красный (PSCBYR-023003RU). Интерфейсы</h3> <ul> <li>Беспроводная связь: Bluetooth 4.0, WiFi (802.11 b/ g/ n)</li> <li>Разъемы и порты ввода-вывода: внешний монитор, RJ-45, внешний микрофон, наушники (стерео), 2 x USB 2.0, кардридер (SD, MMC), HDMI, 1 x USB 3.0</li> <li>Проводная связь: 10BASE-T/ 100BASE-TX</li> </ul> <h3>Ноутбук Toshiba Satellite C850-D1R 15,6" - красный (PSCBYR-023003RU). Прочее</h3> <ul> <li>Камера: встроенная веб-камера 1 Мп со встроенным микрофоном</li> <li>Батарея: литий-ионная (до 3 часов 30 минут)</li> <li>Габариты: 380 x 242 x 33.52 мм</li> <li>Вес: 2.3 кг</li> <li>Гарантия: 12 месяцев</li> <li>Цвет: красный</li> </ul> <p> </p> <p> </p> [richtext] => 1 [template] => 3 [menuindex] => 3 [searchable] => 1 [cacheable] => 1 [createdby] => 1 [createdon] => 0 [editedby] => 1 [editedon] => 2016-07-29 17:05:43 [deleted] => [deletedon] => 0 [deletedby] => 0 [publishedon] => 0 [publishedby] => 3 [menutitle] => [donthit] => [privateweb] => [privatemgr] => [content_dispo] => 0 [hidemenu] => [class_key] => modDocument [context_key] => web [content_type] => 1 [uri] => catalog/noutbuki/toshiba-satellite-c850-d1r-15,6-krasnyy.html [uri_override] => 0 [hide_children_in_tree] => 0 [show_in_tree] => 1 [properties] => [price] => 10000 [article] => [currency] => ) )
[7] => Array
(
[id] => 7
[order_id] => 6
[product_id] => 159
[quantity] => 1
[price] => 19880
[currency_id] => 0
[_Product] => Array
(
[id] => 159
[type] => document
[contentType] => text/html
[pagetitle] => 1
[longtitle] =>
[description] =>
[alias] => 1
[link_attributes] =>
[published] =>
[pub_date] => 0
[unpub_date] => 0
[parent] => 158
[isfolder] =>
[introtext] =>
[content] =>
[richtext] => 1
[template] => 3
[menuindex] => 0
[searchable] => 1
[cacheable] => 1
[createdby] => 1
[createdon] => 0
[editedby] => 1
[editedon] => 2016-07-29 16:57:42
[deleted] =>
[deletedon] => 0
[deletedby] => 0
[publishedon] => 0
[publishedby] => 0
[menutitle] =>
[donthit] =>
[privateweb] =>
[privatemgr] =>
[content_dispo] => 0
[hidemenu] =>
[class_key] => modDocument
[context_key] => web
[content_type] => 1
[uri] => catalog/ballonyi/1.html
[uri_override] => 0
[hide_children_in_tree] => 0
[show_in_tree] => 1
[properties] =>
[price] => 19880
[article] =>
[currency] =>
)
)
)
[positions] => 2
[total] => 2
[quantity] => 2
[sum] => 29880
[original_sum] => 29880
[products_ids] => Array
(
[0] => 135
[1] => 159
)
[new_object] =>
[save_object] => 1
[order_id] => 6
[show_canceled] =>
[menu] => Array
(
[0] => Array
(
[text] => Данные клиента
[handler] => this.ShowContractorInfo
)
[1] => Array
(
[text] => Фильтровать по клиенту
[handler] => this.FilterByContractor
)
)
[status_color] => #FF00FF
[order_num] =>
[status_str] => Принят
[contractor_fullname] => Николай Ланец
[contractor_email] => n.lanets@modxclub.ru
[contractor_phone] =>
[contractor_address] =>
[manager_fullname] =>
[ip] =>
[paysystem_name] =>
[pay_id] =>
[paysys_invoice_id] =>
[pay_date] =>
[pay_sum] =>
[action] => updateFromGrid
[new_status] => 3
) Тут вам и сумма заказа, и данные товаров и прочее. Нет только картинок товаров. Если и картинки понадобятся, то да, придется тогда процессор задействовать.
Спасибо! У меня все получилось!
Мне кажется это кому ни-будь может пригодиться. newstatus.tpl: {extends file="message/layout.tpl"}
{block name=body}
<h3 style="margin: 20px 0 50px;">
Номер заказа: <strong>{$order.id}</strong>
Новый статус заказа: <strong>{$newstatusstr}</strong>
</h3>
{$smarty.block.child}
<h3>Список товаров</h3>
<table border="1" width="90%">
<tbody>
<tr>
<th>Наименование</th>
<th>Количество</th>
<th>Цена</th>
<th>Сумма</th>
</tr>
{foreach $order_data as $product}
<tr>
<td><a href="{$site_url}{$product._Product.uri}">{$product._Product.pagetitle}</a></td>
<td>{$product.quantity} </td>
<td>{$product.price|number_format:2:",":" "} {$product.currency_code}</td>
<td>{$summ = $product.quantity * $product.price}{$summ|number_format:2:",":" "} {$product.currency_code}</td>
</tr>
{/foreach}
</tbody>
</table>
<br />
<br />
<strong>Итого: </strong> {if $order.discount}<s>{((float)$order.original_sum)|number_format:2:".":" "}</s> {$product.currency_code}<br /><strong>С учетом скидки {$order.discount}%: </strong>{/if} {((float)$order.sum)|number_format:2:".":" "} {$product.currency_code}
{/block} Плагин UpdateOrder: <?php
switch ($modx->event->name) {
case 'OnShopModxOrderBeforeSave':
// Если поле статус изменено, то фиксируем новый статус
if ($object->isDirty('status_id')) {
$object->set("new_status", $object->status_id);
}
break;
case 'OnShopModxOrderSave':
if ($object->new_status) {
$arr1 = $object->get('_OrderProducts');
$sendcont = false;
$modx->switchContext('web');
$modx->invokeEvent('OnHandleRequest');
switch ($object->new_status) {
// Принят
case 3:
$sendcont = true;
$modx->smarty->assign('newstatusstr', 'Принят');
break;
case 4:
$sendcont = true;
$modx->smarty->assign('newstatusstr', 'Доставка');
break;
case 5:
$sendcont = true;
$modx->smarty->assign('newstatusstr', 'Доставлен');
break;
case 6:
$sendcont = true;
$modx->smarty->assign('newstatusstr', 'Выполнен');
break;
case 7:
$sendcont = true;
$modx->smarty->assign('newstatusstr', 'Отменен');
break;
case 8:
$sendcont = true;
$modx->smarty->assign('newstatusstr', 'Оплачен');
break;
}
if (($object->Contractor) && ($sendcont)) {
$modx->smarty->assign('order', $object->toArray());
$modx->smarty->assign('order_data', $arr1);
//$modx->log(1, print_r($object->toArray(), 1));
$message = $modx->smarty->fetch("message/order_submitted/newstatus.tpl");
$subject = "Изменение статуса заказа №-" . $object->get('id');
$object->Contractor->sendEmail($message, array(
"subject" => $subject,
));
}
}
break;
}
Не за что!