Как вставить данные из $purchases в array



  • Добрый день.
    Произвожу интеграцию сервиса Яндекс доставка с SHK3. Данные типа номер заказа, контактные данные, общая сумма заказа получилось интегрировать. Проблема возникла с передачей списка покупок.
    Вот как беру данные одного заказа одного товара

    $purchases = $modx->getCollection('shk_purchases', array('order_id' => $order->id));
    foreach ($purchases as $p) {
       $tovar = $p->get('name');
       $tovprice = $p->get('price');
       $count = $p->get('count');
    }
    

    Вот куда его необходимо вставить

    $data['order_items'] = array
        (
            0 => array
            (
    		'orderitem_article' => '', //Артикул товара. Значение содержится в массиве order_items. Example: GHY1234. String
            'orderitem_name' => $tovar, //Наименование товара. Значение содержится в массиве order_items. Example: Товар. String
            'orderitem_quantity' => $count, //Количество товара. Значение содержится в массиве order_items. Example: 1. String
            'orderitem_cost' => $tovprice, //Стоимость одной единицы товара. Значение содержится в массиве order_items. Example: 1000.
            ),        
        );
    

    Без проблем передаю информацию если товар один. Но если в заказе 2 товара или более, то передается информация только о последнем товаре. Я понимаю что проблема в неправильной конструкции массива. Я не силен в массивах и прошу вас помочь.
    Как правильно вставить в массив $data['order_items'] информацию о всех товарах из заказа?



  • я вот так делал layer push для GA, вызов последнего заказа

    <?php $modx->addPackage('shopkeeper3', $modx->getOption('core_path').'components/shopkeeper3/model/');
    $order_data = array();
    $response = $modx->runProcessor('getorder',
    			array(
    			     'order_id' => $modx->getPlaceholder('shk.id'),
    			    'date_format' => 'H:i:s d/m/Y'
    			),
    array('processors_path' => MODX_CORE_PATH . 'components/shopkeeper3/processors/mgr/') );
    
     if( !$response->isError() && $result = $response->getResponse()){
                $order_data = $result['object'];
            }
     ?>
    
    
    <script>
    	dataLayer.push({
       'event': 'zakaz',
       'transactionId': '<?=$order_data['id']?>', 
       'transactionTotal': '<?=$order_data['price']?>',
       'transactionShipping': '<?=$order_data['delivery_price']?>',
       'transactionProducts': [
    
       <?php foreach ($order_data['purchases'] as $purchas) {
    
      if (!next($order_data['purchases'])) { ?>
    
    {
           'sku': '<?=$purchas['name']?>', 
           'name': '<?=$purchas['longtitle']?>',
           'category': '<?php  $category = $modx->runSnippet('getResourceField',
                array(
                    'id' => $modx->runSnippet('UltimateParent', array ('id' => $purchas['parent'], 'topLevel'=> 3)),
    				'field'=> 'menutitle'
    
                ));
    			echo $category;?>', 
           'price': '<?=$purchas['price']?>',
           'quantity': '<?=$purchas['count']?>' 
    
    }
    
     <?php }
       else { ?>
    
    {
           'sku': '<?=$purchas['name']?>', 
           'name': '<?=$purchas['longtitle']?>', 
           'category': '<?php  $category = $modx->runSnippet('getResourceField',
                array(
                    'id' => $parent = $modx->runSnippet('UltimateParent', array ('id' => $purchas['parent'], 'topLevel'=> 3)),
    				'field'=> 'menutitle'
    
                ));
    			echo $category;?>',
           'price': '<?=$purchas['price']?>',
           'quantity': '<?=$purchas['count']?>'
    
    },
    
    <?php } } ?>
    
       ]
    });
    </script>
     <?php return $response; ?>```


Последние темы

Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.