rdpv Опубліковано: 29 серпня 2018 Share Опубліковано: 29 серпня 2018 (змінено) Версия ocStore 2.3 Делаю расчет цены по площади, создал две опции Ширина, Высота тип Текст в product.tpl добавил под вывод цены <h2><?php echo $price; ?></h2> <input type="hidden" id="cena" name="cena" value="<?php echo (float)$price; ?>"> <h2><div id="rash"></div></h2> <input type="button" value="Рассчитать" onclick="addition();"><br> в раздел с опциями добавил скрытый custom_price <div id="product"> <?php if ($options) { ?> <hr> <input type="hidden" id="custom_price" name="custom_price" value=""> и в конец добавил скрипт расчета цены по площади <script type="text/javascript"> function addition() { var shir = parseInt(document.getElementById('input-option25').value); var vis = parseInt(document.getElementById('input-option24').value); var cena = parseInt(document.getElementById('cena').value); if (isNaN(shir)==true) shir=0; if (isNaN(vis)==true) vis=0; var plosh = ((shir * vis)/100)*cena; document.getElementById('custom_price'); document.getElementById('rash').innerHTML = "Расчетная цена: "+plosh; custom_price.value = plosh; } </script> в controller\checkout\cart.php в метод public function add() добавил public function add() { $this->load->language('checkout/cart'); $json = array(); if (isset($this->request->post['product_id'])) { $product_id = (int)$this->request->post['product_id']; } else { $product_id = 0; } $this->load->model('catalog/product'); $product_info = $this->model_catalog_product->getProduct($product_id); if ($product_info) { if (isset($this->request->post['quantity']) && ((int)$this->request->post['quantity'] >= $product_info['minimum'])) { $quantity = (int)$this->request->post['quantity']; } else { $quantity = $product_info['minimum'] ? $product_info['minimum'] : 1; } if (isset($this->request->post['option'])) { $option = array_filter($this->request->post['option']); } else { $option = array(); } if(isset($this->request->post['custom_price'])) { $custom_price = $this->request->post['custom_price']; } else { $custom_price = false; } ниже добавил if (!$json) { $this->cart->add($this->request->post['product_id'], $quantity, $option, $recurring_id, $custom_price); в /system/library/cart/cart.php добавил public function add($product_id, $quantity = 1, $option = array(), $recurring_id = 0, $custom_price= false) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); if (!$query->row['total']) { $this->db->query("INSERT " . DB_PREFIX . "cart SET api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "', customer_id = '" . (int)$this->customer->getId() . "', session_id = '" . $this->db->escape($this->session->getId()) . "', product_id = '" . (int)$product_id . "', recurring_id = '" . (int)$recurring_id . "', `option` = '" . $this->db->escape(json_encode($option)) . "', quantity = '" . (int)$quantity . "', date_added = NOW()"); } else { $this->db->query("UPDATE " . DB_PREFIX . "cart SET quantity = (quantity + " . (int)$quantity . ") WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); } if($custom_price) { $this->session->data['custom_price'] = $custom_price; } } в метод public function getProducts() { if ($this->session->data['custom_price']) { $price = $this->session->data['custom_price']; } else { $price = $product_query->row['price']; } Цена в корзине меняется согласно расчетам но вот при добавлении другого товара в корзине цены всех товаров меняются на рассчитанную подскажите куда копать заранее благодарен. Змінено 29 серпня 2018 користувачем rdpv Надіслати Поділитися на інших сайтах More sharing options...
fanatic Опубліковано: 29 серпня 2018 Share Опубліковано: 29 серпня 2018 1 час назад, rdpv сказал: подскажите куда копать 1 час назад, rdpv сказал: if ($this->session->data['custom_price']) { $price = $this->session->data['custom_price']; //тут собака зарыта } else { $price = $product_query->row['price']; } нужно рассчитывать цену исходя из опций Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 29 серпня 2018 Share Опубліковано: 29 серпня 2018 1 час назад, rdpv сказал: $this->session->data['custom_price'] Что это? Откуда? Надіслати Поділитися на інших сайтах More sharing options... fanatic Опубліковано: 29 серпня 2018 Share Опубліковано: 29 серпня 2018 2 минуты назад, chukcha сказал: Что это? Откуда? он при добавлении товара в корзину кинул в сессиию рассчитанную стоимость товара. 1 час назад, rdpv сказал: if($custom_price) { $this->session->data['custom_price'] = $custom_price; } а в getProduct пихает ее всем товарам Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 8 hours ago, fanatic said: он при добавлении товара в корзину кинул в сессиию рассчитанную стоимость товара. а в getProduct пихает ее всем товарам Я понимаю что она подставляется всем товарам но не понимаю как ее указать конкретному товару. Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Если делать через опции то тогда каким образом увеличить цену при опции "текстовое поле"? } elseif ($option_query->row['type'] == 'text' || $option_query->row['type'] == 'textarea' || $option_query->row['type'] == 'file' || $option_query->row['type'] == 'date' || $option_query->row['type'] == 'datetime' || $option_query->row['type'] == 'time') { $option_data[] = array( 'product_option_id' => $product_option_id, 'product_option_value_id' => '', 'option_id' => $option_query->row['option_id'], 'option_value_id' => '', 'name' => $option_query->row['name'], 'value' => $value, 'type' => $option_query->row['type'], 'quantity' => '', 'subtract' => '', 'price' => '', 'price_prefix' => '', 'points' => '', 'points_prefix' => '', 'weight' => '', 'weight_prefix' => '' ); пробовал добавлять в значение price любую цифру и в prefix ставил "плюс", но она не добавляется к стоимости товара в корзине. Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Порыл в интеренете и нашел такой код public function add($product_id, $quantity = 1, $option = array(), $recurring_id = 0, $custom_price = false) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); if (!$query->row['total']) { $this->db->query("INSERT " . DB_PREFIX . "cart SET api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "', customer_id = '" . (int)$this->customer->getId() . "', session_id = '" . $this->db->escape($this->session->getId()) . "', product_id = '" . (int)$product_id . "', recurring_id = '" . (int)$recurring_id . "', `option` = '" . $this->db->escape(json_encode($option)) . "', quantity = '" . (int)$quantity . "', date_added = NOW()"); } else { $this->db->query("UPDATE " . DB_PREFIX . "cart SET quantity = (quantity + " . (int)$quantity . ") WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); } if($custom_price) { if(!isset($this->session->data['cart']['custom_price'])) { $this->session->data['cart']['custom_price'] = array(); } $this->session->data['cart']['custom_price'][$key] = $custom_price; } а в getProducts после $price = $product_query->row['price']; $price = $product_query->row['price']; if(isset($this->session->data['custom_price'][$key])) { $this->data[$key]['price'] = $this->session->data['custom_price'][$key]; } Но в таком случае вываливает ошибки на $key Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 169Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: String offset cast occurred inpublic_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key inpublic_html/system/library/cart/cart.php on line 169Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: String offset cast occurred in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key inpublic_html/system/library/cart/cart.php on line 169Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: String offset cast occurred in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170 Надіслати Поділитися на інших сайтах More sharing options... fanatic Опубліковано: 30 серпня 2018 Share Опубліковано: 30 серпня 2018 можно как-то так в getProducts public function getProducts() { $product_data = array(); $cart_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "'"); $option_width = ''; $option_height = ''; foreach ($cart_query->rows as $cart) { $stock = true; } elseif ($option_query->row['type'] == 'text' || $option_query->row['type'] == 'textarea' || $option_query->row['type'] == 'file' || $option_query->row['type'] == 'date' || $option_query->row['type'] == 'datetime' || $option_query->row['type'] == 'time') { switch($option_query->row['name']){ case 'длина': $option_width = $value; break; case 'ширина': $option_height = $value; break; } $option_data[] = array( 'product_option_id' => $product_option_id, 'product_option_value_id' => '', $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); if ($product_discount_query->num_rows) { $price = $product_discount_query->row['price']; } // Product Specials $product_special_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1"); if ($product_special_query->num_rows) { $price = $product_special_query->row['price']; } if(!empty($option_width) && !empty($option_height)){ $price = ($option_width * $option_height)*$price; } Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Спасибо все получилось! Но пострадали товары у которых нет опций Ширина и Высота как проверить на наличие опций ширина и высота и если отсутствуют то ставить просто цену? Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 if(!empty($option_width) && !empty($option_height)){ $price = (($option_width * $option_height)/100)*$price; } else { $price = $product_query->row['price']; } Условие не помогает Надіслати Поділитися на інших сайтах More sharing options... fanatic Опубліковано: 30 серпня 2018 Share Опубліковано: 30 серпня 2018 15 минут назад, rdpv сказал: Но пострадали товары у которых нет опций да, я немного протупил перенесите $option_width = ''; $option_height = ''; сюда if ($product_query->num_rows && ($cart['quantity'] > 0)) { $option_price = 0; $option_points = 0; $option_weight = 0; $option_data = array(); $option_width = ''; $option_height = ''; Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Спасибо большое! Теперь все работает! Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 31 серпня 2018 Автор Share Опубліковано: 31 серпня 2018 On 8/29/2018 at 11:17 PM, rdpv said: Версия ocStore 2.3 Делаю расчет цены по площади, создал две опции Ширина, Высота тип Текст в product.tpl добавил под вывод цены <h2><?php echo $price; ?></h2> <input type="hidden" id="cena" name="cena" value="<?php echo (float)$price; ?>"> <h2><div id="rash"></div></h2> <input type="button" value="Рассчитать" onclick="addition();"><br> в раздел с опциями добавил скрытый custom_price <div id="product"> <?php if ($options) { ?> <hr> <input type="hidden" id="custom_price" name="custom_price" value=""> и в конец добавил скрипт расчета цены по площади <script type="text/javascript"> function addition() { var shir = parseInt(document.getElementById('input-option25').value); var vis = parseInt(document.getElementById('input-option24').value); var cena = parseInt(document.getElementById('cena').value); if (isNaN(shir)==true) shir=0; if (isNaN(vis)==true) vis=0; var plosh = ((shir * vis)/100)*cena; document.getElementById('custom_price'); document.getElementById('rash').innerHTML = "Расчетная цена: "+plosh; custom_price.value = plosh; } </script> в controller\checkout\cart.php в метод public function add() добавил public function add() { $this->load->language('checkout/cart'); $json = array(); if (isset($this->request->post['product_id'])) { $product_id = (int)$this->request->post['product_id']; } else { $product_id = 0; } $this->load->model('catalog/product'); $product_info = $this->model_catalog_product->getProduct($product_id); if ($product_info) { if (isset($this->request->post['quantity']) && ((int)$this->request->post['quantity'] >= $product_info['minimum'])) { $quantity = (int)$this->request->post['quantity']; } else { $quantity = $product_info['minimum'] ? $product_info['minimum'] : 1; } if (isset($this->request->post['option'])) { $option = array_filter($this->request->post['option']); } else { $option = array(); } if(isset($this->request->post['custom_price'])) { $custom_price = $this->request->post['custom_price']; } else { $custom_price = false; } ниже добавил if (!$json) { $this->cart->add($this->request->post['product_id'], $quantity, $option, $recurring_id, $custom_price); в /system/library/cart/cart.php добавил public function add($product_id, $quantity = 1, $option = array(), $recurring_id = 0, $custom_price= false) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); if (!$query->row['total']) { $this->db->query("INSERT " . DB_PREFIX . "cart SET api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "', customer_id = '" . (int)$this->customer->getId() . "', session_id = '" . $this->db->escape($this->session->getId()) . "', product_id = '" . (int)$product_id . "', recurring_id = '" . (int)$recurring_id . "', `option` = '" . $this->db->escape(json_encode($option)) . "', quantity = '" . (int)$quantity . "', date_added = NOW()"); } else { $this->db->query("UPDATE " . DB_PREFIX . "cart SET quantity = (quantity + " . (int)$quantity . ") WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); } if($custom_price) { $this->session->data['custom_price'] = $custom_price; } } в метод public function getProducts() { if ($this->session->data['custom_price']) { $price = $this->session->data['custom_price']; } else { $price = $product_query->row['price']; } Цена в корзине меняется согласно расчетам но вот при добавлении другого товара в корзине цены всех товаров меняются на рассчитанную подскажите куда копать заранее благодарен. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам [Решено] Изменение цены по формуле Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
chukcha Опубліковано: 29 серпня 2018 Share Опубліковано: 29 серпня 2018 1 час назад, rdpv сказал: $this->session->data['custom_price'] Что это? Откуда? Надіслати Поділитися на інших сайтах More sharing options... fanatic Опубліковано: 29 серпня 2018 Share Опубліковано: 29 серпня 2018 2 минуты назад, chukcha сказал: Что это? Откуда? он при добавлении товара в корзину кинул в сессиию рассчитанную стоимость товара. 1 час назад, rdpv сказал: if($custom_price) { $this->session->data['custom_price'] = $custom_price; } а в getProduct пихает ее всем товарам Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 8 hours ago, fanatic said: он при добавлении товара в корзину кинул в сессиию рассчитанную стоимость товара. а в getProduct пихает ее всем товарам Я понимаю что она подставляется всем товарам но не понимаю как ее указать конкретному товару. Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Если делать через опции то тогда каким образом увеличить цену при опции "текстовое поле"? } elseif ($option_query->row['type'] == 'text' || $option_query->row['type'] == 'textarea' || $option_query->row['type'] == 'file' || $option_query->row['type'] == 'date' || $option_query->row['type'] == 'datetime' || $option_query->row['type'] == 'time') { $option_data[] = array( 'product_option_id' => $product_option_id, 'product_option_value_id' => '', 'option_id' => $option_query->row['option_id'], 'option_value_id' => '', 'name' => $option_query->row['name'], 'value' => $value, 'type' => $option_query->row['type'], 'quantity' => '', 'subtract' => '', 'price' => '', 'price_prefix' => '', 'points' => '', 'points_prefix' => '', 'weight' => '', 'weight_prefix' => '' ); пробовал добавлять в значение price любую цифру и в prefix ставил "плюс", но она не добавляется к стоимости товара в корзине. Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Порыл в интеренете и нашел такой код public function add($product_id, $quantity = 1, $option = array(), $recurring_id = 0, $custom_price = false) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); if (!$query->row['total']) { $this->db->query("INSERT " . DB_PREFIX . "cart SET api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "', customer_id = '" . (int)$this->customer->getId() . "', session_id = '" . $this->db->escape($this->session->getId()) . "', product_id = '" . (int)$product_id . "', recurring_id = '" . (int)$recurring_id . "', `option` = '" . $this->db->escape(json_encode($option)) . "', quantity = '" . (int)$quantity . "', date_added = NOW()"); } else { $this->db->query("UPDATE " . DB_PREFIX . "cart SET quantity = (quantity + " . (int)$quantity . ") WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); } if($custom_price) { if(!isset($this->session->data['cart']['custom_price'])) { $this->session->data['cart']['custom_price'] = array(); } $this->session->data['cart']['custom_price'][$key] = $custom_price; } а в getProducts после $price = $product_query->row['price']; $price = $product_query->row['price']; if(isset($this->session->data['custom_price'][$key])) { $this->data[$key]['price'] = $this->session->data['custom_price'][$key]; } Но в таком случае вываливает ошибки на $key Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 169Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: String offset cast occurred inpublic_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key inpublic_html/system/library/cart/cart.php on line 169Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: String offset cast occurred in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key inpublic_html/system/library/cart/cart.php on line 169Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: String offset cast occurred in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170 Надіслати Поділитися на інших сайтах More sharing options... fanatic Опубліковано: 30 серпня 2018 Share Опубліковано: 30 серпня 2018 можно как-то так в getProducts public function getProducts() { $product_data = array(); $cart_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "'"); $option_width = ''; $option_height = ''; foreach ($cart_query->rows as $cart) { $stock = true; } elseif ($option_query->row['type'] == 'text' || $option_query->row['type'] == 'textarea' || $option_query->row['type'] == 'file' || $option_query->row['type'] == 'date' || $option_query->row['type'] == 'datetime' || $option_query->row['type'] == 'time') { switch($option_query->row['name']){ case 'длина': $option_width = $value; break; case 'ширина': $option_height = $value; break; } $option_data[] = array( 'product_option_id' => $product_option_id, 'product_option_value_id' => '', $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); if ($product_discount_query->num_rows) { $price = $product_discount_query->row['price']; } // Product Specials $product_special_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1"); if ($product_special_query->num_rows) { $price = $product_special_query->row['price']; } if(!empty($option_width) && !empty($option_height)){ $price = ($option_width * $option_height)*$price; } Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Спасибо все получилось! Но пострадали товары у которых нет опций Ширина и Высота как проверить на наличие опций ширина и высота и если отсутствуют то ставить просто цену? Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 if(!empty($option_width) && !empty($option_height)){ $price = (($option_width * $option_height)/100)*$price; } else { $price = $product_query->row['price']; } Условие не помогает Надіслати Поділитися на інших сайтах More sharing options... fanatic Опубліковано: 30 серпня 2018 Share Опубліковано: 30 серпня 2018 15 минут назад, rdpv сказал: Но пострадали товары у которых нет опций да, я немного протупил перенесите $option_width = ''; $option_height = ''; сюда if ($product_query->num_rows && ($cart['quantity'] > 0)) { $option_price = 0; $option_points = 0; $option_weight = 0; $option_data = array(); $option_width = ''; $option_height = ''; Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Спасибо большое! Теперь все работает! Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 31 серпня 2018 Автор Share Опубліковано: 31 серпня 2018 On 8/29/2018 at 11:17 PM, rdpv said: Версия ocStore 2.3 Делаю расчет цены по площади, создал две опции Ширина, Высота тип Текст в product.tpl добавил под вывод цены <h2><?php echo $price; ?></h2> <input type="hidden" id="cena" name="cena" value="<?php echo (float)$price; ?>"> <h2><div id="rash"></div></h2> <input type="button" value="Рассчитать" onclick="addition();"><br> в раздел с опциями добавил скрытый custom_price <div id="product"> <?php if ($options) { ?> <hr> <input type="hidden" id="custom_price" name="custom_price" value=""> и в конец добавил скрипт расчета цены по площади <script type="text/javascript"> function addition() { var shir = parseInt(document.getElementById('input-option25').value); var vis = parseInt(document.getElementById('input-option24').value); var cena = parseInt(document.getElementById('cena').value); if (isNaN(shir)==true) shir=0; if (isNaN(vis)==true) vis=0; var plosh = ((shir * vis)/100)*cena; document.getElementById('custom_price'); document.getElementById('rash').innerHTML = "Расчетная цена: "+plosh; custom_price.value = plosh; } </script> в controller\checkout\cart.php в метод public function add() добавил public function add() { $this->load->language('checkout/cart'); $json = array(); if (isset($this->request->post['product_id'])) { $product_id = (int)$this->request->post['product_id']; } else { $product_id = 0; } $this->load->model('catalog/product'); $product_info = $this->model_catalog_product->getProduct($product_id); if ($product_info) { if (isset($this->request->post['quantity']) && ((int)$this->request->post['quantity'] >= $product_info['minimum'])) { $quantity = (int)$this->request->post['quantity']; } else { $quantity = $product_info['minimum'] ? $product_info['minimum'] : 1; } if (isset($this->request->post['option'])) { $option = array_filter($this->request->post['option']); } else { $option = array(); } if(isset($this->request->post['custom_price'])) { $custom_price = $this->request->post['custom_price']; } else { $custom_price = false; } ниже добавил if (!$json) { $this->cart->add($this->request->post['product_id'], $quantity, $option, $recurring_id, $custom_price); в /system/library/cart/cart.php добавил public function add($product_id, $quantity = 1, $option = array(), $recurring_id = 0, $custom_price= false) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); if (!$query->row['total']) { $this->db->query("INSERT " . DB_PREFIX . "cart SET api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "', customer_id = '" . (int)$this->customer->getId() . "', session_id = '" . $this->db->escape($this->session->getId()) . "', product_id = '" . (int)$product_id . "', recurring_id = '" . (int)$recurring_id . "', `option` = '" . $this->db->escape(json_encode($option)) . "', quantity = '" . (int)$quantity . "', date_added = NOW()"); } else { $this->db->query("UPDATE " . DB_PREFIX . "cart SET quantity = (quantity + " . (int)$quantity . ") WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); } if($custom_price) { $this->session->data['custom_price'] = $custom_price; } } в метод public function getProducts() { if ($this->session->data['custom_price']) { $price = $this->session->data['custom_price']; } else { $price = $product_query->row['price']; } Цена в корзине меняется согласно расчетам но вот при добавлении другого товара в корзине цены всех товаров меняются на рассчитанную подскажите куда копать заранее благодарен. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам [Решено] Изменение цены по формуле Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
fanatic Опубліковано: 29 серпня 2018 Share Опубліковано: 29 серпня 2018 2 минуты назад, chukcha сказал: Что это? Откуда? он при добавлении товара в корзину кинул в сессиию рассчитанную стоимость товара. 1 час назад, rdpv сказал: if($custom_price) { $this->session->data['custom_price'] = $custom_price; } а в getProduct пихает ее всем товарам Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 8 hours ago, fanatic said: он при добавлении товара в корзину кинул в сессиию рассчитанную стоимость товара. а в getProduct пихает ее всем товарам Я понимаю что она подставляется всем товарам но не понимаю как ее указать конкретному товару. Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Если делать через опции то тогда каким образом увеличить цену при опции "текстовое поле"? } elseif ($option_query->row['type'] == 'text' || $option_query->row['type'] == 'textarea' || $option_query->row['type'] == 'file' || $option_query->row['type'] == 'date' || $option_query->row['type'] == 'datetime' || $option_query->row['type'] == 'time') { $option_data[] = array( 'product_option_id' => $product_option_id, 'product_option_value_id' => '', 'option_id' => $option_query->row['option_id'], 'option_value_id' => '', 'name' => $option_query->row['name'], 'value' => $value, 'type' => $option_query->row['type'], 'quantity' => '', 'subtract' => '', 'price' => '', 'price_prefix' => '', 'points' => '', 'points_prefix' => '', 'weight' => '', 'weight_prefix' => '' ); пробовал добавлять в значение price любую цифру и в prefix ставил "плюс", но она не добавляется к стоимости товара в корзине. Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Порыл в интеренете и нашел такой код public function add($product_id, $quantity = 1, $option = array(), $recurring_id = 0, $custom_price = false) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); if (!$query->row['total']) { $this->db->query("INSERT " . DB_PREFIX . "cart SET api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "', customer_id = '" . (int)$this->customer->getId() . "', session_id = '" . $this->db->escape($this->session->getId()) . "', product_id = '" . (int)$product_id . "', recurring_id = '" . (int)$recurring_id . "', `option` = '" . $this->db->escape(json_encode($option)) . "', quantity = '" . (int)$quantity . "', date_added = NOW()"); } else { $this->db->query("UPDATE " . DB_PREFIX . "cart SET quantity = (quantity + " . (int)$quantity . ") WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); } if($custom_price) { if(!isset($this->session->data['cart']['custom_price'])) { $this->session->data['cart']['custom_price'] = array(); } $this->session->data['cart']['custom_price'][$key] = $custom_price; } а в getProducts после $price = $product_query->row['price']; $price = $product_query->row['price']; if(isset($this->session->data['custom_price'][$key])) { $this->data[$key]['price'] = $this->session->data['custom_price'][$key]; } Но в таком случае вываливает ошибки на $key Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 169Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: String offset cast occurred inpublic_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key inpublic_html/system/library/cart/cart.php on line 169Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: String offset cast occurred in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key inpublic_html/system/library/cart/cart.php on line 169Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: String offset cast occurred in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170 Надіслати Поділитися на інших сайтах More sharing options... fanatic Опубліковано: 30 серпня 2018 Share Опубліковано: 30 серпня 2018 можно как-то так в getProducts public function getProducts() { $product_data = array(); $cart_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "'"); $option_width = ''; $option_height = ''; foreach ($cart_query->rows as $cart) { $stock = true; } elseif ($option_query->row['type'] == 'text' || $option_query->row['type'] == 'textarea' || $option_query->row['type'] == 'file' || $option_query->row['type'] == 'date' || $option_query->row['type'] == 'datetime' || $option_query->row['type'] == 'time') { switch($option_query->row['name']){ case 'длина': $option_width = $value; break; case 'ширина': $option_height = $value; break; } $option_data[] = array( 'product_option_id' => $product_option_id, 'product_option_value_id' => '', $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); if ($product_discount_query->num_rows) { $price = $product_discount_query->row['price']; } // Product Specials $product_special_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1"); if ($product_special_query->num_rows) { $price = $product_special_query->row['price']; } if(!empty($option_width) && !empty($option_height)){ $price = ($option_width * $option_height)*$price; } Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Спасибо все получилось! Но пострадали товары у которых нет опций Ширина и Высота как проверить на наличие опций ширина и высота и если отсутствуют то ставить просто цену? Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 if(!empty($option_width) && !empty($option_height)){ $price = (($option_width * $option_height)/100)*$price; } else { $price = $product_query->row['price']; } Условие не помогает Надіслати Поділитися на інших сайтах More sharing options... fanatic Опубліковано: 30 серпня 2018 Share Опубліковано: 30 серпня 2018 15 минут назад, rdpv сказал: Но пострадали товары у которых нет опций да, я немного протупил перенесите $option_width = ''; $option_height = ''; сюда if ($product_query->num_rows && ($cart['quantity'] > 0)) { $option_price = 0; $option_points = 0; $option_weight = 0; $option_data = array(); $option_width = ''; $option_height = ''; Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Спасибо большое! Теперь все работает! Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 31 серпня 2018 Автор Share Опубліковано: 31 серпня 2018 On 8/29/2018 at 11:17 PM, rdpv said: Версия ocStore 2.3 Делаю расчет цены по площади, создал две опции Ширина, Высота тип Текст в product.tpl добавил под вывод цены <h2><?php echo $price; ?></h2> <input type="hidden" id="cena" name="cena" value="<?php echo (float)$price; ?>"> <h2><div id="rash"></div></h2> <input type="button" value="Рассчитать" onclick="addition();"><br> в раздел с опциями добавил скрытый custom_price <div id="product"> <?php if ($options) { ?> <hr> <input type="hidden" id="custom_price" name="custom_price" value=""> и в конец добавил скрипт расчета цены по площади <script type="text/javascript"> function addition() { var shir = parseInt(document.getElementById('input-option25').value); var vis = parseInt(document.getElementById('input-option24').value); var cena = parseInt(document.getElementById('cena').value); if (isNaN(shir)==true) shir=0; if (isNaN(vis)==true) vis=0; var plosh = ((shir * vis)/100)*cena; document.getElementById('custom_price'); document.getElementById('rash').innerHTML = "Расчетная цена: "+plosh; custom_price.value = plosh; } </script> в controller\checkout\cart.php в метод public function add() добавил public function add() { $this->load->language('checkout/cart'); $json = array(); if (isset($this->request->post['product_id'])) { $product_id = (int)$this->request->post['product_id']; } else { $product_id = 0; } $this->load->model('catalog/product'); $product_info = $this->model_catalog_product->getProduct($product_id); if ($product_info) { if (isset($this->request->post['quantity']) && ((int)$this->request->post['quantity'] >= $product_info['minimum'])) { $quantity = (int)$this->request->post['quantity']; } else { $quantity = $product_info['minimum'] ? $product_info['minimum'] : 1; } if (isset($this->request->post['option'])) { $option = array_filter($this->request->post['option']); } else { $option = array(); } if(isset($this->request->post['custom_price'])) { $custom_price = $this->request->post['custom_price']; } else { $custom_price = false; } ниже добавил if (!$json) { $this->cart->add($this->request->post['product_id'], $quantity, $option, $recurring_id, $custom_price); в /system/library/cart/cart.php добавил public function add($product_id, $quantity = 1, $option = array(), $recurring_id = 0, $custom_price= false) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); if (!$query->row['total']) { $this->db->query("INSERT " . DB_PREFIX . "cart SET api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "', customer_id = '" . (int)$this->customer->getId() . "', session_id = '" . $this->db->escape($this->session->getId()) . "', product_id = '" . (int)$product_id . "', recurring_id = '" . (int)$recurring_id . "', `option` = '" . $this->db->escape(json_encode($option)) . "', quantity = '" . (int)$quantity . "', date_added = NOW()"); } else { $this->db->query("UPDATE " . DB_PREFIX . "cart SET quantity = (quantity + " . (int)$quantity . ") WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); } if($custom_price) { $this->session->data['custom_price'] = $custom_price; } } в метод public function getProducts() { if ($this->session->data['custom_price']) { $price = $this->session->data['custom_price']; } else { $price = $product_query->row['price']; } Цена в корзине меняется согласно расчетам но вот при добавлении другого товара в корзине цены всех товаров меняются на рассчитанную подскажите куда копать заранее благодарен. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам [Решено] Изменение цены по формуле
rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 8 hours ago, fanatic said: он при добавлении товара в корзину кинул в сессиию рассчитанную стоимость товара. а в getProduct пихает ее всем товарам Я понимаю что она подставляется всем товарам но не понимаю как ее указать конкретному товару. Надіслати Поділитися на інших сайтах More sharing options...
rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Если делать через опции то тогда каким образом увеличить цену при опции "текстовое поле"? } elseif ($option_query->row['type'] == 'text' || $option_query->row['type'] == 'textarea' || $option_query->row['type'] == 'file' || $option_query->row['type'] == 'date' || $option_query->row['type'] == 'datetime' || $option_query->row['type'] == 'time') { $option_data[] = array( 'product_option_id' => $product_option_id, 'product_option_value_id' => '', 'option_id' => $option_query->row['option_id'], 'option_value_id' => '', 'name' => $option_query->row['name'], 'value' => $value, 'type' => $option_query->row['type'], 'quantity' => '', 'subtract' => '', 'price' => '', 'price_prefix' => '', 'points' => '', 'points_prefix' => '', 'weight' => '', 'weight_prefix' => '' ); пробовал добавлять в значение price любую цифру и в prefix ставил "плюс", но она не добавляется к стоимости товара в корзине. Надіслати Поділитися на інших сайтах More sharing options...
rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Порыл в интеренете и нашел такой код public function add($product_id, $quantity = 1, $option = array(), $recurring_id = 0, $custom_price = false) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); if (!$query->row['total']) { $this->db->query("INSERT " . DB_PREFIX . "cart SET api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "', customer_id = '" . (int)$this->customer->getId() . "', session_id = '" . $this->db->escape($this->session->getId()) . "', product_id = '" . (int)$product_id . "', recurring_id = '" . (int)$recurring_id . "', `option` = '" . $this->db->escape(json_encode($option)) . "', quantity = '" . (int)$quantity . "', date_added = NOW()"); } else { $this->db->query("UPDATE " . DB_PREFIX . "cart SET quantity = (quantity + " . (int)$quantity . ") WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); } if($custom_price) { if(!isset($this->session->data['cart']['custom_price'])) { $this->session->data['cart']['custom_price'] = array(); } $this->session->data['cart']['custom_price'][$key] = $custom_price; } а в getProducts после $price = $product_query->row['price']; $price = $product_query->row['price']; if(isset($this->session->data['custom_price'][$key])) { $this->data[$key]['price'] = $this->session->data['custom_price'][$key]; } Но в таком случае вываливает ошибки на $key Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 169Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: String offset cast occurred inpublic_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key inpublic_html/system/library/cart/cart.php on line 169Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: String offset cast occurred in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key inpublic_html/system/library/cart/cart.php on line 169Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170Notice: String offset cast occurred in public_html/system/library/cart/cart.php on line 170Notice: Undefined variable: key in public_html/system/library/cart/cart.php on line 170 Надіслати Поділитися на інших сайтах More sharing options...
fanatic Опубліковано: 30 серпня 2018 Share Опубліковано: 30 серпня 2018 можно как-то так в getProducts public function getProducts() { $product_data = array(); $cart_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "'"); $option_width = ''; $option_height = ''; foreach ($cart_query->rows as $cart) { $stock = true; } elseif ($option_query->row['type'] == 'text' || $option_query->row['type'] == 'textarea' || $option_query->row['type'] == 'file' || $option_query->row['type'] == 'date' || $option_query->row['type'] == 'datetime' || $option_query->row['type'] == 'time') { switch($option_query->row['name']){ case 'длина': $option_width = $value; break; case 'ширина': $option_height = $value; break; } $option_data[] = array( 'product_option_id' => $product_option_id, 'product_option_value_id' => '', $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); if ($product_discount_query->num_rows) { $price = $product_discount_query->row['price']; } // Product Specials $product_special_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$cart['product_id'] . "' AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1"); if ($product_special_query->num_rows) { $price = $product_special_query->row['price']; } if(!empty($option_width) && !empty($option_height)){ $price = ($option_width * $option_height)*$price; } Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Спасибо все получилось! Но пострадали товары у которых нет опций Ширина и Высота как проверить на наличие опций ширина и высота и если отсутствуют то ставить просто цену? Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 if(!empty($option_width) && !empty($option_height)){ $price = (($option_width * $option_height)/100)*$price; } else { $price = $product_query->row['price']; } Условие не помогает Надіслати Поділитися на інших сайтах More sharing options... fanatic Опубліковано: 30 серпня 2018 Share Опубліковано: 30 серпня 2018 15 минут назад, rdpv сказал: Но пострадали товары у которых нет опций да, я немного протупил перенесите $option_width = ''; $option_height = ''; сюда if ($product_query->num_rows && ($cart['quantity'] > 0)) { $option_price = 0; $option_points = 0; $option_weight = 0; $option_data = array(); $option_width = ''; $option_height = ''; Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Спасибо большое! Теперь все работает! Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 31 серпня 2018 Автор Share Опубліковано: 31 серпня 2018 On 8/29/2018 at 11:17 PM, rdpv said: Версия ocStore 2.3 Делаю расчет цены по площади, создал две опции Ширина, Высота тип Текст в product.tpl добавил под вывод цены <h2><?php echo $price; ?></h2> <input type="hidden" id="cena" name="cena" value="<?php echo (float)$price; ?>"> <h2><div id="rash"></div></h2> <input type="button" value="Рассчитать" onclick="addition();"><br> в раздел с опциями добавил скрытый custom_price <div id="product"> <?php if ($options) { ?> <hr> <input type="hidden" id="custom_price" name="custom_price" value=""> и в конец добавил скрипт расчета цены по площади <script type="text/javascript"> function addition() { var shir = parseInt(document.getElementById('input-option25').value); var vis = parseInt(document.getElementById('input-option24').value); var cena = parseInt(document.getElementById('cena').value); if (isNaN(shir)==true) shir=0; if (isNaN(vis)==true) vis=0; var plosh = ((shir * vis)/100)*cena; document.getElementById('custom_price'); document.getElementById('rash').innerHTML = "Расчетная цена: "+plosh; custom_price.value = plosh; } </script> в controller\checkout\cart.php в метод public function add() добавил public function add() { $this->load->language('checkout/cart'); $json = array(); if (isset($this->request->post['product_id'])) { $product_id = (int)$this->request->post['product_id']; } else { $product_id = 0; } $this->load->model('catalog/product'); $product_info = $this->model_catalog_product->getProduct($product_id); if ($product_info) { if (isset($this->request->post['quantity']) && ((int)$this->request->post['quantity'] >= $product_info['minimum'])) { $quantity = (int)$this->request->post['quantity']; } else { $quantity = $product_info['minimum'] ? $product_info['minimum'] : 1; } if (isset($this->request->post['option'])) { $option = array_filter($this->request->post['option']); } else { $option = array(); } if(isset($this->request->post['custom_price'])) { $custom_price = $this->request->post['custom_price']; } else { $custom_price = false; } ниже добавил if (!$json) { $this->cart->add($this->request->post['product_id'], $quantity, $option, $recurring_id, $custom_price); в /system/library/cart/cart.php добавил public function add($product_id, $quantity = 1, $option = array(), $recurring_id = 0, $custom_price= false) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); if (!$query->row['total']) { $this->db->query("INSERT " . DB_PREFIX . "cart SET api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "', customer_id = '" . (int)$this->customer->getId() . "', session_id = '" . $this->db->escape($this->session->getId()) . "', product_id = '" . (int)$product_id . "', recurring_id = '" . (int)$recurring_id . "', `option` = '" . $this->db->escape(json_encode($option)) . "', quantity = '" . (int)$quantity . "', date_added = NOW()"); } else { $this->db->query("UPDATE " . DB_PREFIX . "cart SET quantity = (quantity + " . (int)$quantity . ") WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); } if($custom_price) { $this->session->data['custom_price'] = $custom_price; } } в метод public function getProducts() { if ($this->session->data['custom_price']) { $price = $this->session->data['custom_price']; } else { $price = $product_query->row['price']; } Цена в корзине меняется согласно расчетам но вот при добавлении другого товара в корзине цены всех товаров меняются на рассчитанную подскажите куда копать заранее благодарен. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Спасибо все получилось! Но пострадали товары у которых нет опций Ширина и Высота как проверить на наличие опций ширина и высота и если отсутствуют то ставить просто цену? Надіслати Поділитися на інших сайтах More sharing options...
rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 if(!empty($option_width) && !empty($option_height)){ $price = (($option_width * $option_height)/100)*$price; } else { $price = $product_query->row['price']; } Условие не помогает Надіслати Поділитися на інших сайтах More sharing options...
fanatic Опубліковано: 30 серпня 2018 Share Опубліковано: 30 серпня 2018 15 минут назад, rdpv сказал: Но пострадали товары у которых нет опций да, я немного протупил перенесите $option_width = ''; $option_height = ''; сюда if ($product_query->num_rows && ($cart['quantity'] > 0)) { $option_price = 0; $option_points = 0; $option_weight = 0; $option_data = array(); $option_width = ''; $option_height = ''; Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Спасибо большое! Теперь все работает! Надіслати Поділитися на інших сайтах More sharing options... rdpv Опубліковано: 31 серпня 2018 Автор Share Опубліковано: 31 серпня 2018 On 8/29/2018 at 11:17 PM, rdpv said: Версия ocStore 2.3 Делаю расчет цены по площади, создал две опции Ширина, Высота тип Текст в product.tpl добавил под вывод цены <h2><?php echo $price; ?></h2> <input type="hidden" id="cena" name="cena" value="<?php echo (float)$price; ?>"> <h2><div id="rash"></div></h2> <input type="button" value="Рассчитать" onclick="addition();"><br> в раздел с опциями добавил скрытый custom_price <div id="product"> <?php if ($options) { ?> <hr> <input type="hidden" id="custom_price" name="custom_price" value=""> и в конец добавил скрипт расчета цены по площади <script type="text/javascript"> function addition() { var shir = parseInt(document.getElementById('input-option25').value); var vis = parseInt(document.getElementById('input-option24').value); var cena = parseInt(document.getElementById('cena').value); if (isNaN(shir)==true) shir=0; if (isNaN(vis)==true) vis=0; var plosh = ((shir * vis)/100)*cena; document.getElementById('custom_price'); document.getElementById('rash').innerHTML = "Расчетная цена: "+plosh; custom_price.value = plosh; } </script> в controller\checkout\cart.php в метод public function add() добавил public function add() { $this->load->language('checkout/cart'); $json = array(); if (isset($this->request->post['product_id'])) { $product_id = (int)$this->request->post['product_id']; } else { $product_id = 0; } $this->load->model('catalog/product'); $product_info = $this->model_catalog_product->getProduct($product_id); if ($product_info) { if (isset($this->request->post['quantity']) && ((int)$this->request->post['quantity'] >= $product_info['minimum'])) { $quantity = (int)$this->request->post['quantity']; } else { $quantity = $product_info['minimum'] ? $product_info['minimum'] : 1; } if (isset($this->request->post['option'])) { $option = array_filter($this->request->post['option']); } else { $option = array(); } if(isset($this->request->post['custom_price'])) { $custom_price = $this->request->post['custom_price']; } else { $custom_price = false; } ниже добавил if (!$json) { $this->cart->add($this->request->post['product_id'], $quantity, $option, $recurring_id, $custom_price); в /system/library/cart/cart.php добавил public function add($product_id, $quantity = 1, $option = array(), $recurring_id = 0, $custom_price= false) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); if (!$query->row['total']) { $this->db->query("INSERT " . DB_PREFIX . "cart SET api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "', customer_id = '" . (int)$this->customer->getId() . "', session_id = '" . $this->db->escape($this->session->getId()) . "', product_id = '" . (int)$product_id . "', recurring_id = '" . (int)$recurring_id . "', `option` = '" . $this->db->escape(json_encode($option)) . "', quantity = '" . (int)$quantity . "', date_added = NOW()"); } else { $this->db->query("UPDATE " . DB_PREFIX . "cart SET quantity = (quantity + " . (int)$quantity . ") WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); } if($custom_price) { $this->session->data['custom_price'] = $custom_price; } } в метод public function getProducts() { if ($this->session->data['custom_price']) { $price = $this->session->data['custom_price']; } else { $price = $product_query->row['price']; } Цена в корзине меняется согласно расчетам но вот при добавлении другого товара в корзине цены всех товаров меняются на рассчитанную подскажите куда копать заранее благодарен. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
rdpv Опубліковано: 30 серпня 2018 Автор Share Опубліковано: 30 серпня 2018 Спасибо большое! Теперь все работает! Надіслати Поділитися на інших сайтах More sharing options...
rdpv Опубліковано: 31 серпня 2018 Автор Share Опубліковано: 31 серпня 2018 On 8/29/2018 at 11:17 PM, rdpv said: Версия ocStore 2.3 Делаю расчет цены по площади, создал две опции Ширина, Высота тип Текст в product.tpl добавил под вывод цены <h2><?php echo $price; ?></h2> <input type="hidden" id="cena" name="cena" value="<?php echo (float)$price; ?>"> <h2><div id="rash"></div></h2> <input type="button" value="Рассчитать" onclick="addition();"><br> в раздел с опциями добавил скрытый custom_price <div id="product"> <?php if ($options) { ?> <hr> <input type="hidden" id="custom_price" name="custom_price" value=""> и в конец добавил скрипт расчета цены по площади <script type="text/javascript"> function addition() { var shir = parseInt(document.getElementById('input-option25').value); var vis = parseInt(document.getElementById('input-option24').value); var cena = parseInt(document.getElementById('cena').value); if (isNaN(shir)==true) shir=0; if (isNaN(vis)==true) vis=0; var plosh = ((shir * vis)/100)*cena; document.getElementById('custom_price'); document.getElementById('rash').innerHTML = "Расчетная цена: "+plosh; custom_price.value = plosh; } </script> в controller\checkout\cart.php в метод public function add() добавил public function add() { $this->load->language('checkout/cart'); $json = array(); if (isset($this->request->post['product_id'])) { $product_id = (int)$this->request->post['product_id']; } else { $product_id = 0; } $this->load->model('catalog/product'); $product_info = $this->model_catalog_product->getProduct($product_id); if ($product_info) { if (isset($this->request->post['quantity']) && ((int)$this->request->post['quantity'] >= $product_info['minimum'])) { $quantity = (int)$this->request->post['quantity']; } else { $quantity = $product_info['minimum'] ? $product_info['minimum'] : 1; } if (isset($this->request->post['option'])) { $option = array_filter($this->request->post['option']); } else { $option = array(); } if(isset($this->request->post['custom_price'])) { $custom_price = $this->request->post['custom_price']; } else { $custom_price = false; } ниже добавил if (!$json) { $this->cart->add($this->request->post['product_id'], $quantity, $option, $recurring_id, $custom_price); в /system/library/cart/cart.php добавил public function add($product_id, $quantity = 1, $option = array(), $recurring_id = 0, $custom_price= false) { $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); if (!$query->row['total']) { $this->db->query("INSERT " . DB_PREFIX . "cart SET api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "', customer_id = '" . (int)$this->customer->getId() . "', session_id = '" . $this->db->escape($this->session->getId()) . "', product_id = '" . (int)$product_id . "', recurring_id = '" . (int)$recurring_id . "', `option` = '" . $this->db->escape(json_encode($option)) . "', quantity = '" . (int)$quantity . "', date_added = NOW()"); } else { $this->db->query("UPDATE " . DB_PREFIX . "cart SET quantity = (quantity + " . (int)$quantity . ") WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "' AND product_id = '" . (int)$product_id . "' AND recurring_id = '" . (int)$recurring_id . "' AND `option` = '" . $this->db->escape(json_encode($option)) . "'"); } if($custom_price) { $this->session->data['custom_price'] = $custom_price; } } в метод public function getProducts() { if ($this->session->data['custom_price']) { $price = $this->session->data['custom_price']; } else { $price = $product_query->row['price']; } Цена в корзине меняется согласно расчетам но вот при добавлении другого товара в корзине цены всех товаров меняются на рассчитанную подскажите куда копать заранее благодарен. Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts