Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Из всего форума максимально информативным оказался пост http://forum.simplacms.ru/discussion/3693/2-1-5-kupony-kupon-dlya-opredelennogo-tovara/p1
никто не реализовал в итоге?

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

Странно. Хоть я и не РНР программер, а 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 я не нахожу.

Ссылка на сообщение
Поделиться на другие сайты

Или того проще, добавить товару атрибут, типа Активен/Неактивен, только Разрешить/Запретить купон и так же проверять при расчете купона.

Ссылка на сообщение
Поделиться на другие сайты

Я не говорю, что не сложная. Я ее делаю для собственного самообразования и сколько времени она займет мне не столь важно. Главное, что бы я понял принцип :) . А дабы исключить дополнительные хлопоты, можно сделать, как я написал во втором варианте (через доп. атрибут). На счет менеджеров, так вот как раз менеджерам это и понадобилось. Захотели вернуть старых клиентов сайта и решили разослать на мыло купон со скидкой. Но менеджеру одного товара это нужно, а другому менеджеру нет. Вот и стал вопрос, как этот купон провести только по конкретному товару (или товарам). В письмах они соответственно укажут, что купон действует только на товар в категории такой-то. Правда, в моем (простом) варианте истина сработает только в случае, что в корзине только товар попадающий под купон, либо только не попадающий. Но я стараюсь :) Правда у нас крайне редко бывает заказ с товарами из разных категорий.

Ссылка на сообщение
Поделиться на другие сайты

В общем, кое что сделал, пробуйте, тестируйте, критикуйте, поправляйте  :)

У товара добавляем атрибут (чекбокс) "Использовать купон". Как добавить новое поле в базу и в админку уже описывалось, так что пропускаю. У мня колонка в базе с именем 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 (в админке) и сделал изменение этого параметра через Выпадающее меню внизу.

Если после теста и критики всё "приживется", то выложу полную инструкцию.

Ссылка на сообщение
Поделиться на другие сайты

Разверну комментарий Корса одним примером.

Вы положили в заказ 2 товара, один попадает под условия скидки, второй нет. Или вдруг случится, что у каждого товара свой купон?! Тогда вообще паника...

По идее надо считать каждый товар индивидуально и так его и писать в базу. Но у нас купон один, и он привязан к заказу, а не к товару.

Ссылка на сообщение
Поделиться на другие сайты

Да. На данном этапе у меня реализовано, что на один товар купон рассчитывается, а на другой нет. Если положить в корзину 2 товара, в одном будет купон (галочка) в другом нет, то купон будет рассчитан только для одного товара (второй пойдет полной стоимостью). В этом случае в моем решении всё работает. А вот для каждого купона свой товар - это уже действительно сложно. Задача у меня была в следующем. Захотели сделать купон (чтобы завлечь старых покупателей) и код купона разослать им на почту. Но под эту скидку должен попадать не весь товар, а определенный. Других купонов у нас нет. Моё решение в данном случае работает.

Ссылка на сообщение
Поделиться на другие сайты

Моё решение, думаю, подойдет в тех случаях, когда один менеджер хочет на свой товар сделать купон, а второй на свой товар не хочет.

Ссылка на сообщение
Поделиться на другие сайты

В Вашей версии купон действует на ЧАСТЬ заказа (товары с установленным in_action).

Да. Правильно. Фактически, можно выбрать группу в древе (справа), отметить все товары и селектом всем установить "Использовать купон".  Просто так намного проще, чем подвязывать купон к категории.

Думаю, что если в форме купона сделать выбор категории, что у меня не вышло почему-то (код в четвертом посте) и при сохранении в поле in_action (или сделать новое) у товара этой категории прописался бы код купона, то товар был бы завязан именно за этим купоном. Тогда вообще можно один купон подвязать к одному товару, а другой к другому.  Затем при расчете проверку делать не на 1 и 0, а на код купона.

Так же можно в шаблоне товаров вставить код (это добавление к моему первому варианту)

     {if $product->in_action == 1}
     Действует купон
     {/if}

дабы человек на сайте видел, что данный товар попадает по купон.

Ссылка на сообщение
Поделиться на другие сайты

Если бы кто-то подсказал, как выдернуть категорию товара в файле api/Cart.php был бы очень признателен.

Ссылка на сообщение
Поделиться на другие сайты

post-1516-0-89755300-1406144846_thumb.png

Собственно всё сделал. Осталась загвоздка только в api/Cart.php. Может кто нибудь помочь, а то я в запросах не профи. И я выложу измененные файлы в паблик.

Ссылка на сообщение
Поделиться на другие сайты

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.
Собственно мне нужно проверить, принадлежит ли товар той же категории,
что и купон. А как это сделать пока не пойму.

Спасибо.

Ссылка на сообщение
Поделиться на другие сайты

Посмотрите код из Cart.php Он работает, но мне кажется, что можно сделать как-то проще.post-1516-0-92543200-1406222096_thumb.jpg

Сделал картинкой, а то в теге не так понятно выходит.

Основной код после foreach. Проверяется, что и товар и купон имеют одну категорию и соответственно скидка делается только по этому товару.

Как-то так. Нужно подробнее, спрашивайте.

 

Ссылка на сообщение
Поделиться на другие сайты
  • 9 месяцев спустя...

Не работает ни фигашеньки, в корзине вводишь купон, применить - и ничего не происходит кроме перезагрузки страницы, цена не перерассчитывается((

Ссылка на сообщение
Поделиться на другие сайты

Ой давно это делалось. Уже и не вспомню что там. Стукни завтра в ЛС. Попробуем разобраться. У меня остался сайт, где это реализовано.

Ссылка на сообщение
Поделиться на другие сайты

Ой давно это делалось. Уже и не вспомню что там. Стукни завтра в ЛС. Попробуем разобраться. У меня остался сайт, где это реализовано.

Привет, ну что там с купонами работает?

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...