koteyka Опубликовано 27 июля, 2014 Жалоба Поделиться Опубликовано 27 июля, 2014 Жду критики и исправлений (если нужно) Тестировалось на версии 2.3.5 1. В базе данных в таблице s_coupons добавить поле category_id int(11).2. Добавить таблицу в базу данных с именем s_categories_coupons.3. В новую таблицу добавить два поля category_id и coupon_id int(11).Заменить файлы:api/Cart.phpapi/Coupons.phpsimpla/CouponAdmin.phpsimpla/CouponsAdmin.phpsimpla/design/html/coupon.tplПри желании в файле simpla/design/html/cart.tpl в названии товара после {$purchase->variant->name|escape} можно вставить код: {foreach $cart->discount_text as $key=>$cdt} {if $purchase->product->id == $key} <br><h3>Скидка по купону −{$cdt} {$currency->sign}</h3> {/if} {/foreach} Тогда в корзине будет выводиться скидка по каждой позиции. Архив с файлами Coupon_in_Categories.rar Цитата Ссылка на сообщение Поделиться на другие сайты
acerus Опубликовано 27 июля, 2014 Жалоба Поделиться Опубликовано 27 июля, 2014 оо, круто! нужная вещь Цитата Ссылка на сообщение Поделиться на другие сайты
cernos Опубликовано 19 сентября, 2014 Жалоба Поделиться Опубликовано 19 сентября, 2014 Хорошая штука, обязательно поставлю, спасибо! Цитата Ссылка на сообщение Поделиться на другие сайты
cernos Опубликовано 21 сентября, 2014 Жалоба Поделиться Опубликовано 21 сентября, 2014 Можете предоставить правки файлов:api/Cart.phpapi/Coupons.phpsimpla/CouponAdmin.phpsimpla/CouponsAdmin.phpsimpla/design/html/coupon.tpl от версии файлы могут отличаться + кто-то мог делать правки до Вас в этих файлах (как я допустим)Заранее спасибо! Цитата Ссылка на сообщение Поделиться на другие сайты
koteyka Опубликовано 22 сентября, 2014 Автор Жалоба Поделиться Опубликовано 22 сентября, 2014 Ой. Сейчас уже и не вспомнить в подробностях Можно конечно в totla commander сравнить файлы и выкусить нужное, но это для понимающего человека будет не сложно.Попробую сделать, но возможны неточности. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 22 сентября, 2014 Жалоба Поделиться Опубликовано 22 сентября, 2014 Что если товар из разных категорий? Как будет работать? Цитата Ссылка на сообщение Поделиться на другие сайты
koteyka Опубликовано 22 сентября, 2014 Автор Жалоба Поделиться Опубликовано 22 сентября, 2014 api/Cart.phpПримерно 31-я строка.После $cart->discount = 0; $cart->coupon_discount = 0; Добавить $cart->total_price_coupon = 0; $cart->discount_text = array(); Там где // Скидка по купонуПосле $cart->coupon = $this->coupons->get_coupon($_SESSION['coupon_code']); if($cart->coupon && $cart->coupon->valid && $cart->total_price>=$cart->coupon->min_order_price) { Добавить foreach($items as $variant_id=>$item) { $purchase = null; $skidka = 0; $purchase = new stdClass(); $purchase->product = $products[$item->variant->product_id]; $product_id = $purchase->product->id; $coupon_id = $cart->coupon->id; $this->db->query("SELECT DISTINCT count(*) cnt FROM s_categories_coupons cc, s_products_categories pc WHERE cc.category_id = pc.category_id AND pc.product_id = ? AND cc.coupon_id = ?", $product_id, $coupon_id); $z=$this->db->result('cnt'); if($z) { if($cart->coupon->type!='absolute') { $skidka = ($item->variant->price*$item->amount) * ($cart->coupon->value)/100; } $cart->discount_text[$product_id] = $skidka; $cart->total_price_coupon += $item->variant->price*$item->amount; } } Заменить // Абсолютная скидка не более суммы заказа $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; } на // Абсолютная скидка не более суммы заказа $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; } Перед return $cart; Вставить $cart->total_price = $cart->total_price - $cart->coupon_discount; Продолжение следует... Цитата Ссылка на сообщение Поделиться на другие сайты
koteyka Опубликовано 22 сентября, 2014 Автор Жалоба Поделиться Опубликовано 22 сентября, 2014 Что если товар из разных категорий?Как будет работать?Скидку рассчитывает только на товар, категория которого указана в купоне. Другой товар пойдет без скидки. Цитата Ссылка на сообщение Поделиться на другие сайты
koteyka Опубликовано 22 сентября, 2014 Автор Жалоба Поделиться Опубликовано 22 сентября, 2014 ....api/Coupons.phpВ фунциях public function get_coupon($id) и public function get_coupons($filter = array()) в Селектах добавить c.category_idВ самый конец добавить функции public function delete_coupon_categories($id) { $id = intval($id); $query = $this->db->placehold("DELETE FROM __categories_coupons WHERE coupon_id=?", $id); $this->db->query($query); } public function get_coupon_categories($id) { $query = $this->db->placehold("SELECT cf.category_id as category_id FROM __categories_coupons cf WHERE cf.coupon_id = ?", $id); $this->db->query($query); return $this->db->results('category_id'); } public function add_coupon_category($id, $category_id) { $query = $this->db->placehold("INSERT IGNORE INTO __categories_coupons SET coupon_id=?, category_id=?", $id, $category_id); $this->db->query($query); } public function update_coupon_categories($id, $categories) { $id = intval($id); $query = $this->db->placehold("DELETE FROM __categories_coupons WHERE coupon_id=?", $id); $this->db->query($query); if(is_array($categories)) { $values = array(); foreach($categories as $category) $values[] = "($id , ".intval($category).")"; $query = $this->db->placehold("INSERT INTO __categories_coupons (coupon_id, category_id) VALUES ".implode(', ', $values)); $this->db->query($query); } } Продолжение следует... Цитата Ссылка на сообщение Поделиться на другие сайты
koteyka Опубликовано 22 сентября, 2014 Автор Жалоба Поделиться Опубликовано 22 сентября, 2014 ...simpla/CouponAdmin.phpПосле $coupon->single = $this->request->post('single', 'float'); Вставить $coupon_categories = $this->request->post('coupon_categories'); После $this->design->assign('message_error', 'code_exists'); Вставить $this->design->assign('message_error', 'code_group'); После else { $this->coupons->update_coupon($coupon->id, $coupon); $coupon = $this->coupons->get_coupon($coupon->id); $this->design->assign('message_success', 'updated'); } Вставить $this->coupons->update_coupon_categories($coupon->id, $coupon_categories); Заменить else { $coupon->id = $this->request->get('id', 'integer'); $coupon = $this->coupons->get_coupon($coupon->id); } // if(empty($coupon->id)) // $coupon->expire = date($this->settings->date_format, time()); $this->design->assign('coupon', $coupon); return $this->design->fetch('coupon.tpl'); На else { $coupon->id = $this->request->get('id', 'integer'); $coupon = $this->coupons->get_coupon($coupon->id); } $coupon_categories = array(); if($coupon) { $coupon_categories = $this->coupons->get_coupon_categories($coupon->id); } $categories = $this->categories->get_categories_tree(); $this->design->assign('categories', $categories); $this->design->assign('coupon', $coupon); $this->design->assign('coupon_categories', $coupon_categories); return $this->design->fetch('coupon.tpl'); Продолжение следует.... Цитата Ссылка на сообщение Поделиться на другие сайты
koteyka Опубликовано 22 сентября, 2014 Автор Жалоба Поделиться Опубликовано 22 сентября, 2014 ....simpla/CouponsAdmin.phpЗаменить foreach($ids as $id) $this->coupons->delete_coupon($id); break; На foreach($ids as $id) { // текущие категории $cats = $this->coupons->get_coupon_categories($id); // В каких категориях оставлять $diff = array_diff($cats, (array)$current_cat); if(!empty($current_cat) && !empty($diff)) { $this->coupons->update_coupon_categories($id, $diff); } else { $this->coupons->delete_coupon($id); } } break; После $this->design->assign('current_page', $filter['page']); Вставить $categories = $this->categories->get_categories_tree(); $category = null; $filter = array(); $category_id = $this->request->get('category_id', 'integer'); if($category_id) { $category = $this->categories->get_category($category_id); $filter['category_id'] = $category->id; } После $coupons = $this->coupons->get_coupons($filter); Вставить $this->design->assign('categories', $categories); $this->design->assign('category', $category); Продолжение следует.... Цитата Ссылка на сообщение Поделиться на другие сайты
koteyka Опубликовано 22 сентября, 2014 Автор Жалоба Поделиться Опубликовано 22 сентября, 2014 <p>....<span style="color:rgb(40,40,40);font-family:helvetica, arial, sans-serif;">simpla/design/html/coupon.tpl</span></p><p><span style="color:rgb(40,40,40);font-family:helvetica, arial, sans-serif;">Добавить скрипт</span></p><pre class="_prettyXprint"><script>$(function() {$query = $this->db->placehold('select * from __categories');$this->db->query($query);$categories = array();foreach($this->db->results() as $categories);echo $this->db->query($query);});</script> </pre><p>Преред</p><pre class="_prettyXprint"> <li> <label class=property for="single"></label> <input type="checkbox" name="single" id="single" value="1" {if $coupon->single==1}checked{/if}> <label for="single">одноразовый</label> </li> </pre><p>Вставить</p><pre class="_prettyXprint"> <li> <h2>Использовать в категориях</h2> <select class=multiple_categories multiple name="coupon_categories[]"> {function name=category_select selected_id=$product_category level=0} {foreach from=$categories item=category} <option value='{$category->id}' {if in_array($category->id, $coupon_categories)}selected{/if} category_name='{$category->single_name}'>{section name=sp loop=$level} {/section}{$category->name}</option> {category_select categories=$category->subcategories selected_id=$selected_id level=$level+1} {/foreach} {/function} {category_select categories=$categories} </select> </li> </pre><p>Вроде как всё.</p><p>Изменения относительно файлов версии 2.3.6. В ранних версиях исходные коды могут отличаться. Ищите аналогичные участки кода.</p> Цитата Ссылка на сообщение Поделиться на другие сайты
cernos Опубликовано 5 октября, 2014 Жалоба Поделиться Опубликовано 5 октября, 2014 Спасибо! Цитата Ссылка на сообщение Поделиться на другие сайты
cernos Опубликовано 5 октября, 2014 Жалоба Поделиться Опубликовано 5 октября, 2014 Пока что отменил установку, по причине пропорционально растущих в БД запросов (в зависимости от кол-ва товаров в корзине). Подумайте, можем вместе подумать как дергать все одним запросом = )Кстати можем обойтись без новой таблицы s_categories_coupons, в любом случае спасибо за труды. Нужно подумать, как сделать эту выборку легче! Если у Вас есть желание доработать, сообщите, может посоветую как облегчить работу доработки. Цитата Ссылка на сообщение Поделиться на другие сайты
vovan777 Опубликовано 26 мая, 2017 Жалоба Поделиться Опубликовано 26 мая, 2017 О! Классная штука! Хочу то же самое но для брендов. Щас буду ваять))) Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 29 ноября, 2020 Жалоба Поделиться Опубликовано 29 ноября, 2020 А как вывести в шаблоне товаров? чтобы скидка выводилась (-20%) к категории которой относится скидка Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 1 декабря, 2020 Жалоба Поделиться Опубликовано 1 декабря, 2020 (изменено) В 29.11.2020 в 19:18, get31 сказал: А как вывести в шаблоне товаров? чтобы скидка выводилась (-20%) к категории которой относится скидка Кто-то делал подобное? Можете пожалуйста подсказать? Изменено 1 декабря, 2020 пользователем get31 Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.