Модуль Статические цены товара в мультивалюте

sol_los

Мой дом здесь!
Регистрация
17 Окт 2011
Сообщения
424
Реакции
278
Набросал тут модуль для статических цен товара
Для чего нужен:
когда нужно товару сделать в каждой валюте красивую уникальную цену, а магазин только пересчитывает из валюты по умолчанию через курс.
да я знаю что есть модули округляющие цены до десятичных типа 10.99$ - но когда у вас отключены десятичные, да и вообще вы хотите иметь несколько разные цены в разных валютах - здесь поможет этот модуль.
картинка - как выглядит внутри:
Выделение_052.png

Я не большой специалист по Prestashop - не могу точно знать как правильно переопределять методы, потому будет небольшая инструкция ну и прикрепленный файлик, для ленивых.

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

теперь переходим к ftp в папку /override/classes
если у вас уже есть файл Product.php:
-
открывайте его и ищите есть ли в нем функция public static function priceCalculation
- если есть - вам необходимо найти в ней секцию
PHP:
 if (Combination::isFeatureActive()) {

                $sql->select('IFNULL(product_attribute_shop.id_product_attribute,0) id_product_attribute, product_attribute_shop.`price` AS attribute_price, product_attribute_shop.default_on');
                $sql->leftJoin('product_attribute_shop', 'product_attribute_shop', '(product_attribute_shop.id_product = p.id_product AND product_attribute_shop.id_shop = '.(int)$id_shop.')');
            } else {
                $sql->select('0 as id_product_attribute');
            }
и добавить ПЕРЕД ней

PHP:
            /*Add Sql multistaticprice module*/
            $sql->select('mps.`price` as multi_price');           
            $sql->leftJoin('multipricestatic', 'mps' ,'mps.`id_shop` = ' .(int)$id_shop.' AND mps.`id_product` = ' .(int)$id_product . ' AND mps.`id_currency` = '.(int)$id_currency);
           /*END Add Sql multistaticprice module*/
- далее найти

PHP:
                        'price' => ($row['multi_price']) ? $row['multi_price'] : $row['price'],
                        'ecotax' => $row['ecotax'],
                        'attribute_price' => (isset($row['attribute_price']) ? $row['attribute_price'] : null)

и добавить перед ней
PHP:
                        /*Add value multistaticprice module*/
                        'multi_price_static' => $row['multi_price'],
                        /*END Add value multistaticprice module*/
-далее найти
PHP:
$price = Tools::convertPrice($price, $id_currency);
и заменить на
PHP:
            /*If value multistaticprice module*/
            if($result['multi_price_static'] == null){               
                $price = Tools::convertPrice($price, $id_currency);                   
            }        
            /*End If value multistaticprice module*/

- для тех у кого есть файл Product.php но в нем нет метода public static function priceCalculation
откройте прикрепленный файл Product.php и скопируйте public static function priceCalculation

для тех у кого нет файла Product.php - можете просто распаковать прикрепленный и залить в папку /override/classes

не забываем, в пункте Производительность, чистить кеш
 

Вложения

  • multipricestatic.zip
    3,8 KB · Просмотры: 10
  • Product.php.zip
    2,5 KB · Просмотры: 6
А как у этого модуля работает логика при наличии у товара комбинации, влекущей увеличение цены. Увеличивает на указанную цифру правильно только в дефолтной валюте, или Правильно пересчитывает для каждой валюты?
 
А как у этого модуля работает логика при наличии у товара комбинации,
честно говоря, я это не проверял, хотя по идее логика вполне себе должна работать дальше.
 
Для просмотра ссылки Войди или Зарегистрируйся, ну в общем стандартно - берет то, что ты добавил в комбинации, пересчитывает по курсу выбранной валюты и добавляет к цене из модуля.
 
т.е.: если у меня дефолтная валюта - гривна, но весь товар долларовый или евровый, соответственно так и добавляю - Цена товара - в долларах или евро; и в комбинации (например для $-го товара) мне нужно увеличить стоимость товара на, ну допустим 50 $, то я ввожу цифру 50 - и все корректно пересчитается в конечном итоге в гривну во ФО, где она выводится по дефолту?

Сейчас для Правильного вывода конечной цены в гривне, нужно это 50 $ увеличение умножить на курс и ввести эту цифру в комбинации. Для еврового товара - соответственно.
 
Сейчас для Правильного вывода конечной цены в гривне, нужно это 50 $ увеличение умножить на курс и ввести эту цифру в комбинации. Для еврового товара - соответственно.
странно, мне кажется у тебя что-то неверно работает, все должно работать так как ты описал в предложении выше.
 
Нужно проверять. У меня сейчас модуль Мультивалют стоит турецкий.

Также вот человек разбирался с этим модулем Для просмотра ссылки Войди или Зарегистрируйся

но и он там далее по тексту проверил и описал ту же проблему с комбинациями и описал вариант решения, но я пока не пробовал.
 
Назад
Сверху