Jump to content

Recommended Posts

Здравствуйте, уважаемые.

Кому не лень, если не трудно - разъясните, как организовано добавление заказа из админки (тыком в кнопку Добавить заказ). При добавлении заказа таким способом, после заполнения всех полей формы (собственно товаров и деталей заказа), нажатием в кнопку Сохранить заполняются сразу две таблицы в БД - s_orders и s_purchases, причем связанные по первичным ключам. В толк не возьму, как такое возможно организовать?

Когда это делается в два приема - сначала создание корзины - в s_purchases записываются все товары в заказе, вторым шагом - создание заказа, когда можно связать id  заказа с товарами - это понятно как сделать. Но в один шаг - не пойму. Несколько дней уже разбирать пытаюсь код - вот додумался, что видимо как-то через запись в сессию, но тем не менее механизма понять не могу. Если не сложно - напишите в двух словах как это делается и какие файлы в simpla cms участвуют в этом чуде ))

Link to post
Share on other sites

Как бы вообще не понятно, что там чудесного??

	    	// Добавляем заказ в базу
	    	$order_id = $this->orders->add_order($order);
	    	$_SESSION['order_id'] = $order_id;
	    	
	    	// Если использовали купон, увеличим количество его использований
	    	if($cart->coupon)
	    		$this->coupons->update_coupon($cart->coupon->id, array('usages'=>$cart->coupon->usages+1));
	    	
	    	// Добавляем товары к заказу
	    	foreach($this->request->post('amounts') as $variant_id=>$amount)
	    	{
	    		$this->orders->add_purchase(array('order_id'=>$order_id, 'variant_id'=>intval($variant_id), 'amount'=>intval($amount)));
	    	}
	    	$order = $this->orders->get_order($order_id);

Вот так добавляется заказ в view/CartView.php

			if(empty($order->id))
			{
  				$order->id = $this->orders->add_order($order);
				$this->design->assign('message_success', 'added');
  			}

Это создание заказа в simpla/OrderAdmin.php

				// Покупки
				$purchases = array();
				if($this->request->post('purchases'))
				{
					foreach($this->request->post('purchases') as $n=>$va) foreach($va as $i=>$v)
					{
						if(empty($purchases[$i]))
							$purchases[$i] = new stdClass;
						$purchases[$i]->$n = $v;
					}
				}		
				$posted_purchases_ids = array();
				foreach($purchases as $purchase)
				{
					$variant = $this->variants->get_variant($purchase->variant_id);

					if(!empty($purchase->id))
						if(!empty($variant))
							$this->orders->update_purchase($purchase->id, array('variant_id'=>$purchase->variant_id, 'variant_name'=>$variant->name, 'sku'=>$variant->sku,'price'=>$purchase->price, 'amount'=>$purchase->amount));
						else
							$this->orders->update_purchase($purchase->id, array('price'=>$purchase->price, 'amount'=>$purchase->amount));
					elseif(!$purchase->id = $this->orders->add_purchase(array('order_id'=>$order->id, 'variant_id'=>$purchase->variant_id, 'variant_name'=>$variant->name, 'price'=>$purchase->price, 'amount'=>$purchase->amount)))
						$this->design->assign('message_error', 'error_closing');
						
					$posted_purchases_ids[] = $purchase->id;			
				}

А это добавление покупок к нему

Link to post
Share on other sites

Если конкретно интересует логика, то сначала создается запись в таблице orders, а потом добавляются записи в таблицу purchases, связанные по id

Link to post
Share on other sites
В 12.11.2024 в 17:56, Kosjak76 сказал:

Если конкретно интересует логика, то сначала создается запись в таблице orders, а потом добавляются записи в таблицу purchases, связанные по id

С логикой-то все в понятно. Я понять не могу, в какой момент (ПРИ СОЗДАНИИ ЗАКАЗА ВРУЧНУЮ, ИЗ АДМИНКИ) создается запись в таблице orders, чтобы после этого order_id записать в таблицу purchases. Не мог в коде найти этого. Я правильно понял - это вот в выше приведенном:

$order_id = $this->orders->add_order($order);
	    	$_SESSION['order_id'] = $order_id;

 

А отправляется на сервер этот запрос в какой момент? При нажатии кнопки создать заказ? или уже при сохранении заказа?

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...