Массив стоимости товара product->prices в Virtuemart

Комментариев: 4

Когда используешь стандартный шаблон Virtuemart, то видишь множество разнообразных цен и можешь регулировать их вывод из настроек магазина. Но, когда устанавливаешь какой-либо шаблон, не редко, ты ограничен всего одной ценой, например окончательной, иногда элементарно нет возможности вывести старую и новую цену.

Поэтому приходится выводить их самостоятельно. Вывод цен может осуществляться как в файле шаблона товара /templates/шаблон/html/com_virtuemart/productdetails так и в файле шаблона вывода цен: /templates/vina_orianna/html/com_virtuemart/sublayouts/prices.php

Там есть массив $product->prices, который хранит в себе все данные о имеющихся ценах на товар. Возможные варианты:

  • salesPrice — окончательная цена
  • costPrice — себестоимость
  • basePrice — фактическая цена
  • basePriceVariant — основная цена преобразованная в валюту магазина. Цена в зависимости от комбинации товаров.
  • salesPriceTemp — модификатор базовой цены, который используется только в связке с JS, для её обновления.
  • discountAmount — сумма скидки
  • priceWithoutTax — Фактическая цена без налога
  • DBTax — цена с налогом
  • Tax — сумма налога
  • VatTax — НДС
  • DATax — цена после уплаты налогов

Используйте строку вида:

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

Для вывода окончательной цены и по аналогии другие цены.

Вывод цены в Title

Обратил внимание, что многие ищут информацию о том, как вывести стоимость товара в title и решил поделиться решением, точнее их два:

  1. Сделать выгрузку/загрузку через CSVI
  2. Прописывать цену на лету

Решение через CSVI

Подробно описывать не буду, так как здесь в целом всё понятно. Вы делаете экспорт всех товаров, экспортирую поля: product_name, product_sku, product_price и поле customtitle. Затем собираем в Excel нужный нам title, добавляя туда стоимость товара и всё остальное и делаем импорт.

Решение через PHP

Смотрите, есть два варианта как это сделать. Первый вариант, просто генерировать тайтл из каких-то данных о товаре, а второй способ, заменять какое-то слово в title на стоимость товара. Сейчас поймете.

Первым делом давайте переопределим стандартный title. Для этого, нужно в шаблон карточки товара вашего шаблона ваш-шаблон/html/com_virtuemart/productdetails/default.php, написать следующий код:

//Нужно для получения данных о странице
$document = JFactory::getDocument();

//Получаем стоимость товара
$price_title = ($this->product->prices['product_price'].' руб.');

//Получаем название товара
$name_title = $this->product->product_name;

//Устанавливаем title
$document->setTitle($name_title.' - '.$price_title);

Но лично мне такой вариант не очень нравится, так как теряется вся гибкость. Больше не будет возможность для разных товаров задать разные тайтлы, везде будет одинаковый шаблон. Я бы предложил использовать другой вариант. Например заменять слово цена в title на цену в рублях. То есть, вы пишите Купить пиджак 001 цена, а код автоматически подставляет цену. Например вот так:

//Нужно для получения данных о странице
$document = JFactory::getDocument();
 
//Получаем текущий title
$current_title =  $document->getTitle();

//Что ищем в Title
$search = 'цена';

//На что меняем
$replace = $this->product->prices['product_price'].' руб.';

//Получаем окончательный вид Title
$my_title = str_replace($search, $replace, $current_title);

//Устанавливаем title
$document->setTitle($my_title);

Выбирайте удобный для вас способ и пользуйтесь на здоровье!

Уведомлять о новых комментариях
Уведомлять
guest
4 комментариев
Inline Feedbacks
View all comments
Svyat
Svyat
4 лет назад

Роман, добрый вечер. Подскажите, пожалуйста. В Virtuemart 3 можно ли назначить товару несколько. цен, в зависимости от, например, размера? И что бы они участвовали в фильтре. Есть модель матраса, а у неё куча размеров и к каждому размеру надо присвоить свою цену.

Svyat
Svyat
4 лет назад

Спасибо огромное! Понял куда копать. Очень помогли!

Александр
Александр
3 лет назад

Добрый день.
Подскажите плиз правильную конструкцию вывода цены в нужном месте.
Например в модуле слайдера товаров. Сейчас выводятся не корректно.
Хотел бы заменить.