VM 2.x Дополнительная цена в VM2

Статус
В этой теме нельзя размещать новые ответы.

feNDer2k5

Создатель
Регистрация
29 Янв 2008
Сообщения
36
Реакции
9
Подскажите как правильно добавить в VM2.0.22a дополнительную цену со скидкой 20%, но что бы она была не основная (нельзя по этой цене купить), просто что бы покупатели видели сколько бы стоил товар со скидкой, для информации...штатными средствами что-то не особо получается.
 
Спасибо, но в ссылке несколько другая задача, там по скидочной цене можно купить, а мне так не нужно.
Вопрос решил путем модификации функции createPriceDiv в /administrator/components/com_virtuemart/helpers/currencydisplay.php и созданием новой функции уже со скидкой , где цену просто умножил на 0.8 (минус 20%)
 
Спасибо, но в ссылке несколько другая задача, там по скидочной цене можно купить, а мне так не нужно.
Вопрос решил путем модификации функции createPriceDiv в /administrator/components/com_virtuemart/helpers и созданием новой функции уже со скидкой , где цену просто умножил на 0.8 (минус 20%)
Также можете создать в таблице товара отдельное поле для нужных данных, в данном случае для модифицированой цены, затем в админке соответственно добавить элемент для ввода этой самой цены, и само собой в карточке в нужном месте остается лишь вывести данное поле)
Для просмотра ссылки Войди или Зарегистрируйся
 
  • Заблокирован
  • #5
Спасибо, но в ссылке несколько другая задача, там по скидочной цене можно купить, а мне так не нужно.
Вопрос решил путем модификации функции createPriceDiv в /administrator/components/com_virtuemart/helpers/currencydisplay.php и созданием новой функции уже со скидкой , где цену просто умножил на 0.8 (минус 20%)

Стоит такая же задача. Помоги решить данный вопрос. Приведи, пожалуйста код, который ты изменл и что за функция и куда ты ее добавил уже месяц не могу найти ни одного решения.
Хожу рядом, но никак не решить.
 
В /administrator/components/com_virtuemart/helpers/currencydisplay.php ищешь строку примерно 355 начинающуюся public function createPriceDiv ... Копируешь эту фунцию и вставляешь ниже и правишь примерно так:
PHP:
public function createPriceDiv($name,$description,$product_price,$priceOnly=false,$switchSequel=false,$quantity = 1.0,$forceNoLabel=false){

        //        vmdebug('createPriceDiv '.$name,$product_price[$name]);
        if(empty($product_price) and $name != 'billTotal' and $name != 'billTaxAmount') return '';

        //The fallback, when this price is not configured
        if(empty($this->_priceConfig[$name])){
            $this->_priceConfig[$name] = $this->_priceConfig['salesPrice'];
        }

        //This is a fallback because we removed the "salesPriceWithDiscount" ;
        if(is_array($product_price)){
            $price = $product_price[$name] ;
        } else {
            $price = $product_price;
        }

        //This could be easily extended by product specific settings
        if(!empty($this->_priceConfig[$name][0])){
            if(!empty($price) or $name == 'billTotal' or $name == 'billTaxAmount'){
                $vis = "block";
                $priceFormatted = $this->priceDisplay($price,0,(float)$quantity,false,$this->_priceConfig[$name][1],$name );
            } else {
                $priceFormatted = '';
                $vis = "none";
            }
            if($priceOnly){
                return $priceFormatted;
            }
            if($forceNoLabel) {
                return '<div class="Price'.$name.'" style="display : '.$vis.';" ><span class="Price'.$name.'" >'.$priceFormatted.'</span></div>';
            }
            $descr = '';
            if($this->_priceConfig[$name][2]) $descr = JText::_($description);
            //            vmdebug('createPriceDiv $name '.$name.' '.$product_price[$name]);
            if(!$switchSequel){
                return '<div class="Price'.$name.'" style="display : '.$vis.';" >'.$descr.'<span class="Price'.$name.'" >'.$priceFormatted.'</span></div>';
            } else {
                return '<div class="Price'.$name.'" style="display : '.$vis.';" ><span class="Price'.$name.'" >'.$priceFormatted.'</span>'.$descr.'</div>';
            }
        }

    }

    public function createDiscountPriceDiv($name,$description,$product_price,$priceOnly=false,$switchSequel=false,$quantity = 1.0,$forceNoLabel=false){

        //        vmdebug('createPriceDiv '.$name,$product_price[$name]);
        if(empty($product_price) and $name != 'billTotal' and $name != 'billTaxAmount') return '';

        //The fallback, when this price is not configured
        if(empty($this->_priceConfig[$name])){
            $this->_priceConfig[$name] = $this->_priceConfig['salesPrice'];
        }

        //This is a fallback because we removed the "salesPriceWithDiscount" ;
        if(is_array($product_price)){
            $price = $product_price[$name] * 0.8 ;
        } else {
            $price = $product_price * 0.8;
        }

        //This could be easily extended by product specific settings
        if(!empty($this->_priceConfig[$name][0])){
            if(!empty($price) or $name == 'billTotal' or $name == 'billTaxAmount'){
                $vis = "block";
                $priceFormatted = $this->priceDisplay($price,0,(float)$quantity,false,$this->_priceConfig[$name][1],$name );
            } else {
                $priceFormatted = '';
                $vis = "none";
            }
            if($priceOnly){
                return $priceFormatted;
            }
            if($forceNoLabel) {
                return '<div class="Price'.$name.'" style="display : '.$vis.';" ><span class="Price'.$name.'" >'.$priceFormatted.'</span></div>';
            }
            $descr = '';
            if($this->_priceConfig[$name][2]) $descr = JText::_($description);
            //            vmdebug('createPriceDiv $name '.$name.' '.$product_price[$name]);
            if(!$switchSequel){
                return '<div class="Price'.$name.'" style="display : '.$vis.';" >'.$descr.'<span class="Price'.$name.'" >'.$priceFormatted.'</span></div>';
            } else {
                return '<div class="Price'.$name.'" style="display : '.$vis.';" ><span class="Price'.$name.'" >'.$priceFormatted.'</span>'.$descr.'</div>';
            }
        }

    }
В данном случае скидка 20% (множитель 0,8)

Затем отображаем скидочную цену там где нужно, например в карточке товара \com_virtuemart\views\productdetails\tmpl\default_showprices.php добавив строку:
PHP:
echo $this->currency->createDiscountPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESDISCOUNTPRICE', $this->product->prices);

В языковом файле en-GB.com_virtuemart.ini добавляем строку:
COM_VIRTUEMART_PRODUCT_SALESDISCOUNTPRICE="Discount price: "
Для других языков в соответствующем файле...

Способ конечно корявый и при обновлениях вирта надо будет править снова если затрет, но пока что есть то есть...
 
Последнее редактирование:
Подскажите как правильно добавить в VM2.0.22a дополнительную цену со скидкой 20%, но что бы она была не основная (нельзя по этой цене купить), просто что бы покупатели видели сколько бы стоил товар со скидкой, для информации...штатными средствами что-то не особо получается.
Поэкспериментируйте с:
- налогами и правилами,
- выводом цен.
 
Есть еще одна интересная задача с выводом дополнительных цен (virtuemart 2:(
есть магазин, который торгует оптом и в розницу.
Покупателям по умолчанию - розница, а тем, кто добавлен администратором в группу покупателей "опт" другая цена - дополнительная_опт, группа "суперопт" - еще одна цена дополнительная_суперопт.
Цены не связаны процентными соотношениями никак.
Например: есть товар1, розница 100 долл, опт 67, суперопт 60.
товар 2, розница 200 долл, опт 190, суперопт 150.

Заходит покупатель незарегистрированный или в группе по умолчанию и видит цену розница: товар1 = 100.

Заходит покупатель из группы опт или суперопт и !!!!вот тут надо поменять стандартное поведение вирчемарта!!!!

стандартное поведение:
каждый видит ТОЛЬКО ОДНУ ЦЕНУ, ту, которая СООТВЕТСТВУЕТ ЕГО ГРУППЕ.
розница - только рознцу (100 долл),
опт - только опт (67),
суперопт - только суперопт (60).

Надо:
Каждый видит цены всех групп, которые ниже его собственной группы. Покупка, понятно, происходит по цене в соответствии с его группой.
Например, для товара1:
розница - видит только розничную (100)
опт - видит розницу (100) и свою опт (67)
суперопт - видит все три цены.

Кто знает как сделать?
 
Если математически цены не связаны то особо никак...разве что хаком вводить дополнительные поля в админке марта с ценами опт и суеперопт и привязывать их к соответствующим группам покупателей. Как именно это делать не скажу..надо рыть и лапатить серьезно код.
 
Есть еще одна интересная задача с выводом дополнительных цен (virtuemart 2:(
есть магазин, который торгует оптом и в розницу.
Покупателям по умолчанию - розница, а тем, кто добавлен администратором в группу покупателей "опт" другая цена - дополнительная_опт, группа "суперопт" - еще одна цена дополнительная_суперопт.
Цены не связаны процентными соотношениями никак.
Например: есть товар1, розница 100 долл, опт 67, суперопт 60.
товар 2, розница 200 долл, опт 190, суперопт 150.

Заходит покупатель незарегистрированный или в группе по умолчанию и видит цену розница: товар1 = 100.

Заходит покупатель из группы опт или суперопт и !!!!вот тут надо поменять стандартное поведение вирчемарта!!!!

стандартное поведение:
каждый видит ТОЛЬКО ОДНУ ЦЕНУ, ту, которая СООТВЕТСТВУЕТ ЕГО ГРУППЕ.
розница - только рознцу (100 долл),
опт - только опт (67),
суперопт - только суперопт (60).

Надо:
Каждый видит цены всех групп, которые ниже его собственной группы. Покупка, понятно, происходит по цене в соответствии с его группой.
Например, для товара1:
розница - видит только розничную (100)
опт - видит розницу (100) и свою опт (67)
суперопт - видит все три цены.

Кто знает как сделать?

А как делали ? Данный механизм был и работал с незапамятных времен... еще с 1 версии Вирта.
Создаем группу покупателей в Вирте. Покупателю выставляем нужную группу. В товарах добавляем (или заливаем) цену для группы покупателей.
А для видимости всех цен нижних групп дописать пару строчек вывода цены из этих групп, работы на час. (в свое время делал для 1 вирта для второго думаю проблемы тоже не составит)
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху