aqaholding Posted September 3, 2014 Report Share Posted September 3, 2014 Готовое решение для отображения Дополнительных услуг в корзине и заказе! Quote Link to post Share on other sites
DaVinci Posted September 3, 2014 Report Share Posted September 3, 2014 делитесь Quote Link to post Share on other sites
Noxter Posted September 3, 2014 Report Share Posted September 3, 2014 Сделал себе в админке и в карточке товара доп. услуги, например "подарочная упаковка" Готов поделиться решением если инитересноЗачем создаете тему в готовых решениях если решение не расшарили? Quote Link to post Share on other sites
aqaholding Posted September 3, 2014 Author Report Share Posted September 3, 2014 Сейчас оформлю и выложу Quote Link to post Share on other sites
aqaholding Posted September 3, 2014 Author Report Share Posted September 3, 2014 1. Через phpmyadmin создаем две таблицы: CREATE TABLE IF NOT EXISTS `s_dopservice` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `description` text NOT NULL, `free_from` float(10,2) NOT NULL, `price` float(10,2) NOT NULL, `enabled` tinyint(1) NOT NULL DEFAULT '0', `position` int(11) NOT NULL, `separate_payment` int(1) DEFAULT '1', PRIMARY KEY (`id`), KEY `position` (`position`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `s_orders_dopservice` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `orders_id` int(11) DEFAULT NULL, `dopservice_id` int(11) DEFAULT NULL, `dopservice_price` float(10,2) NOT NULL DEFAULT '0.00', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 2. В папку simpla заливаем два файла:http://erosexyn.ru/DopService.7z 3. В папку api заливаем файл:http://erosexyn.ru/Dopservice2.7z Quote Link to post Share on other sites
aqaholding Posted September 3, 2014 Author Report Share Posted September 3, 2014 Блин! К сожалению теперь только позже!Я детально написал описание, а форум взял и его обрезал!Так что ждите! Позже снова напишу Quote Link to post Share on other sites
aqaholding Posted September 3, 2014 Author Report Share Posted September 3, 2014 4. В папку simpla/design/html заливаем два файла:http://erosexyn.ru/DopService3.7z 3. Открываем файл api/Managers.php 4. Находим строчку: public $permissions_list = array('products', 'categories', 'brands', 'features', 'orders', 'labels', 'users', 'groups', 'coupons', 'pages', 'blog', 'news', 'comments', 'feedbacks', 'import', 'export', 'backup', 'stats', 'design', 'settings', 'currency', 'delivery', 'payment', 'managers', 'license'); Добавляем после 'license': ,'dopservice', 'dopservices' Должно получиться: public $permissions_list = array('products', 'categories', 'brands', 'features', 'orders', 'labels', 'users', 'groups', 'coupons', 'pages', 'blog', 'news', 'comments', 'feedbacks', 'import', 'export', 'backup', 'stats', 'design', 'settings', 'currency', 'delivery', 'payment', 'managers', 'license','dopservice', 'dopservices',); 4. Открываем файл api/Notify.php5. Находим строчку (92 сторка): // Способ доставки $delivery = $this->delivery->get_delivery($order->delivery_id); $this->design->assign('delivery', $delivery); После нее вставляем: $dopservice = $this->dopservice->get_orders_dopservice($order->id); $this->design->assign('dopservices', $dopservice); $dopservice_price = $this->dopservice->get_orders_price_dopservice($order->id); $this->design->assign('dopservice_price', $dopservice_price); Quote Link to post Share on other sites
aqaholding Posted September 3, 2014 Author Report Share Posted September 3, 2014 Вместо $order->total_price пишем: $order->total_price = $order->total_price + $dopservice_price->dprice; 6. В этом же файле находим (155 сторка): // Способ доставки $delivery = $this->delivery->get_delivery($order->delivery_id); $this->design->assign('delivery', $delivery); Ниже добавляем: $dopservices = $this->dopservice->get_orders_dopservice($order->id); $this->design->assign('dopservices', $dopservices); $dopservice_price = $this->dopservice->get_orders_price_dopservice($order->id); $this->design->assign('dopservice_price', $dopservice_price); $order->total_price = $order->total_price + $dopservice_price->dprice; 7. Открываем api/Orders.php 8. После функции: public function delete_order_labels($id, $labels_ids) { $labels_ids = (array)$labels_ids; if(is_array($labels_ids)) foreach($labels_ids as $l_id) $this->db->query("DELETE FROM __orders_labels WHERE order_id=? AND label_id=?", $id, $l_id); } Добавлем: //Управление доп. услугами function get_order_dopservice($order_id = array()) { if(empty($order_id)) return array(); $dopservice_id_filter = $this->db->placehold('AND orders_id in(?@)', (array)$order_id); $query = $this->db->placehold("SELECT ol.orders_id, l.id, l.name, l.position, l.price, l.free_from FROM __dopservice l LEFT JOIN __orders_dopservice ol ON ol.dopservice_id = l.id WHERE 1 $dopservice_id_filter ORDER BY position "); $this->db->query($query); return $this->db->results(); } public function update_order_dopservice($id, $dopservice_ids) { $dopservice_ids = (array)$dopservice_ids; $query = $this->db->placehold("DELETE FROM __orders_dopservice WHERE orders_id=?", intval($id)); $this->db->query($query); if(is_array($dopservice_ids)) foreach($dopservice_ids as $l_id) $this->db->query("INSERT INTO __orders_dopservice SET orders_id=?, dopservice_id=?", $id, $l_id); } public function add_order_dopservice($id, $dopservice_ids) { $dopservice_ids = (array)$dopservice_ids; if(is_array($dopservice_ids)) foreach($dopservice_ids as $l_id) { $this->db->query("INSERT INTO __orders_dopservice SET orders_id=?, dopservice_id=?", $id, $l_id); } } public function delete_order_dopservice($id, $labels_ids) { $dopservice_ids = (array)$dopservice_ids; if(is_array($dopservice_ids)) foreach($dopservice_ids as $l_id) $this->db->query("DELETE FROM __orders_dopservice WHERE orders_id=? AND dopservice_id=?", $id, $l_id); } // Quote Link to post Share on other sites
aqaholding Posted September 3, 2014 Author Report Share Posted September 3, 2014 9. Открываем api/Simpla_classic.php10. После require_once('api/Delivery.php'); добавляем require_once('api/Dopservice.php');11. После $this->delivery = &self::$simpla_instance->delivery; Добавляем: $this->dopservice = &self::$simpla_instance->dopservice; 12. После $this->delivery = new Delivery(); Добавляем: $this->dopservice = new Dopservice(); 13. В нужном месте шаблона cart.tpl вставляем: {* Дополнительные услуги *} {if $dopservices} <h2>Выберите Допольнительные услуги:</h2> <ul id="deliveries"> {foreach $dopservices as $dopservice} <li> <div class="checkbox"> <input type="checkbox" name="dopservice[]" value="{$dopservice->id}" {if $dopservice_id==$dopservice->id}checked{elseif $dopservice@first}checked{/if} id="dopservices_{$dopservice->id}"> </div> <h3> <label for="dopservices_{$dopservice->id}"> {$dopservice->name} {if $cart->total_price < $dopservice->free_from && $dopservice->price>0} ({$dopservice->price|convert} {$currency->sign}) {elseif $cart->total_price >= $dopservice->free_from} (бесплатно) {/if} </label> </h3> <div class="description"> {$dopservice->description} </div> </li> {/foreach} </ul> {/if} 14. В файле шаблона: email_order.tpl вставляем: {if $dopservices} {foreach $dopservices as $dopservice} <tr> <td style="padding:6px; width:100; padding:6px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;"></td> <td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;"> <b><font color="green">Доп. услуга: {$dopservice->name}</font></b><br /> <i> {$dopservice->description} </i> </td> <td align="right" style="padding:6px; text-align:right; width:170; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;"> {if $cart->total_price < $dopservice->free_from && $dopservice->price>0} {$dopservice->price|convert} {$currency->sign} {elseif $cart->total_price >= $dopservice->free_from} бесплатно {/if} </td> </tr> {/foreach} {/if} 15. Открываем simpla/CurrencyAdmin.php16. После $this->db->query("UPDATE __delivery SET price=price*?, free_from=free_from*?", $coef, $coef); Добавляем: $this->db->query("UPDATE __dopservice SET price=price*?, free_from=free_from*?", $coef, $coef); Quote Link to post Share on other sites
aqaholding Posted September 3, 2014 Author Report Share Posted September 3, 2014 17. Открываем simpla/IndexAdmin.php18. После 'DeliveryAdmin' => 'delivery', Добавляем: 'DopservicesAdmin' => 'dopservices', 'DopserviceAdmin' => 'dopservice', 19. Открываем simpla/OrderAdmin.php20. После $this->design->assign('subtotal', $subtotal); Добавляем: $dopservice_price = $this->dopservice->get_orders_price_dopservice($order->id); $this->design->assign('dopservice_price', $dopservice_price->dprice); $order->total_price = $order->total_price + $dopservice_price->dprice; 21. После: $this->design->assign('order_labels', $order_labels); Добавляем: // Доп. услуги $dopservices = $this->orders->get_dopservices(); $this->design->assign('dopservices', $dopservices); $dopservices_in_order = $this->orders->get_order_dopservice($order->id); $this->design->assign('dopservices_in_order', $dopservices_in_order); $this->design->assign('order_dopservices', $order_dopservices); Все! Если будут вопросы пишите Quote Link to post Share on other sites
Kors Posted September 3, 2014 Report Share Posted September 3, 2014 Сделал себе в админке и в карточке товара доп. услуги, например "подарочная упаковка"А Вы не могли бы объяснить хоть немного Ваш замысел, то есть дать описание хоть краткое? Непонятно как минимум следующее: 1. Пишете "Сделал ... в карточке товара", а судя по описанию, в карточке товара у Вас НИЧЕГО не меняется. 2. Насколько можно понять из описания, допуслуга добавляется на странице корзины и относится к ЗАКАЗУ, а никак не к товару. Допуслуга только одна может быть выбрана? 3. Версия какая? Упоминающийся у Вас api/Simpla_classic.php в последних версиях не используется. Quote Link to post Share on other sites
Noxter Posted September 3, 2014 Report Share Posted September 3, 2014 Упоминающийся у Вас api/Simpla_classic.php в последних версиях не используется.Этот файл вообще никогда не использовался, я на этот счет общался с Денисом. Quote Link to post Share on other sites
aqaholding Posted September 3, 2014 Author Report Share Posted September 3, 2014 Да действительно это моя оплошность! Доп услуги появляются в корзине и в заказе!Файл остался уже не помню зачем и откуда - он действительно не используетсяВерсия симплы 2.2.4 Quote Link to post Share on other sites
aqaholding Posted September 3, 2014 Author Report Share Posted September 3, 2014 А Вы не могли бы объяснить хоть немного Ваш замысел, то есть дать описание хоть краткое? Непонятно как минимум следующее:1. Пишете "Сделал ... в карточке товара", а судя по описанию, в карточке товара у Вас НИЧЕГО не меняется.2. Насколько можно понять из описания, допуслуга добавляется на странице корзины и относится к ЗАКАЗУ, а никак не к товару. Допуслуга только одна может быть выбрана?3. Версия какая? Упоминающийся у Вас api/Simpla_classic.php в последних версиях не используется. Доп услуги чекбоксами сделаны - т.е можно выбрать неограниченное кол-во доп услуг Quote Link to post Share on other sites
aqaholding Posted September 3, 2014 Author Report Share Posted September 3, 2014 Quote Link to post Share on other sites
Kors Posted September 4, 2014 Report Share Posted September 4, 2014 В действительности у Вас доп услуга есть часть ЗАКАЗА, то есть выступает фактически как ТОВАР. И намного проще было бы оформить ее технически как ТОВАР, например, из специальной (неактивной) категории. На странице корзины вставить доп услуги как товары с возможностью добавления. И добавить контроль корзины и запись заказа: количество таких специальных товаров - 0 или 1, ставить цену нулевую, если надо. Понадобятся изменения всего лишь в 3-5 файлах и не придется ничего или почти ничего менять в структуре базы. А сейчас у Вас аж два десятка пунктов изменений, новые таблицы, новые страницы в админке. И описаны явно не все изменения. Например, согласно текущему описанию страница доп услуг в админке будет секретной, так как НИГДЕ НЕ БУДЕТ ссылок на нее, поскольку не меняются соседние шаблоны админки. Вероятнее всего, подобных моментов еще немало. И если их все поправить, то будет уже порядка 30 пунктов изменений... Quote Link to post Share on other sites
aqaholding Posted September 4, 2014 Author Report Share Posted September 4, 2014 Как угодно! Прошу администрацию форума удалить данную Тему за ненадобностью! Quote Link to post Share on other sites
Kors Posted September 4, 2014 Report Share Posted September 4, 2014 Зачем так радикально? Идея вполне хорошая и жизнеспособная.Тема пусть живет, может, кому пригодится. Народу на форуме немало, кто любит попа, а кто попадью... 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.