Nikita

Nikita

С нами с 18 февраля 2013; Место в рейтинге пользователей: #351
Андрей
22 февраля 2025, 11:06
1
0
Не приходит информация: phone, street, comment
Остальные приходят. В чём может быть причина?
<?php
if($modx->event->name != 'msOnCreateOrder') return;
$token = $modx->getOption('mstelegram_token', null, false);
$recipients = explode(',', $modx->getOption('mstelegram_recipients', null, ''));
$contacts = $modx->getObject('msOrderAddress', array('id'=> $msOrder->id));
$_products = $msOrder->getMany('Products');
$profile = $msOrder->getOne('UserProfile');

// Список товаров в заказе
$i = 0;
$products = '';
foreach ($_products as $product) {
    $i++;
    $products .= "*{$i}. {$product->name}* \n    `↳ ". round($product->price) ." х {$product->count} шт. = ". round($product->price * $product->count)."` \n";
}

if ($msOrder->delivery == '1') {
    $deli = "Сами заберут \n---------- \nТелефон: {$contacts->phone} \nКомментарий: {$contacts->comment}\n";
    } else if ($msOrder->delivery == '2') {
        $deli = "Доставка {$contacts->city} `{$msOrder->delivery_cost} р.` \n---------- \nТелефон: {$contacts->phone} \nАдрес: {$contacts->city}, {$contacts->street} \nКомментарий: {$contacts->comment}\n";
    }

// Текст сообщения
$message = "
Новый заказ #{$msOrder->id}
на сумму: {$msOrder->cart_cost} р.
----------
{$products}
----------
{$deli}
_Статус заказа придёт повторно_";

$message = urlencode($message);
foreach($recipients as $id){
    $id = trim($id);
    if(!$id) continue;
    $url = "https://api.telegram.org/bot{$token}/sendMessage?chat_id={$id}&parse_mode=markdown&text={$message}";
    $ch = curl_init();
    curl_setopt_array($ch, array(CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true,));
    $result = curl_exec($ch);
    curl_close($ch);
}
Кушнеров Александр
30 августа 2024, 01:32
1
0
Я тоже немного доработал, чтобы приходило больше полей, а также способ и вариант доставки текстом:
<?php
if($modx->event->name != 'msOnCreateOrder') return;

$token = $modx->getOption('mstelegram_token', null, false);
$recipients = explode(',', $modx->getOption('mstelegram_recipients', null, ''));

$contacts = $msOrder->getOne('Address');
$_products = $msOrder->getMany('Products');

// Список товаров в заказе
$i = 0;
$products = '';
foreach ($_products as $product) {
    $i++;
    $products .= "{$i}. {$product->name} ({$product->count} шт.)";
}

// Текст сообщения
$message = "
Новый заказ #{$msOrder->num}
на сумму {$msOrder->cost} р.
-----
{$products}
-----
E-mail: {$contacts->email}
Имя: {$contacts->receiver}
Телефон: {$contacts->phone}
Комментарий: {$contacts->comment}";

$deliveryMethod = $modx->getObject('msDelivery', $msOrder->delivery);
if ($deliveryMethod) {
    $deliveryMethodTitle = $deliveryMethod->get('name');
    $message .= "\nСпособ доставки: {$deliveryMethodTitle}";
}

$paymentMethod = $modx->getObject('msPayment', $msOrder->payment);
if ($paymentMethod) {
    $paymentMethodTitle = $paymentMethod->get('name');
    $message .= "\nСпособ оплаты: {$paymentMethodTitle}";
}

$message = urlencode($message);
foreach($recipients as $id){
	$id = trim($id);
	if(!$id) continue;
    $url = "https://api.telegram.org/bot{$token}/sendMessage?chat_id={$id}&text={$message}";
    $ch = curl_init();
    curl_setopt_array($ch, array(CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true));
    $result = curl_exec($ch);
    curl_close($ch);
}
Alexey
18 мая 2022, 09:26
1
+1
Привет! Попробуй в ссылке на оплату поменять money.yandex.ru на yoomoney.ru — тыц

Если установлен компонент mspyacassa, то есть настройка mspyacassa_payment_url
Дмитрий
14 апреля 2021, 14:56
1
0
Может быть кому поможет. Я просто поменял адреса хоста в системных настройках MODX (шестерёнка в правом верхнем углу, где иконка профиля). В техподдержке Юкассы сказали, что это сработало и касса не должна сломаться после полной смены хостов.
Замены в настройках:
money.yandex.ru/eshop.xml на yoomoney.ru/eshop.xml
penelope.yamoney.ru:443/webservice/mws/api/ на shop.yookassa.ru:443/webservice/mws/api/

Павел Романов
18 февраля 2020, 17:56
1
+1
Сделайте сниппет:
<?php
$cities = $modx->runSnippet('pdoResources', array(
    'parents'=> 8,
    'includeTVs'=> 'city',
    'limit' =>0, 
    'tpl'=>'@INLINE [[+tv.city]]',
    'outputSeparator' => '--'
));
$cities = explode('--', $cities);
$cities = array_unique($cities);
natsort($cities);
foreach($cities as $city){
   $out .= '<option value="'.$city.'">'.$city.'</option>';
}
return '<select name="city">'.$out.'</select>';
Баха Волков
21 августа 2019, 21:42
1
0
switch($modx->event->name) {
      case 'OnDocFormPrerender':
                $classes = ['msProduct', 'msCategory'];
                if (in_array($resource->get('class_key'), $classes)) {
                    $template = $resource->get('template');
                    $templates = [1,2]; // Список шаблонов в которых нужно скрыть поле Содержимое

                    if (in_array($template, $templates)) {
                        $modx->regClientStartupHTMLBlock('
                        <script type="text/javascript">
                            Ext.onReady(function() {
                                var content = Ext.getCmp("ta");
                                content.hide();
                            });
                        </script>');
                    }
                }
                break;
}
Сергей
16 февраля 2019, 19:18
1
0
Благодарю, но такой вариант не подошёл бы наверно, так как будет много запросов к базе, вкладки и товары должны автоматом же формироваться и их может быть n-е количество, но нашёл решение с билдером запросов, много времени потратил правда, в документации неточность была.

Вот решение моей задачи если кому-то пригодится:

$json = $modx->runSnippet('pdoResources', array(
'parents'   => $parent_id,
'select' => array(
        'modResource' => $select,
        'msProductData' => 'price'),
'class' => 'modResource',
    'leftJoin' => array(
        'msProductData' => array(
        'class' => 'msProductData',
        'on' => 'msProductData.id = modResource.id')
),
'includeTVs'=> $includeTVs,
'return'    => 'json'
));
Павел Гвоздь
07 ноября 2018, 20:54
1
+1
условие where перестает работать.
Ещё бы!
'where'=>'{"id:!=":"[[*id]]"}'
Что это за колдунство?) Запишите нормально, по-человечески, массивом!
Вот тоже самое:
'where' => [
    'id:!=' => $_modx->resource['id'],
],
Алекс Назаренко
09 августа 2018, 15:31
1
0
<a href="#" 
 data-sort="ms|price:desc" 
 data-dir="[[+mse2_sort:is=`ms|price:desc`:where=`{'Data.price:>=':2000}`]]" 
 class="sort__link">
<span class="link-span">Дорогие от 2000 р.</span>
</a>
Konstantin B
21 июня 2018, 23:13
2
0
В общем и целом решение нашел, странно что в документации написано объект $order, меня честно говоря это ввело в заблуждение.

Оставлю это тут, вдруг кому-то пригодится!

Как оказалось достаточно такой конструкции:

<?php
switch ($modx->event->name) {
    case 'msOnCreateOrder':
        
	    if($newStatus == true)
	    {
            $msOrder->set("status","5");
            $msOrder->save();
        }
	break;
}