Артур Шевченко

Артур Шевченко

С нами с 24 мая 2019; Место в рейтинге пользователей: #7
Отправить деньги
Артур Шевченко
30 апреля 2022, 20:59
+1
Не бросай нас, ты не можешь быть таким жестоким)))
Артур Шевченко
30 апреля 2022, 11:14
0
Не грусти, год-два и всё будет))) А ещё ты можешь сам его адаптировать, думаю где-то на гитхаб есть исходный код)))
Артур Шевченко
27 апреля 2022, 15:22
0
Ты просил пример, я тебе скинул пример. В моём примере есть объект заказа $msOrder из него можно получить любую информацию по этому заказу. Если тебе нужно слать уведомления при смене статуса, поменяй событие. список доступных событий есть в документации. А если хочешь, чтобы написали тот код который будет работать так как тебе нужно, составь ТЗ и опубликуй в разделе Работа.
Артур Шевченко
27 апреля 2022, 10:41
0
Плагин
<?php
switch ($modx->event->name) {
    case 'msOnCreateOrder':
        $msOrder->set('comment', 'https://art-sites.ru/smeta?order_id='.$msOrder->get('id'));
        $msOrder->save();
        $modx->runSnippet('sendOrderToTelegram', array('msOrder' => $msOrder));
    break;
}
Сниппет sendOrderToTelegram
<?php
if(!isset($msOrder)){
    $modx->log(1, 'sendOrderToTelegram: Не передан объект заказа');
    return false;
}
$token = "токен";
$chat_id = "идентификатор чата";
 
$orderNum = $msOrder->get('num');
$total_cost = $msOrder->get('cost');
$pay_id = $msOrder->get('payment');
$sql = '
SELECT name 
FROM modx_ms2_payments
WHERE id = '.$pay_id;
$statement = $modx->query($sql);
$name = $statement->fetchAll(PDO::FETCH_COLUMN);
$pay_name = $name[0];
$msAddress = $msOrder->getOne('Address');
$msReceiver = $msAddress->get('receiver');
$linkToEstimate = $msOrder->get('comment');
$msComment = $msAddress->get('comment');
$msPhone = $msAddress->get('phone');
$msProducts = $msOrder->getMany('Products');

$design_cost = 0;
$layout_cost = 0;
$setting_cost = 0;
$marketing_cost = 0;
$other_cost = 0;
$expense = 0;
$index = 1;
       
foreach ($msProducts as $msProduct) {
    $prod_id = $msProduct->get('product_id');
    $prod_count = $msProduct->get('count');
    $prod_price = $msProduct->get('price');
    $prod_cost = $msProduct->get('cost');
    $prod_weight = $msProduct->get('weight');
    $resource = $modx->getObject('modResource', $prod_id);
    $prod_name = $resource->get('longtitle');
    $prod_parent = $resource->get('parent');
    $expense += $resource->get('add_cost');
            
    switch($prod_parent){
        case 24:
            $design_cost += $prod_price  * $prod_count;
            //$modx->log(xPDO::LOG_LEVEL_ERROR, 'EXPENSE_D ' . $expense_d);
        break;
        case 17:
            $layout_cost += $prod_price  * $prod_count;
        case 35:
        case 46:
        case 56:  
            $setting_cost += $prod_price  * $prod_count;
        break;  
        case 57:
            $marketing_cost += $prod_price  * $prod_count;
        break;
        default:
            $other_cost += $prod_price  * $prod_count;
        break;  
    }
            
    $products .= "
{$index}. {$prod_name} 
({$prod_count}шт. по цене {$prod_price} руб.);
";
            $index = $index + 1; 
          
}

if($design_cost > 0){
    $design_txt ="
--- на дизайн: {$design_cost} руб.";
}
if($layout_cost > 0){
    $layout_txt ="
--- на вёрстку: {$layout_cost} руб.";
}
if($setting_cost > 0){
    $setting_txt ="
--- на настройку: {$setting_cost} руб.";
}
if($marketing_cost > 0){
    $marketing_txt ="
--- на маркетинг: {$marketing_cost} руб.";
}  
if($other_cost > 0){
    $other_txt ="
--- на остальное: {$other_cost} руб.";
} 
if($expense > 0){
    $expense_txt ="
--- на допы: {$expense} руб.";
}
if($msComment){
    $comment="
--------------------------------
КОММЕНТАРИЙ ЗАКАЗЧИКА:
{$msComment}";
}
$txt = "
НОВЫЙ ЗАКЗАЗ #{$orderNum}
--------------------------------
ЗАКАЗЧИК: {$msReceiver}
--------------------------------
СПОСОБ ОПЛАТЫ: {$pay_name}
--------------------------------
ИТОГО: {$total_cost} руб.
--------------------------------
В ТОМ ЧИСЛЕ:
{$design_txt}{$layout_txt}{$setting_txt}{$marketing_txt}{$other_txt}{$expense_txt}
--------------------------------
НОМЕР ДЛЯ СВЯЗИ:
{$msPhone}
--------------------------------
ССЫЛКА НА СМЕТУ:
{$linkToEstimate}
--------------------------------
СОСТАВ ЗАКАЗА:
{$products}{$comment}";
       
$txt = urlencode($txt);
$url = "https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&text={$txt}";
$ch = curl_init();
curl_setopt_array($ch, array(CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true));
$result = curl_exec($ch);
curl_close($ch);
Как получить токен и идентификатор чата написано в интернете.
Артур Шевченко
27 апреля 2022, 10:37
0
Понятно, я сразу не обратил внимания, extended это одно поле формата json поэтому ты через хук можешь получить только его, обратиться напрямую к id_club нельзя, т.к. того поля у пользователя нет.
Артур Шевченко
26 апреля 2022, 22:19
0
О каких хуках речь? Что за доп? Данные какого пользователя ты хочешь получить текущего или произвольного? В целом метод getValue в FormIt возвращает поля формы, которую т отправляешь.
Артур Шевченко
26 апреля 2022, 21:32
0
Делаешь диапазон, смотришь как это выглядит в get-параметрах, потом по совету @Алексей Смирнов путём хитрых манипуляций, скорее всего через отдельный сниппет, формируешь массив чекбоксов и выводишь его. ЛИБО пишешь скрипт для Console который пройдёт по всем ресурсам и добавить в созданное тобой поле диапазон. Т.е. ты задашь массив диапазонов и проверишь в какой из них каждый ресурс попадает и заполнишь свое поле. Например. Есть ресурс у которого значение мощности 11 и ты в скрипте проверяешь в какой диапазон это значение попадает, а затем это значение записываешь в отдельное поле и фильтруешь уже не по мощности, а по диапазону. Надеюсь понятно объяснил. Я так на одном своём сайте делал. Дополнительно ещё плагин написал, который при создании ресурса сразу определяет в какой диапазон он попадает.
Артур Шевченко
26 апреля 2022, 16:25
0
Ты сам ответил на свой вопрос))) Нужно сделать фильтрацию по диапазону чисел вместо чекбоксов.
Артур Шевченко
26 апреля 2022, 13:16
+1
Сортировка по menuindex работает только на одном уровне вложенности, а ресурсы в первого уровня всегда будут выводиться раньше. pdoMenu он для вывода древовидной структуры, попробуй pdoResources.
Артур Шевченко
24 апреля 2022, 18:58
0
LazyLoad это js, к тому моменту как он начинает работать, все картинки уже сгенерированы. У себя я для тэга source тоже поставил lazyload и всё вроде как работает корректно.
Артур Шевченко
23 апреля 2022, 23:16
0
Ну не знаю, я бы наверное вообще отказался от вызова сниппета в своём сниппите.
Артур Шевченко
23 апреля 2022, 22:30
0
А весь код покажи.
Артур Шевченко
23 апреля 2022, 21:58
0
Хостер не мог забанить?
Артур Шевченко
23 апреля 2022, 21:55
0
За исключением того о чём я писал выше, ошибок я не вижу. vznos это точно ТВ?
Артур Шевченко
23 апреля 2022, 21:12
0
А вот это настройку поменять не вариант ms2_weight_format?
Артур Шевченко
23 апреля 2022, 21:09
0
А в журнале ошибок ошибки есть? А папку спам проверяли?
Артур Шевченко
23 апреля 2022, 20:47
0
Я думаю дело в
$params['where'] = 'pagetitle='.$stag.'';
У тебя тут строка, а должен быть или масcив или json