Как вывести 2 цены: основную и цену со скидкой в virtuemart 2
Во многих магазинах проводятся распродажи, во время которых было бы хорошо проинформировать покупателей об этом, показав старую и новую цену со скидкой одновременно. В статье я расскажу, как вывести одновременно 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 в разделе Формирование цен выставить следующие настройки.
Далее в Разделе Товары в пункте Налоги и правила расчета создать новое правило расчета.
- Название может быть любое.
- Опубликовано ставим галочку
- В поле Вид расчета выбираем — НДС по каждому товару
- В поле Значение — 0
Таким образом мы указали, что стоимость всех товаров с НДС увеличится на 0р.
После этого если у товара есть скидка, то будет выводится две цены, если скидки нет, то только одна.
Остается заменить надпись Основная цена с НДС. Для этого нужно в заменить эту фразу в файле language/ru-RU/ru-RU.com_virtuemart.ini, например, на Цена без скидки. В результате получим