Получить список товара по номеру заказа в плагине

Добрый день! При изменении статуса заказа хочу отправлять письмо контрагенту — сообщать об изменении заказа. Это с вашей помощью мы сделали. Теперь при отправке этого письма хочется заполнить шаблон 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;

}

Не за что!