1. Уважаемые пользователи, прежде чем ответить в теме или создать новую,
    внимательно ознакомьтесь с правилами раздела

    Кому лень работать или руки не оттуда - пользуйтесь услугами специалистов
  2. Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.."

    Есть JED!!! Ищите там!!!

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

Тема в разделе "Virtuemart", создана пользователем feNDer2k5, 23 июл 2013.

Информация :
  • Уважаемые пользователи, прежде чем ответить в теме или создать новую, внимательно ознакомьтесь с правилами раздела
  • Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.." Есть JED!!! Ищите там!!!
  • Аналоги ищите там же - на JED!!!
  • Новая версия? - У кого будет - тот выложит!
  1. feNDer2k5

    feNDer2k5 Создатель

    Регистр.:
    29 янв 2008
    Сообщения:
    34
    Симпатии:
    8
    Подскажите как правильно добавить в VM2.0.22a дополнительную цену со скидкой 20%, но что бы она была не основная (нельзя по этой цене купить), просто что бы покупатели видели сколько бы стоил товар со скидкой, для информации...штатными средствами что-то не особо получается.
     
  2. artefakt777

    artefakt777

    Регистр.:
    15 июл 2012
    Сообщения:
    455
    Симпатии:
    119
  3. feNDer2k5

    feNDer2k5 Создатель

    Регистр.:
    29 янв 2008
    Сообщения:
    34
    Симпатии:
    8
    Спасибо, но в ссылке несколько другая задача, там по скидочной цене можно купить, а мне так не нужно.
    Вопрос решил путем модификации функции createPriceDiv в /administrator/components/com_virtuemart/helpers/currencydisplay.php и созданием новой функции уже со скидкой , где цену просто умножил на 0.8 (минус 20%)
     
    neGODnic нравится это.
  4. Magic7tyle

    Magic7tyle Постоялец

    Регистр.:
    19 сен 2012
    Сообщения:
    70
    Симпатии:
    33
    Также можете создать в таблице товара отдельное поле для нужных данных, в данном случае для модифицированой цены, затем в админке соответственно добавить элемент для ввода этой самой цены, и само собой в карточке в нужном месте остается лишь вывести данное поле)
    Вот немного инфо
     
  5. neGODnic

    neGODnic Писатель Нарушитель

    Заблокирован
    Регистр.:
    26 дек 2012
    Сообщения:
    3
    Симпатии:
    0
    Стоит такая же задача. Помоги решить данный вопрос. Приведи, пожалуйста код, который ты изменл и что за функция и куда ты ее добавил уже месяц не могу найти ни одного решения.
    Хожу рядом, но никак не решить.
     
  6. feNDer2k5

    feNDer2k5 Создатель

    Регистр.:
    29 янв 2008
    Сообщения:
    34
    Симпатии:
    8
    В /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: "
    Для других языков в соответствующем файле...

    Способ конечно корявый и при обновлениях вирта надо будет править снова если затрет, но пока что есть то есть...
     
    Последнее редактирование: 30 ноя 2013
  7. Алекс Вишневский

    Алекс Вишневский Создатель

    Регистр.:
    25 янв 2013
    Сообщения:
    22
    Симпатии:
    0
    Поэкспериментируйте с:
    - налогами и правилами,
    - выводом цен.
     
  8. dima_v

    dima_v Создатель

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

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

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

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

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

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

    feNDer2k5 Создатель

    Регистр.:
    29 янв 2008
    Сообщения:
    34
    Симпатии:
    8
    Если математически цены не связаны то особо никак...разве что хаком вводить дополнительные поля в админке марта с ценами опт и суеперопт и привязывать их к соответствующим группам покупателей. Как именно это делать не скажу..надо рыть и лапатить серьезно код.
     
  10. IVS

    IVS

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