Мой код в сниппете msGetOrder исполняется несколько раз (3 раза)

Доброе утро, знатоки Modx, у меня вопрос такого характера, дорабатываю функционал оформления заказа а именно интеграция с Frontpad.

Свой код добавляю в сниппет msGetOrder который выполняется после нажатия кнопки оформить заказ, но мой код исполняется несколько раз (3 раза), в следствии чего в Frontpad приходят сразу 3 одинаковых заказа.

if (!empty($toPlaceholder)) {
    $modx->setPlaceholder($toPlaceholder, $output);
} 
else {
    
	// Код находится в данном месте 		
			
    return $output;
}
Не могу разобраться почему это происходит, подскажите в чем причина.

Спасибо.
Владимир
16 июня 2019, 06:57
modx.pro
1 020
0

Комментарии: 10

Баха Волков
16 июня 2019, 18:36
+1
Может и не надо в сниппет эту логику добавлять, может лучше в плагин?
    Алексей Ерохин
    17 июня 2019, 04:57
    0
    Это сниппет вызывается 1 раз после оформления заказа (на странице где в get-параметрах номер заказа)
    И вызывается при отправке писем (пользователю и менеджерам).
    Как вам уже посоветовали — делайте свой функционал в плагине docs.modx.pro/komponentyi/minishop2/razrabotka/sobyitiya
      Владимир
      17 июня 2019, 17:20
      0
      Не пинайте сильно, первый раз можно сказать имею дело с Modx.

      Вот я набросал вариант с использованием события:

      case 'msOnCreateOrder':
      
           $msAddress = $msOrder->getOne('Address');
           $msReceiver = $msAddress->get('receiver');
           $msRoom = $msAddress->get('room');
           $msBuilding = $msAddress->get('building');
           $msComment = $msAddress->get('comment');
           $msPhone = $msAddress->get('phone');
      
           $post_url = "https://app.frontpad.ru/api/index.php?new_order";
           $param['secret'] = "";
           $gorod = 'Город';
           $param['street'] = $gorod.', '.$msAddress;
           $param['home'] = 'дом '.$msBuilding ;
           $param['apart']	= 'кв '.$msRoom;
           $param['phone'] = $msPhone;
           $param['descr']	= $msComment;
           $param['descr'] .= ' Оплата наличными. ';
           $param['pay'] = 1;
           $param['name'] = $msReceiver;
      
           foreach ($param as $key => $value) {
              $data .= "&".$key."=".$value;
           }
      
           foreach ($msOrder->getMany('Products') as $product) {
               $options = $modx->getObject('msProductData', $product->get('product_id'));
               $data .= "&product[]=". $options->get('article')."";
               $data .= "&product_kol[]=".$product->get('count')."";
           }
      
           $ch = curl_init();
             curl_setopt($ch, CURLOPT_URL, $post_url);
             curl_setopt($ch, CURLOPT_FAILONERROR, 1);
             curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
             curl_setopt($ch, CURLOPT_TIMEOUT, 30);
             curl_setopt($ch, CURLOPT_POST, 1);
             curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
             $result = curl_exec($ch);
             curl_close($ch);
      
      break;
      Вставил я его в плагин miniShop2 после события case 'msOnChangeOrderStatus' ну и на выходе имею 2 дубля заказа, уже не 3 )))
        Николай Савин
        17 июня 2019, 17:35
        +1
        Выглядит правдоподобно. Но вам нужно создавать свой собственный плагин. Иначе при обновлении miniShop может затереть ваши изменения.
          Баха Волков
          17 июня 2019, 17:35
          0
          А мы и не пинаем вовсе.

          Советую не трогать плагины и сниппеты компонентов, потому как после обновления весь ваш код затрется.

          Вам нужно: Создать плагин, перейти на вкладку события и выбрать нужные вам события и уже со спокойной душой написать свой код
            Владимир
            17 июня 2019, 17:42
            0
            Так, ну с тем что выделить в отдельный плагин, я доки почитаю, сделаю. Я не могу понять почему дублируется отправление.
              Баха Волков
              17 июня 2019, 17:48
              0
              Давайте для начала перенесите логику в отдельный плагин, проверьте и посмотрим
          Владимир
          17 июня 2019, 21:50
          0
          Помоему дело не в плагине, нашел я вот сторонний плагин modstore.pro/packages/import-and-export/frontpadapi, история та же в frontpad приходит сразу 2 одинаковых заказа. Что еще может влиять на повторную отправку?

          Ну не может быть что и плагин другого разработчика быть с такой же бедой что и самописанный?
            Владимир
            17 июня 2019, 21:51
            0
            Дата, номер заказа абсолютно идентичные прилетают.
              Владимир
              18 июня 2019, 18:57
              0
              Проблема решилась обновлением minishop до версии 2-2.4.18.
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                10