Во многих магазинах проводятся распродажи, во время которых было бы хорошо проинформировать покупателей об этом, показав старую и новую цену со скидкой одновременно. В статье я расскажу, как вывести одновременно 2 цены: старую (или базовую цену) и цену со скидкой. Можно будет, например, старую цену сделать зачеркнутой, а рядом с ней поместить новую цену. Такое часто встречается в интернет-магазинах.

1. Настройки в админке virtuemart 2

Заходим в Настройки -> Формирование цен

Я оставил галки только на фактической и окончательно цене.



2. Назначение скидки товару

Чтобы присвоить товару 2 цены на странице редактирования товара в поле Override вписываем нашу цену со скидкой и не забываем поставить галочку Переписать окончательно.



3. Назначение стилей для базовой цены и цены со скидкой

Стили я добавлял в css файл шаблона по адресу /templates/имя шаблона/css/template.css (в других шаблонах путь к css файлу может быть другим).

Для базовой цены я прописал такие стили:

 

.PricepriceWithoutTax{
font-size:14px !important;
color:#7C7877 !important;
font-weight:700;
}


Чтобы сделать базовую цену зачеркнутой нужно дописать в приведенные выше стили text-decoration: line-through;

Для цены со скидкой у меня такие стили:

 

.PricesalesPrice{
font-size:18px !important;
color: #E74423 !important;
}
 
.PricesalesPrice .PricesalesPrice{
font-size:18px !important;
color: #ffffff !important;
}


Здесь я указал разные стили для заголовка цены и ее цифрового значения. Вариантов может быть великое множество, все ограничивается только вашей фантазией и знаниями css.

У меня в итоге получился такой вывод цен на странице категорий и в карточке товара:

 

 

4. Правка файлов virtuemart



Что бы цена не отображалась дважды если на товар не назначена скидка нужно отредактировать несколько файлов.

Файл, отвечающий за вывод цены в карточке товара: components\com_virtuemart\views\productdetails\tmpl\default_showprices.php

Вместо

 

echo $this->currency->createPriceDiv('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $this->product->prices);
    echo $this->currency->createPriceDiv('priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $this->product->prices);

 

Я вставил

 

if($this->product->prices[salesPrice] != $this->product->prices[priceWithoutTax]) {
    echo $this->currency->createPriceDiv('salesPrice', 'Цена со скидкой:<br>', $this->product->prices);
    echo $this->currency->createPriceDiv('priceWithoutTax', 'Обычная цена:<br>', $this->product->prices);
     } else {
    echo $this->currency->createPriceDiv('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $this->product->prices);
    echo $this->currency->createPriceDiv('priceWithoutTax', '', '');
     }

 

Как видно здесь же я добавил название Цена со скидкой и Обычная цена.

Файл, отвечающий за вывод цены на странице категорий: components\com_virtuemart\views\category\tmpl\default.php

Вместо

 

echo $this->currency->createPriceDiv('salesPrice','COM_VIRTUEMART_PRODUCT_SALESPRICE',$product->prices);
                  echo $this->currency->createPriceDiv('priceWithoutTax','COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX',$product->prices);

 

Я вставил

 

if($product->prices[salesPrice] != $product->prices[priceWithoutTax]) {
                   echo $this->currency->createPriceDiv('salesPrice', 'Цена со скидкой:<br>', $product->prices);
                   echo $this->currency->createPriceDiv('priceWithoutTax', 'Обычная цена: ', $product->prices);
                      } else {
                   echo $this->currency->createPriceDiv('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices);
                   echo $this->currency->createPriceDiv('priceWithoutTax', '', '');
                      }

 

Здесь так же я прописал свое название для цен в том случае, если на товар назначена скидка.


Чтобы скидки правильно отображались на главной странице магазина нужно в файле components\com_virtuemart\views\virtuemart\tmpl\default_products.php вместо

 

echo $this->currency->createPriceDiv( 'salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices );
               echo $this->currency->createPriceDiv( 'priceWithoutTax', 'COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX', $product->prices );

 

Прописать ту же конструкцию

 

if($product->prices[salesPrice] != $product->prices[priceWithoutTax]) {
                   echo $this->currency->createPriceDiv('salesPrice', 'Цена со скидкой:<br>', $product->prices);
                   echo $this->currency->createPriceDiv('priceWithoutTax', 'Обычная цена: ', $product->prices);
                      } else {
                   echo $this->currency->createPriceDiv('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices);
                   echo $this->currency->createPriceDiv('priceWithoutTax', '', '');
                      }

 

Чтобы скидки корректно отображались в модуле Virtuemart Товары в файле modules/mod_virtuemart_product/tmpl/default.php вместо

 

if ($show_price) {
                        //      echo $currency->priceDisplay($product->prices['salesPrice']);
                        if (!empty($product->prices['salesPrice'])) {
                            echo $currency->createPriceDiv ('salesPrice', '', $product->prices, FALSE, FALSE, 1.0, TRUE);
                        }

 

Прописать

 

if ($show_price) {
                        //      echo $currency->priceDisplay($product->prices['salesPrice']);
                        if ($product->prices[salesPrice] != $product->prices[priceWithoutTax]) {
                            echo $currency->createPriceDiv ('salesPrice', 'Цена со скидкой: ', $product->prices);
                            echo $currency->createPriceDiv ('priceWithoutTax', 'Обычная цена: ', $product->prices);
                        }
                        else {
                   echo $currency->createPriceDiv ('salesPrice', '', $product->prices, FALSE, FALSE, 1.0, TRUE);
 
                      }

 

Теперь у нас на всех страницах магазина вывод скидок должен работать корректно.

 

Вывод двух цены и цены со скидкой для virtuemart 2.0.22

Структура файлов в virtuemart 2.0.22 немного изменилась. Теперь можно вывести корректый вывод цены и цены со скидкой без правки файлов. Ниже представленный способ не претендует на 100% правильность, но он работает. Если у вас есть свои наработки, то буду рад если вы поделитесь ими в комментариях.

Итак, чтобы вывести две цены нужно в настройках Virtuemart в разделе Формирование цен выставить следующие настройки.

vyvod dvukh tsen dlya virtuemart 2 0 22 300x212

Далее в Разделе Товары в пункте Налоги и правила расчета создать новое правило расчета.

sozdanie novogo naloga 300x65

  • Название может быть любое.
  • Опубликовано  ставим галочку
  • В поле Вид расчета выбираем — НДС по каждому товару
  • В поле Значение — 0

nastroyki naloga1 300x276

Таким образом мы указали, что стоимость всех товаров с НДС увеличится на 0р.

После этого если у товара есть скидка, то будет выводится две цены, если скидки нет, то только одна.

vyvod dvukh tsen na stranitse kategoriy 300x184

Остается заменить надпись Основная цена с НДС. Для этого нужно в заменить эту фразу в файле language/ru-RU/ru-RU.com_virtuemart.ini, например, на Цена без скидки. В результате получим

vyvod dvukh tsen na stranitse kategoriy2 300x185