Помощь Две цены у товара

Absolute

Крокодил ;)
Регистрация
9 Авг 2009
Сообщения
581
Реакции
456
Здравствуйте. Требуется решение, позволяющее установить две цены для ряда товаров.

Логика такая:
Если значение корзины меньше, чем 20 т.р. - применяется первая цена.
Если значение корзины больше 20 т.р. - применяется вторая цена.

Какие есть варианты?

PS:
Отдельно к прогерам на PrestaShop - отправьте плиз вашу цену за реализацию такого функционала в pm.
 
А если я положил товар когда у меня в корзине было больше чем на 20тыр, а потом что то удалил из корзины и сумма корзины уже меньше 20 тыр, пересчитываем цены в большие?
 
А если я положил товар когда у меня в корзине было больше чем на 20тыр, а потом что то удалил из корзины и сумма корзины уже меньше 20 тыр, пересчитываем цены в большие?
Нее... Так и считаем по ценам, которые установлены для корзины, итог которой меньше 20 тыс.
 
Нее... Так и считаем по ценам, которые установлены для корзины, итог которой меньше 20 тыс.
А правила корзины не подходят? Там вроде можно и отрицательную скидку поставить, емнип.
 
А правила корзины не подходят? Там вроде можно и отрицательную скидку поставить, емнип.
Почти оно... Но блин для каждого товара писать правило? Это хорошо, когда маленький магазин, а здесь мелкооптовый. У юзера, допустим, в корзине 30 товаров - на странице корзины под товарами выведется 30 примененных правил, при этом нет возможности вывести вторую цену в карточке товара, чтобы юзер мог видеть какую цену он получит, если сделает заказ на сумму больше, чем 20 т.р.
 
Почти оно... Но блин для каждого товара писать правило? Это хорошо, когда маленький магазин, а здесь мелкооптовый. У юзера, допустим, в корзине 30 товаров - на странице корзины под товарами выведется 30 примененных правил, при этом нет возможности вывести вторую цену в карточке товара, чтобы юзер мог видеть какую цену он получит, если сделает заказ на сумму больше, чем 20 т.р.
Если вторая цена - процент от первой, то правила корзины и в шаблоне просто вывести еще и цену, умноженную на процент. У нас была такая ситуация, но у вас наверно все не так прозаично?
 
Если вторая цена - процент от первой, то правила корзины и в шаблоне просто вывести еще и цену, умноженную на процент. У нас была такая ситуация, но у вас наверно все не так прозаично?
Если бы было так, то вообще проблем не было. В том и дело, что разные наценки у товаров. Идеально было бы там где "Добавить специальную цену" для товара.
Поле "Начиная с" - не по кол.-ву единиц, а по сумме корзины.
13209789.png
 
Вообще странно что нельзя одним махом добавить поле с оптовыми ценами на страницу товара. Долго искал но ребята пишут либо дописывать, либо платные модули, работу которых даже проверить не получается.
 
Долго искал но ребята пишут либо дописывать
Что-то даже за деньги дописать никто не берется(( Единственное предложение поступило на официальном форуме PS от разрабов из США, просили 800 долларов.
Так и пришлось своими силами через адские изъ*бы, вдруг кому пригодится решение.
В редактировании товара на вкладке Shipping есть input Additional shipping fees (for a single item). Это типа дополнительные сборы за доставку одной единицы данного товара.
Туда, собственно, и пишем разницу между первой и второй ценой. Всё равно эта возможность почти никогда не используется на реальных магазинах.
Далее создаем Cart rule и в Minimum amount пишем значение корзины - границу, которая разделяет применение первой или второй цены. В моем случае это 20 тыс. А на вкладке Actions активируем Free shipping и сохраняем.
После этого получаем нужный функционал, остается только переверстать шаблоны. Чтобы оперировать в темплэйтах со значением из Additional shipping fees, выводить вторую цену там где это требуется и т.д. - в
/controllers/front/ProductController.php
В массив ниже нужно добавить additional_shipping_cost
Код:
            $this->context->smarty->assign(array(
                'stock_management' => Configuration::get('PS_STOCK_MANAGEMENT'),
                'customizationFields' => $customization_fields,
                'id_customization' => empty($customization_datas) ? null : $customization_datas[0]['id_customization'],
                'accessories' => $accessories,
                'return_link' => $return_link,
                'product' => $this->product,
                'product_manufacturer' => new Manufacturer((int)$this->product->id_manufacturer, $this->context->language->id),
                'token' => Tools::getToken(false),
                'features' => $this->product->getFrontFeatures($this->context->language->id),
                'attachments' => (($this->product->cache_has_attachments) ? $this->product->getAttachments($this->context->language->id) : array()),
                'allow_oosp' => $this->product->isAvailableWhenOutOfStock((int)$this->product->out_of_stock),
                'last_qties' =>  (int)Configuration::get('PS_LAST_QTIES'),
                'HOOK_EXTRA_LEFT' => Hook::exec('displayLeftColumnProduct'),
                'HOOK_EXTRA_RIGHT' => Hook::exec('displayRightColumnProduct'),
                'HOOK_PRODUCT_OOS' => Hook::exec('actionProductOutOfStock', array('product' => $this->product)),
                'HOOK_PRODUCT_ACTIONS' => Hook::exec('displayProductButtons', array('product' => $this->product)),
                'HOOK_PRODUCT_TAB' =>  Hook::exec('displayProductTab', array('product' => $this->product)),
                'HOOK_PRODUCT_TAB_CONTENT' =>  Hook::exec('displayProductTabContent', array('product' => $this->product)),
                'HOOK_PRODUCT_CONTENT' =>  Hook::exec('displayProductContent', array('product' => $this->product)),
                'display_qties' => (int)Configuration::get('PS_DISPLAY_QTIES'),
                'display_ht' => !Tax::excludeTaxeOption(),
                'jqZoomEnabled' => Configuration::get('PS_DISPLAY_JQZOOM'),
                'ENT_NOQUOTES' => ENT_NOQUOTES,
                'outOfStockAllowed' => (int)Configuration::get('PS_ORDER_OUT_OF_STOCK'),
                'errors' => $this->errors,
                'body_classes' => array(
                    $this->php_self.'-'.$this->product->id,
                    $this->php_self.'-'.$this->product->link_rewrite,
                    'category-'.(isset($this->category) ? $this->category->id : ''),
                    'category-'.(isset($this->category) ? $this->category->getFieldByLang('link_rewrite') : '')
                ),
                'display_discount_price' => Configuration::get('PS_DISPLAY_DISCOUNT_PRICE'),
                'additional_shipping_cost' => $this->product->additional_shipping_cost
            ));
Например, чтобы вывести вторую цену в product.tpl :
Код:
{if $additional_shipping_cost > 0}
     {convertPrice price=$productPrice|floatval + $additional_shipping_cost|floatval}    
{/if}
Кстати, поле additional_shipping_cost есть в csv импорте - можно скопом лить и обновлять вторую цену, что меня лично радует.

PS Всё вышеописанное актуально, если в магазине не учитывается/рассчитывается доставка.
 
Последнее редактирование:
Назад
Сверху