nitrol Posted April 9, 2013 Report Share Posted April 9, 2013 Из всего форума максимально информативным оказался пост http://forum.simplacms.ru/discussion/3693/2-1-5-kupony-kupon-dlya-opredelennogo-tovara/p1никто не реализовал в итоге? Quote Link to post Share on other sites
koteyka Posted July 22, 2014 Report Share Posted July 22, 2014 Так же интересует этот вопрос. Quote Link to post Share on other sites
koteyka Posted July 22, 2014 Report Share Posted July 22, 2014 Странно. Хоть я и не РНР программер, а 1С, но логически помыслить..Что мешает в купоне сделать селект с категориями, а при расчете скидок проверять, принадлежит ли товар данной категории? Я плохо знаю синтаксис РНР, но не похоже, чтоб всё так сложно было.Я сейчас пытаюсь это сделать, но сложно не зная РНР.Например, почему код <select name="target_category"> {function name=category_select level=0} {foreach $categories as $category} <option value='{$category->id}'>{section sp $level} {/section}{$category->name|escape}</option> {category_select categories=$category->subcategories selected_id=$selected_id level=$level+1} {/foreach} {/function} {category_select categories=$categories} </select> не работает в coupon.tpl не могу понять. В products.tpl он работает, причем ни каких дополнительных функций в products.tpl я не нахожу. Quote Link to post Share on other sites
koteyka Posted July 22, 2014 Report Share Posted July 22, 2014 Или того проще, добавить товару атрибут, типа Активен/Неактивен, только Разрешить/Запретить купон и так же проверять при расчете купона. Quote Link to post Share on other sites
koteyka Posted July 22, 2014 Report Share Posted July 22, 2014 Я не говорю, что не сложная. Я ее делаю для собственного самообразования и сколько времени она займет мне не столь важно. Главное, что бы я понял принцип . А дабы исключить дополнительные хлопоты, можно сделать, как я написал во втором варианте (через доп. атрибут). На счет менеджеров, так вот как раз менеджерам это и понадобилось. Захотели вернуть старых клиентов сайта и решили разослать на мыло купон со скидкой. Но менеджеру одного товара это нужно, а другому менеджеру нет. Вот и стал вопрос, как этот купон провести только по конкретному товару (или товарам). В письмах они соответственно укажут, что купон действует только на товар в категории такой-то. Правда, в моем (простом) варианте истина сработает только в случае, что в корзине только товар попадающий под купон, либо только не попадающий. Но я стараюсь Правда у нас крайне редко бывает заказ с товарами из разных категорий. Quote Link to post Share on other sites
koteyka Posted July 23, 2014 Report Share Posted July 23, 2014 В общем, кое что сделал, пробуйте, тестируйте, критикуйте, поправляйте У товара добавляем атрибут (чекбокс) "Использовать купон". Как добавить новое поле в базу и в админку уже описывалось, так что пропускаю. У мня колонка в базе с именем in_actioin.В Api->Cart.phpПосле $cart->coupon_discount = 0; Вставить $cart->total_price_coupon = 0; Заменить foreach($items as $variant_id=>$item) { $purchase = null; if(!empty($products[$item->variant->product_id])) { $purchase = new stdClass(); $purchase->product = $products[$item->variant->product_id]; $purchase->variant = $item->variant; $purchase->amount = $item->amount; $cart->purchases[] = $purchase; $cart->total_price += $item->variant->price*$item->amount; $cart->total_products += $item->amount; } } На foreach($items as $variant_id=>$item) { $purchase = null; if(!empty($products[$item->variant->product_id])) { $purchase = new stdClass(); $purchase->product = $products[$item->variant->product_id]; $purchase->variant = $item->variant; $purchase->amount = $item->amount; $cart->purchases[] = $purchase; if($purchase->product->in_action > 0) { $cart->total_price_coupon += $item->variant->price*$item->amount; } else { $cart->total_price += $item->variant->price*$item->amount; } $cart->total_products += $item->amount; } } Заменить // Скидка по купону if(isset($_SESSION['coupon_code'])) { $cart->coupon = $this->coupons->get_coupon($_SESSION['coupon_code']); if($cart->coupon && $cart->coupon->valid && $cart->total_price>=$cart->coupon->min_order_price) { if($cart->coupon->type=='absolute') { // Абсолютная скидка не более суммы заказа $cart->coupon_discount = $cart->total_price>$cart->coupon->value?$cart->coupon->value:$cart->total_price; $cart->total_price = max(0, $cart->total_price-$cart->coupon->value); } else { $cart->coupon_discount = $cart->total_price * ($cart->coupon->value)/100; $cart->total_price = $cart->total_price-$cart->coupon_discount; } } else { unset($_SESSION['coupon_code']); } } На // Скидка по купону if(isset($_SESSION['coupon_code'])) { $cart->coupon = $this->coupons->get_coupon($_SESSION['coupon_code']); if($cart->coupon && $cart->coupon->valid && $cart->total_price_coupon>=$cart->coupon->min_order_price) { if($cart->coupon->type=='absolute') { // Абсолютная скидка не более суммы заказа $cart->coupon_discount = $cart->total_price_coupon>$cart->coupon->value?$cart->coupon->value:$cart->total_price_coupon; $cart->total_price_coupon = max(0, $cart->total_price_coupon-$cart->coupon->value); } else { $cart->coupon_discount = $cart->total_price_coupon * ($cart->coupon->value)/100; $cart->total_price_coupon = $cart->total_price_coupon-$cart->coupon_discount; } } else { unset($_SESSION['coupon_code']); } } Перед return $cart; Вставить $cart->total_price = $cart->total_price + $cart->total_price_coupon; В результате скидка по купону рассчитывается только на товар, у которого стоит галочка "Использовать купон".Для удобства я чекбокс вынес и в Products.tpl (в админке) и сделал изменение этого параметра через Выпадающее меню внизу.Если после теста и критики всё "приживется", то выложу полную инструкцию. Quote Link to post Share on other sites
mart Posted July 23, 2014 Report Share Posted July 23, 2014 Разверну комментарий Корса одним примером.Вы положили в заказ 2 товара, один попадает под условия скидки, второй нет. Или вдруг случится, что у каждого товара свой купон?! Тогда вообще паника...По идее надо считать каждый товар индивидуально и так его и писать в базу. Но у нас купон один, и он привязан к заказу, а не к товару. Quote Link to post Share on other sites
koteyka Posted July 23, 2014 Report Share Posted July 23, 2014 Да. На данном этапе у меня реализовано, что на один товар купон рассчитывается, а на другой нет. Если положить в корзину 2 товара, в одном будет купон (галочка) в другом нет, то купон будет рассчитан только для одного товара (второй пойдет полной стоимостью). В этом случае в моем решении всё работает. А вот для каждого купона свой товар - это уже действительно сложно. Задача у меня была в следующем. Захотели сделать купон (чтобы завлечь старых покупателей) и код купона разослать им на почту. Но под эту скидку должен попадать не весь товар, а определенный. Других купонов у нас нет. Моё решение в данном случае работает. Quote Link to post Share on other sites
koteyka Posted July 23, 2014 Report Share Posted July 23, 2014 Моё решение, думаю, подойдет в тех случаях, когда один менеджер хочет на свой товар сделать купон, а второй на свой товар не хочет. Quote Link to post Share on other sites
koteyka Posted July 23, 2014 Report Share Posted July 23, 2014 В Вашей версии купон действует на ЧАСТЬ заказа (товары с установленным in_action).Да. Правильно. Фактически, можно выбрать группу в древе (справа), отметить все товары и селектом всем установить "Использовать купон". Просто так намного проще, чем подвязывать купон к категории.Думаю, что если в форме купона сделать выбор категории, что у меня не вышло почему-то (код в четвертом посте) и при сохранении в поле in_action (или сделать новое) у товара этой категории прописался бы код купона, то товар был бы завязан именно за этим купоном. Тогда вообще можно один купон подвязать к одному товару, а другой к другому. Затем при расчете проверку делать не на 1 и 0, а на код купона.Так же можно в шаблоне товаров вставить код (это добавление к моему первому варианту) {if $product->in_action == 1} Действует купон {/if} дабы человек на сайте видел, что данный товар попадает по купон. Quote Link to post Share on other sites
koteyka Posted July 23, 2014 Report Share Posted July 23, 2014 Если бы кто-то подсказал, как выдернуть категорию товара в файле api/Cart.php был бы очень признателен. Quote Link to post Share on other sites
koteyka Posted July 23, 2014 Report Share Posted July 23, 2014 Собственно всё сделал. Осталась загвоздка только в api/Cart.php. Может кто нибудь помочь, а то я в запросах не профи. И я выложу измененные файлы в паблик. Quote Link to post Share on other sites
koteyka Posted July 24, 2014 Report Share Posted July 24, 2014 korsВы как-то в какой-то теме писали запрос, который выводит все товары икатегории заданного бренда, или что-то такое. Вот сам запрос $this->db->query("SELECT DISTINCT c.id, c.name, c.url FROM s_products p, s_products_categories pc, s_categories c WHERE pc.product_id = p.id AND pc.category_id = c.id AND p.brand_id = ?", $brand_id); Можно ли что-то подобное сделать с категориями для купонов, а то я в запросах (да и не только ) пока профан.Я добавил таблицу s_categoties_coupons с полями coupon_id и category_id.Собственно мне нужно проверить, принадлежит ли товар той же категории,что и купон. А как это сделать пока не пойму.Спасибо. Quote Link to post Share on other sites
koteyka Posted July 24, 2014 Report Share Posted July 24, 2014 Посмотрите код из Cart.php Он работает, но мне кажется, что можно сделать как-то проще.Сделал картинкой, а то в теге не так понятно выходит.Основной код после foreach. Проверяется, что и товар и купон имеют одну категорию и соответственно скидка делается только по этому товару.Как-то так. Нужно подробнее, спрашивайте. Quote Link to post Share on other sites
koteyka Posted July 24, 2014 Report Share Posted July 24, 2014 Чуть позже выложу измененные файлы. Quote Link to post Share on other sites
koteyka Posted July 25, 2014 Report Share Posted July 25, 2014 Перекинул в Готовые решения. Quote Link to post Share on other sites
trainracing Posted May 8, 2015 Report Share Posted May 8, 2015 Не работает ни фигашеньки, в корзине вводишь купон, применить - и ничего не происходит кроме перезагрузки страницы, цена не перерассчитывается(( Quote Link to post Share on other sites
koteyka Posted May 8, 2015 Report Share Posted May 8, 2015 Ой давно это делалось. Уже и не вспомню что там. Стукни завтра в ЛС. Попробуем разобраться. У меня остался сайт, где это реализовано. Quote Link to post Share on other sites
wildrock Posted May 9, 2015 Report Share Posted May 9, 2015 Ой давно это делалось. Уже и не вспомню что там. Стукни завтра в ЛС. Попробуем разобраться. У меня остался сайт, где это реализовано.Привет, ну что там с купонами работает? Quote Link to post Share on other sites
aliogustu Posted August 17, 2016 Report Share Posted August 17, 2016 Поддерживаю вопрос!) Quote Link to post Share on other sites
DaVinci Posted August 17, 2016 Report Share Posted August 17, 2016 есть готовое решение, платное 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.