xikarx Posted November 12 Report Share Posted November 12 Здравствуйте, уважаемые. Кому не лень, если не трудно - разъясните, как организовано добавление заказа из админки (тыком в кнопку Добавить заказ). При добавлении заказа таким способом, после заполнения всех полей формы (собственно товаров и деталей заказа), нажатием в кнопку Сохранить заполняются сразу две таблицы в БД - s_orders и s_purchases, причем связанные по первичным ключам. В толк не возьму, как такое возможно организовать? Когда это делается в два приема - сначала создание корзины - в s_purchases записываются все товары в заказе, вторым шагом - создание заказа, когда можно связать id заказа с товарами - это понятно как сделать. Но в один шаг - не пойму. Несколько дней уже разбирать пытаюсь код - вот додумался, что видимо как-то через запись в сессию, но тем не менее механизма понять не могу. Если не сложно - напишите в двух словах как это делается и какие файлы в simpla cms участвуют в этом чуде )) Quote Link to post Share on other sites
Kosjak76 Posted November 12 Report Share Posted November 12 Как бы вообще не понятно, что там чудесного?? // Добавляем заказ в базу $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; } А это добавление покупок к нему Quote Link to post Share on other sites
Kosjak76 Posted November 12 Report Share Posted November 12 Если конкретно интересует логика, то сначала создается запись в таблице orders, а потом добавляются записи в таблицу purchases, связанные по id Quote Link to post Share on other sites
xikarx Posted November 14 Author Report Share Posted November 14 В 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; А отправляется на сервер этот запрос в какой момент? При нажатии кнопки создать заказ? или уже при сохранении заказа? Quote Link to post Share on other sites
Kosjak76 Posted November 14 Report Share Posted November 14 При сохранении заказа Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.