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

Дополнительные услуги


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

Сделал себе в админке и в карточке товара доп. услуги, например "подарочная упаковка"

Готов поделиться решением если инитересно

Зачем создаете тему в готовых решениях если решение не расшарили?
Ссылка на сообщение
Поделиться на другие сайты

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 

 

 

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

Блин! К сожалению теперь только позже!

Я детально написал описание, а форум взял и его обрезал!

Так что ждите! Позже снова напишу

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

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.php

5. Находим строчку (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);
 

 

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

Вместо  $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);

    }
//
 

 

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

9. Открываем api/Simpla_classic.php

10. После 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.php

16. После 

 

$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);
 

 

 

 

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

17. Открываем simpla/IndexAdmin.php

18. После 
 

'DeliveryAdmin' => 'delivery',
 

 

Добавляем:

 

'DopservicesAdmin' => 'dopservices',
'DopserviceAdmin' => 'dopservice',
 

 

19. Открываем simpla/OrderAdmin.php

20. После 

 

$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);         
 

 

 

Все! Если будут вопросы пишите

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

Сделал себе в админке и в карточке товара доп. услуги, например "подарочная упаковка"

А Вы не могли бы объяснить хоть немного Ваш замысел, то есть дать описание хоть краткое?

 

Непонятно как минимум следующее:

1. Пишете "Сделал ... в карточке товара", а судя по описанию, в карточке товара у Вас НИЧЕГО не меняется.

2. Насколько можно понять из описания, допуслуга добавляется на странице корзины и относится к ЗАКАЗУ, а никак не к товару. Допуслуга только одна может быть выбрана?

3. Версия какая? Упоминающийся у Вас api/Simpla_classic.php в последних версиях не используется.

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

Упоминающийся у Вас api/Simpla_classic.php в последних версиях не используется.

Этот файл вообще никогда не использовался, я на этот счет общался с Денисом.
Ссылка на сообщение
Поделиться на другие сайты

Да действительно это моя оплошность! Доп услуги появляются в корзине и в заказе!

Файл остался уже не помню зачем и откуда - он действительно не используется

Версия симплы 2.2.4

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

А Вы не могли бы объяснить хоть немного Ваш замысел, то есть дать описание хоть краткое?

 

Непонятно как минимум следующее:

1. Пишете "Сделал ... в карточке товара", а судя по описанию, в карточке товара у Вас НИЧЕГО не меняется.

2. Насколько можно понять из описания, допуслуга добавляется на странице корзины и относится к ЗАКАЗУ, а никак не к товару. Допуслуга только одна может быть выбрана?

3. Версия какая? Упоминающийся у Вас api/Simpla_classic.php в последних версиях не используется.

 Доп услуги чекбоксами сделаны - т.е можно выбрать неограниченное кол-во доп услуг

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

В действительности у Вас доп услуга есть часть ЗАКАЗА, то есть выступает фактически как ТОВАР.

И намного проще было бы оформить ее технически как ТОВАР, например, из специальной (неактивной) категории. На странице корзины вставить доп услуги как товары с возможностью добавления. И добавить контроль корзины и запись заказа: количество таких специальных товаров - 0 или 1, ставить цену нулевую, если надо. Понадобятся изменения всего лишь в 3-5 файлах и не придется ничего или почти ничего менять в структуре базы.

 

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

И описаны явно не все изменения. Например, согласно текущему описанию страница доп услуг в админке будет секретной, так как НИГДЕ НЕ БУДЕТ ссылок на нее, поскольку не меняются соседние шаблоны админки. Вероятнее всего, подобных моментов еще немало. И если их все поправить, то будет уже порядка 30 пунктов изменений...

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

Зачем так радикально?  Идея вполне хорошая и жизнеспособная.

Тема пусть живет, может, кому пригодится. Народу на форуме немало, кто любит попа, а кто попадью...

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

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

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

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

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

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

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

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

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

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